2010-03-29 2 views
0

De la documentation, il est clair que je dois utiliser les éléments suivants pour obtenir d'un simple unmarshalling de se produire à partir de mon fichier XML/schéma:erreur inattendue JAXB

JAXBContext jc = JAXBContext.newInstance("PackageName"); 

où PackageName est mon nom de package. Je l'ai regardé sur google pour un peu vain, pour savoir pourquoi je puis obtenir cette erreur d'exécution:

Line:Col[2:142]:cvc-elt.1: Cannot find the declaration of element 'myconfig'. 
Line:Col[2:142]:unexpected element (uri:"http://www.w3.org", local:"myconfig"). Expected elements are <{}myconfig> 
Caught UnmarshalException 

EDIT: Note: le plugin m'a forcé de spécifier un nom de package. Je lui ai donné le même paquet que tous les fichiers de mes classes d'application car je voulais que toutes les classes JAXB et mon application soient ensemble. Si mon package est PackageName, il a ensuite créé tous les fichiers de classe JAXB dans PackageName.PackageName. J'ai ensuite dû les déplacer sur PackageName.PackageName (qu'il a créé automatiquement) dans l'arborescence où mon application est (PackageName). Cela ne me semble pas juste. EDIT FIN

Ce qui suit se produit au-dessus de tous mes fichiers de classe, y compris ceux que le plugin XJC JAXB pour eclipse créé pour moi:

package PackageName; 

alors pourquoi est cette erreur qui se produisent?

EDIT: Le schéma est assez grand, donc je ne veux pas coller tout ici, et le fichier ObjectFactory.java est par conséquent assez grand. Il commence

package PackageName; 

import javax.xml.bind.JAXBElement; 
import javax.xml.bind.annotation.XmlElementDecl; 
import javax.xml.bind.annotation.XmlRegistry; 
import javax.xml.namespace.QName; 

et se termine

/** 
* Create an instance of {@link JAXBElement }{@code <}{@link MyConfigType }{@code >}} 
* 
*/ 
@XmlElementDecl(namespace = "", name = "myconfig") 
public JAXBElement<MyConfigType> createMyconfig(MyConfigType value) { 
    return new JAXBElement<MyConfigType>(_Myconfig_QNAME, MyConfigType.class, null, value); 
} 

Donc tout à fait standard. Le haut du schéma (je suis un schéma XML newb et cela m'a été fourni à), est:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified"> 

qui semble aussi simple. Le schéma de l'élément racine est la suivante:

<xs:complexType name="MyConfigType"> 
    <xs:sequence> 
     <xs:element name="tips" type="TipType" minOccurs="0" 
      maxOccurs="unbounded"> 
      <xs:key name="unique_abc_id"> 
       <xs:selector xpath="./abc" /> 
       <xs:field xpath="@id" /> 
      </xs:key> 
      <xs:key name="unique_def_id"> 
       <xs:selector xpath="./def" /> 
       <xs:field xpath="@id" /> 
      </xs:key> 
     </xs:element> 
    </xs:sequence> 
    <xs:attribute ref="noNamespaceschemaLocation" /> 
</xs:complexType> 

La configuration fournie que je vais lui demander de valider en même temps que commence désorganiser:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<myconfig xmlns="http://www.w3.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceschemaLocation="myconfig.xsd"> 
    <firsttag...> 

Je suis perplexe.

EDIT FIN

Répondre

1

Pour que cela fonctionne:

JAXBContext jc = JAXBContext.newInstance("PackageName"); 

Vous devez avoir un ou les deux de ces derniers:

  • un ObjectFactory.class dans ce répertoire
  • un fichier jaxb.index. Ce fichier devrait contenir une liste de noms de classes dans ce paquet.

L'une ou l'autre de ces descriptions décrirait les classes qui devraient être disponibles pour JAXB.

+0

Ah. Désolé d'avoir oublié de mentionner que j'avais déjà créé xjc le fichier objectfactory.java - c'est dans les fichiers de référence du schéma. Où vais-je ensuite? – volvox

+0

@ Mark Lewis J'ai besoin de plus d'informations sur les classes elle-même. Il regarde un problème de validation de schéma mais sans voir la classe je ne sais pas si je peux te dire beaucoup. –

+0

merci pour la réponse, j'ai édité un code de problème dans ma question pour le peaufiner un peu. Peut-être que cela illustrera mon problème plus en profondeur. Merci IA – volvox

Questions connexes