2017-08-11 1 views
1

J'ai un schéma xsd example.xsd sur lequel j'ai créé des classes pojo (essayé auto par Jaxb IntellIj Idea, ou manuellement).Jaxb2Marshaller ne peut pas sérialiser POJO par schéma xsd: "ne peut pas trouver la déclaration de l'élément"

J'ai l'intention de sérialiser pojo pour mon service de jms de ressort et valider un contre xsd avant l'envoi.

//init marshaller 
Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); 
.... 
marshaller.setSchema(new ClassPathResource("/example.xsd")); 
marshaller.afterPropertiesSet(); 


//trying to serialize 
MyResponse res = new MyResponse(); 
Jaxb2Marshaller jaxb2Marshaller = jaxb2MarshallerGenerated(); 
OutputStream outputStream = new ByteArrayOutputStream(); 
jaxb2Marshaller.marshal(res, new StreamResult(outputStream)); 

Mon xsd ressemble

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
attributeFormDefault="unqualified" elementFormDefault="qualified" 
targetNamespace="http://example/schemas"> 
<xs:element xmlns:sch="http://example/schemas" name="myResponse" type="sch:myResponseType"/> 
<xs:complexType name="myResponseType"> 
<xs:sequence> 
    .... 
</xs:sequence> 
.... 

Mes classes POJO ressemble:

@XmlRootElement 
public class MyResponse { 
//some jaxb stuff 
} 

Je ne peux pas échapper exception:

ne peut pas trouver la déclaration de l'élément « myResponse

J'ai essayé sans espace de noms et d'autres moyens.

Répondre

0

Le problème était que mon POJO sérialisé en xml n'a pas d'espace de nom à l'élément racine.

XSD -> créer des classes java à l'idée fixe

+0

Pourriez-vous expliquer ce que vous voulez dire? Quelque chose doit être ajouté aux classes générées? J'ai le même problème, mais je n'utilise pas IntelliJ. – Line

+1

@line oui, les classes générées doit contenir namespace: ..XmlType (name = "UnNom", namespace = "yourNameSpace") et chaque élément devrait contenir un: ..XmlElement (name = "someName2", namespace = "yourNameSpace") .. –

+0

OK. Merci, mais je voudrais préciser les noms plutôt au niveau de l'emballage. Et encore une chose, vous devriez accepter votre propre réponse;) https://stackoverflow.com/help/self-answer – Line