2016-06-28 37 views
1

XSDからJavaソースを生成しようとしていて、JAXWSでラッパースタイルを無効にする必要があります。カスタムバインディングを作成しましたが、JAXWSはXJCで動作しないようです。私が使用しているバインディングはかなりシンプルです。 XJCを使用してJavaソースを生成するときにJAXWS enableWrapperStyleを使用します。

<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> 

は、私は次のエラーメッセージを取得していますAntスクリプトを実行しようとしている場合。

[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 

私はすでにjaxwsのみを使用しようとしていますが、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="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> 

私はエラーを取得しています:

[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 

は、JAXBのjaxws:enableWrapperStyle内部を使用することが可能ですか?はいの場合、私は何を見落としましたか?前もって感謝します!

答えて

2

私は解決策を見つけました。 JAXWS要素はJAXB要素の内部になければならず、次のように宣言する必要があります。

<?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

あなたはJAXWS名前空間は

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

が第二1つを削除し、上記の例では二回追加しました:

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

残念ながら私はまだ同じエラーが発生しています。 – D051P0

関連する問題