IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Création de page web depuis un fichier XML


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 64
    Points : 48
    Points
    48
    Par défaut Création de page web depuis un fichier XML
    Bonjour,
    je souhaite envoyer un fichier XML afin que mon serveur (localhost) crée une page grâce au XML.
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    HttpClient httpClient = new HttpClient();
    HostConfiguration hostConfig=new HostConfiguration();
    hostConfig.setHost("localhost", 8090);
    httpClient.setHostConfiguration(hostConfig);
    JAXBContext context = JAXBContext.newInstance("org.xwiki.rest.model.jaxb");
    Marshaller marshaller = context.createMarshaller();
     
    String titlemod=java.net.URLEncoder.encode(input_row.title); //encode le titre pour l'utiliser dans l'URL
     
    // Creation de l'objet Page pour l'article de blog
    Page page=new Page();				
    page.setSyntax("xwiki/2.0");
    page.setTitle(input_row.title);
    page.setContent("");
    marshaller.marshal(page,new File("C:/tmp/pageout.xml"));
     
    // Creation des proprietes de l'article
    List<Property> props = new ArrayList<Property>();
    Property prop1=new Property();
    prop1.setName("content");
    prop1.setType("com.xpn.xwiki.objects.classes.TextAreaClass");
    prop1.setValue(input_row.fulltext);
    props.add(prop1);
    Property prop2=new Property();
    prop2.setName("extract");
    prop2.setType("com.xpn.xwiki.objects.classes.TextAreaClass");
    prop2.setValue(input_row.introtext);
    props.add(prop2);
    Property prop3=new Property();
    prop3.setName("title");
    prop3.setType("com.xpn.xwiki.objects.classes.StringClass");
    prop3.setValue(input_row.title);
    props.add(prop3);
    Property prop4=new Property();
    prop4.setName("category");
    prop4.setType("com.xpn.xwiki.objects.classes.DBTreeListClass");
    prop4.setValue(input_row.category);
    props.add(prop4);
    Property prop5=new Property();
    prop5.setName("publishDate");
    prop5.setType("com.xpn.xwiki.objects.classes.DateClass");
    prop5.setValue(""+input_row.created);
    props.add(prop5);
     
     //Creation de l'objet avec la liste des proprietes pour l'article
    org.xwiki.rest.model.jaxb.Object obj = new org.xwiki.rest.model.jaxb.Object().withProperties(props);
    obj.setSpace("Blog");
    obj.setPageName(input_row.title);
    obj.setClassName("Blog.BlogPostClass");
    marshaller.marshal(obj, new File("C:/tmp/objout.xml"));
     
     
    //PUT pour créer la PAGE
    PutMethod putMethodpage=new PutMethod("http;//localhost:8090/xwiki/rest/wikis/xwiki/spaces/Blog/pages/"+input_row.title);
    putMethodpage.setRequestBody(new FileInputStream ("C:/tmp/pageout.xml"));
    putMethodpage.addRequestHeader("Accept", "application/xml");
    httpClient.executeMethod(putMethodpage);
     
    // PUT pour créer l'OBJECT
    PutMethod putMethodobj=new PutMethod("http;//localhost:8090/xwiki/rest/wikis/xwiki/spaces/Blog/pages/"+input_row.title+"/objects/Blog.BlogPostClass/0");
    putMethodobj.setRequestBody(new FileInputStream ("C:/tmp/objout.xml"));
    putMethodobj.addRequestHeader("Accept", "application/xml");
    httpClient.executeMethod(putMethodobj);
    Pour ceux qui se demande pourquoi je ne déclare pas "input_row...." c'est parce que j'utilise le logiciel d'ETL Talend et que c'est variable sont en fait celles que j'ai en entrée de mon composant.

    Donc voilà mon code, lorsque je l'exécute il ne m'affiche aucune erreur. Mais les pages n'ont pas été créé. Aurais-je oublié quelque chose ?
    Faut-il que j'indique mon login quelque part ?

    Merci, par avance, de votre aide...

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Bleh, c'est une question sur JAXB, XWiki et HttpClient.

    On n'arrivera à rien comme ça. Pour commencer on n'a pas besoin de JAXB, on ne va s'intéresser qu'à la communication avec XWiki : tu vas juste faire un fichier XML, un seul, et ce sera toujours le même. C'est ça que tu vas envoyer à XWiki, pour voir si ça marche. Du coup, pour l'instant, tu oublies tout ce qui consiste à générer du XML : tu as déjà un fichier XML et c'est ça que tu veux envoyer.

    Pour étudier la communication entre XWiki et HttpClient, je dirais :
    - qu'il faut nous montrer un peu la doc des APIs de XWiki que tu utilises, on est pas des devins.
    - qu'il faudrait vérifier les codes de retour des executeMethode(). Si tu as des erreurs 300, 400 ou 500 Java ne va pas le deviner, il faut que tu vérifies toi-même.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    J'ai déjà testé l'ajout d'une page depuis un fichier XML dans l'invite de commande grâce à une fonction CURL. J'utilisais un PUT.
    Cela fonctionnait sans aucun soucis.

    Voici l'API de XWiki

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Citation Envoyé par hoshizora Voir le message
    J'ai déjà testé l'ajout d'une page depuis un fichier XML dans l'invite de commande grâce à une fonction CURL. J'utilisais un PUT.
    Cela fonctionnait sans aucun soucis.
    Bien. Donc la comm' avec XWiki, ça va, tu gères.

    Fais pareil en Java au lieu de l'invite de commande. Comme ça tu géreras aussi l'utilisation de HttpClient.

    Après, si besoin est, on s'occupera de JAXB.

    Citation Envoyé par hoshizora Voir le message
    J'aurais pas été contre une description de ce que tu utilises là-dedans. À moins que seuls ceux formés aux APIs XWiki soient censés participer ?

    Edit : je constate que d'après cette doc, XWiki tient vraiment à ce que le content-type application/xml soit précisé quand tu y envoies un objet XML, ce qui est logique puisqu'il peut aussi accepter un formulaire html ou du texte brut.

    Pourtant tu ne précises pas le content-type de ce que tu envoies.
    Le mieux pour ça est de passer par PutMethod.setRequestEntity() avec un InputStreamEntity et le content-type indiqué "application/xml"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    J'aurais pas été contre une description de ce que tu utilises là-dedans. À moins que seuls ceux formés aux APIs XWiki soient censés participer ?
    Pardon, pardon... J'ai voulu publié mon message un peu trop vite en effet.
    Donc, ce que j'utilise dans l'API que je vous ai fournise précédemment se trouve dans l'espace "Sending representations". C'est là que j'ai trouvé la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ curl -u Admin:admin -X PUT --data-binary "@newpage.xml" -H "Content-Type: application/xml" http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/NewPage
    qui permet de créer une Page depuis un fichier XML (contenant les balises d'une Page). Voici une liste des balises existantes en fonction des types d'objet (si c'est une Page, un Tag, un Object, ...)

    Le problème c'est que ce que je désire créé n'est pas une Page mais un article de blog (et, dans XWiki, un article de blog est désigné par un Object qui utilise la classe Blog.BlogPostClass). Donc, pour arriver à l'URL REST qui pointe sur un article de blog, j'ai trouvé ceci (toujours dans l'API XWiki, section "Object ressources") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/objects/{className}/{objectNumber}
    Ce qui est entre { } doit être remplacé. Par exemple, dans mon cas, spaceName sera remplacé par "Blog" et className par "Blog.BlogPostClass".

    J'ai donc voulu modifié la commande CURL précédente afin de tester l'ajout d'un article de blog depuis un fichier XML. Le soucis, c'est que la page doit d'abord être créé pour qu'ensuite, le PUT modifie la page et y ajoute les informations de l'article qui sont dans le XML.

    Là est mon problème, cette page qui se doit d'être créé n'est pas un objet de type Page comme précédemment.. Je ne sais pas ce que c'est.
    C'est pas évident d'expliquer (et encore moins de comprendre, j'imagine).
    Mais n'hésitez surtout pas à me poser des questions

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Citation Envoyé par hoshizora Voir le message
    Là est mon problème, cette page qui se doit d'être créé n'est pas un objet de type Page comme précédemment.. Je ne sais pas ce que c'est.
    C'est pas évident d'expliquer (et encore moins de comprendre, j'imagine).
    Mais n'hésitez surtout pas à me poser des questions
    J'ai pas envie d'installer XWiki pour vérifier moi-même, mais :

    C'est du REST, après tout. Pour savoir à quoi ressemblent ces objets, est-ce qu'il ne serait pas plus simple de d'abord créer la page de blog en question avec la UI de XWiki, puis ensuite faire un GET sur l'URL REST de la page créée ?
    Après tu n'auras plus qu'à créer des objets XML exactement pareil, en changeant juste les parties variables, et faire un POST ou un PUT d'exactement ça, non ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Oui, merci. Je vais faire cela.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'une base SQLite depuis un fichier xml
    Par aruno14 dans le forum Android
    Réponses: 4
    Dernier message: 22/02/2015, 06h56
  2. Modifier le contenu d'une page web : modifier un fichier XML
    Par Linnya dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 06/02/2013, 09h33
  3. Réponses: 34
    Dernier message: 15/07/2008, 16h40
  4. copier le contenu d'une page web dans un fichier texte
    Par wassila dans le forum C++Builder
    Réponses: 30
    Dernier message: 28/08/2005, 23h27
  5. Réponses: 2
    Dernier message: 16/07/2004, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo