2011-01-31 2 views
3

J'ai des problèmes avec l'analyse de la réponse XML obtenu du service à http://wiki.dbpedia.org/Lookupquelques problèmes d'analyse syntaxique xml de webservice avec JAXB

Mon code pour le principal est celui up here, toghether avec des haricots annotés qui construisent le xml.

Je voudrais 'déboguer' ce qui se passe dans le JAXBContext, de sorte que je puisse voir ce que j'ai foiré dans les haricots annotés. La seule chose que je trouve qu'il est possible est d'enregistrer un EventHandler comme celui-ci:

unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler()); 

qui imprime des erreurs comme celles-ci:

uri http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?QueryString=galway&MaxHits=5 
DefaultValidationEventHandler: [ERROR]: unexpected element (uri:"http://lookup.dbpedia.org/", local:"Result"). Expected elements are <{}Result> 
    Location: line 3 

Il semble qu'il y ait un élément inattendu résultat, mais je ne peux pas réussir à le réparer. Quelqu'un peut-il me guider dans la compréhension des erreurs JAXB plus en profondeur? Je ne peux vraiment pas comprendre ce que les erreurs signifient vraiment (comme j'ai déjà mis en place namespace = "http://wiki.dbpedia.org/Lookup" dans la classe ArrayOfResult).

Répondre

2

Vous avez les informations d'espace de noms spécifié sur ArrayOfResult mais pas sur le résultat:

package it.cybion.dbpedia.textsearch.rest.response; 

import java.net.URI; 
import java.util.List; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlElementWrapper; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement(name = "Result", namespace="http://lookup.dbpedia.org/") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Result { 
} 
+0

C'est ce que je pensais. La syntaxe {} Result est confuse, mais si vous savez que le {} doit contenir l'espace de noms (ce qui est techniquement le cas maintenant bien sûr), l'erreur devient plus claire. J'espère. – extraneon

+1

Si cela répond à votre question, veuillez la considérer comme la réponse acceptée. Pour plus d'informations sur JAXB et les espaces de noms, vous pouvez vous référer à: http://bdoughan.blogspot.com/2010/08/jaxb-namespaces.html –

+0

merci, ce n'était absolument pas anodin pour moi! maintenant je dois juste comprendre comment organiser des annotations de niveau de paquet pour nettoyer le code de mes classes! – mox601