I'm trying to generate Java source from XSD and have to disable wrapper style with JAXWS. I've written the custom binding but it seems that JAXWS doesn't work with XJC. The binding I use is pretty simple.
<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>
If I'm trying to run the ant script I'm getting following error messages.
[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
I have already tryed to use only jaxws, but XJC extpects JAXB as main binding. With this binding:
<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>
I'm getting the error:
[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
Is it possible to use the jaxws:enableWrapperStyle
inside of jaxb? If yes, what have I overlooked? Thank you in advance!
I've found the solution. JAXWS-element has to be inside of JAXB-element and has to be declared as follows:
You have the jaxws namespace added twice in the above example
Remove the second one: