2016-06-28 1 views
1

J'essaie de générer une source Java à partir de XSD et de désactiver le style wrapper avec JAXWS. J'ai écrit la liaison personnalisée, mais il semble que JAXWS ne fonctionne pas avec XJC. La liaison que j'utilise est assez simple.Utilisez JAXWS enableWrapperStyle lors de la génération de source Java avec XJC

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns="http://java.sun.com/xml/ns/jaxws" 
version="2.1" jaxb:extensionBindingPrefixes="xjc"> 

<jaxb:bindings> 
    <jaxb:globalBindings typesafeEnumMaxMembers="2000" generateElementProperty="false" > 
     <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle> 
    </jaxb:globalBindings> 
</jaxb:bindings> 

Si je suis en train d'exécuter le script ant que je reçois des messages d'erreur suivants.

[xjc] [ERROR] Unsupported binding namespace "http://java.sun.com/xml/ns/jaxws". Perhaps you meant "http://java.sun.com/xml/ns/jaxb/xjc"? 
    [xjc] line 2 of file:/D:/xxxxxxxxxx/xxxxx/xxxx.xsd 
    [xjc] [ERROR] cvc-complex-type.2.4.a: Invalid content was found starting with element 'jaxws:enableWrapperStyle'. One of '{"http://java.sun.com/xml/ns/jaxb":javaType, "http://java.sun.com/xml/ns/jaxb":serializable, "http://java.sun.com/xml/ns/jaxb/xjc":serializable, "http://java.sun.com/xml/ns/jaxb/xjc":superClass, "http://java.sun.com/xml/ns/jaxb/xjc":superInterface, "http://java.sun.com/xml/ns/jaxb/xjc":typeSubstitution, "http://java.sun.com/xml/ns/jaxb/xjc":smartWildcardDefaultBinding, "http://java.sun.com/xml/ns/jaxb/xjc":simple, "http://java.sun.com/xml/ns/jaxb/xjc":treatRestrictionLikeNewType, "http://java.sun.com/xml/ns/jaxb/xjc":javaType, "http://java.sun.com/xml/ns/jaxb/xjc":generateElementProperty, "http://java.sun.com/xml/ns/jaxb/xjc":noMarshaller, "http://java.sun.com/xml/ns/jaxb/xjc":noUnmarshaller, "http://java.sun.com/xml/ns/jaxb/xjc":noValidator, "http://java.sun.com/xml/ns/jaxb/xjc":noValidatingUnmarshaller}' is expected. 
    [xjc] line 8 of file:/D:/xxxxxxxxxx/xxxxx/xxxx/xsd/xsd-binding.xml 

Je l'ai déjà tryed à utiliser seulement JAXWS, mais XJC extpects JAXB comme principale liaison. Avec cette liaison:

<bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://java.sun.com/xml/ns/jaxws" 
    jaxb:version="2.1" extensionBindingPrefixes="xjc annox"> 
    <enableWrapperStyle>false</enableWrapperStyle> 
    <jaxb:bindings> 
     <jaxb:globalBindings typesafeEnumMaxMembers="2000" generateElementProperty="false" /> 
    </jaxb:bindings> 
</bindings> 

Je reçois l'erreur:

[xjc] [ERROR] not an external binding file. The root element must be {http://java.sun.com/xml/ns/jaxb}bindings but it is {http://java.sun.com/xml/ns/jaxws}bindings 
     [xjc] line ? of file:/D:/xxxxxx/xsd-binding.xml 
     [xjc] [ERROR] Unexpected <bindings> appears at line 4 column 61 
     [xjc] line 4 of file:/D:/xxxxxx/xsd-binding.xml 

Est-il possible d'utiliser le jaxws:enableWrapperStyle intérieur de JAXB? Si oui, qu'est-ce que j'ai oublié? Merci d'avance!

Répondre

2

J'ai trouvé la solution. L'élément JAXWS doit se trouver à l'intérieur de l'élément JAXB et doit être déclaré comme suit:

<?xml version="1.0"?> 
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.1" jaxb:extensionBindingPrefixes="xjc annox"> 
    <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"> 
     <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle> 
    </jaxws:bindings> 
    <jaxb:bindings> 
     <jaxb:globalBindings typesafeEnumMaxMembers="2000" generateElementProperty="false"/> 
    </jaxb:bindings> 
</jaxb:bindings> 
0

Vous avez l'espace de noms JAXWS ajouté deux fois dans l'exemple ci-dessus

xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
    xmlns="http://java.sun.com/xml/ns/jaxws" 

Retirez le second:

xmlns="http://java.sun.com/xml/ns/jaxws" <--REMOVE THIS 
+0

Malheureusement, je reçois toujours la même erreur. – D051P0