2016-07-20 6 views
1

xjcという奇妙な問題に直面していて、Javaプロパティの要素をマップしようとしています。私はTest2のgetterとsetter for test3を持っていたいと思います。そのようXJC - [ERROR]コンパイラがこのプロパティのカスタマイズを尊重することができませんでした

私のセットアップ私のバインディングを:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<jaxb:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    version="2.1"> 
    <jaxb:globalBindings localScoping="toplevel" underscoreBinding="asCharInWord"> 
    </jaxb:globalBindings> 
    <jaxb:bindings schemaLocation="test.xsd"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="test.detail" /> 
     </jaxb:schemaBindings> 
     <jaxb:bindings node="//xsd:element[@name='TEST']"> 
      <jaxb:class name="Test"></jaxb:class> 
     </jaxb:bindings> 
     <jaxb:bindings node="//xsd:element[@name='TEST1']"> 
      <jaxb:class name="Test1" /> 
     </jaxb:bindings> 
     <jaxb:bindings node="//xsd:element[@name='TEST2']"> 
      <jaxb:class name="Test2Impl" /> 
     </jaxb:bindings> 
     <jaxb:bindings node="//xsd:element[@name='TEST3']"> 
      <jaxb:property name="test3" /> 
     </jaxb:bindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

そして、私のXSDはこの1つのようになります。

parsing a schema... 
[WARNING] EmptyTargetNamespace: In schema document 'jaxb-generate-test/test.xsd', 
the value of the 'targetNamespace' attribute cannot be an empty string. 
    line 3 of jaxb-generate-test/test.xsd 

[ERROR] compiler was unable to honor this property customization. 
It is attached to a wrong place, or its inconsistent with other bindings. 
    line 20 of jaxb-generate-test/binding.xjb 

[ERROR] (the above customization is attached to the following location in the schema) 
    line 10 of jaxb-generate-test/test.xsd 

Failed to parse a schema. 
:私は xjc -b binding.xjb -d out test.xsdイム取得して生成しようとしているとき

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema targetNamespace="" elementFormDefault="qualified" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"> 
    <xsd:element name="TEST1"> 
     <xsd:complexType mixed="true"> 
      <xsd:sequence> 
       <xsd:element name="TEST2" maxOccurs="unbounded"> 
        <xsd:complexType mixed="true"> 
         <xsd:sequence> 
          <xsd:element name="TEST3" minOccurs="0" type="xsd:string" /> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
    <xsd:element name="TEST"> 
     <xsd:complexType mixed="true"> 
      <xsd:sequence> 
       <xsd:element ref="TEST1" minOccurs="0" /> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

あなたがテストできるgithub projectを作成しました。

答えて

1

まず、定義がtargetNamespaceに関連付けられ、要素refが正しいようにXSDを修正する必要があります。

試してみてください。

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema targetNamespace="http://myns" elementFormDefault="qualified" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:tns="http://myns"> 
    <xsd:element name="TEST1"> 
     <xsd:complexType mixed="true"> 
      <xsd:sequence> 
       <xsd:element name="TEST2" maxOccurs="unbounded"> 
        <xsd:complexType mixed="true"> 
         <xsd:sequence> 
          <xsd:element name="TEST3" minOccurs="0" type="xsd:string" /> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
    <xsd:element name="TEST"> 
     <xsd:complexType mixed="true"> 
      <xsd:sequence> 
       <xsd:element ref="tns:TEST1" minOccurs="0" /> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

しかし、その後、あなたはまだ混在したコンテンツの残りの部分の間で「TEST3」ゲッターとTEST3の子要素を取り出す方法の難しい問題を抱えています。 JAXBはそれらをすべて単一のListにマップします。

thisのような他の投稿を見ると、JAXB2 Simplify pluginのように見えます。

(誰かがさらに詳細な回答を書いた方がいいかもしれませんが、これはおそらく私が現状で投稿しているほど役に立ちます)。

+0

@ scott-kurzありがとう、あなたの提案は私の問題を解決した、私は[github](https://github.com/Cavva79/jaxb-generate-test/tree/v1.0.0 "jaxb-generate-テストタグv1.0.0 ") – Cavva79

関連する問題