JAXB外部カスタムバインディングXJCの問題 - 解析結果空のノード

StackOverflow https://stackoverflow.com/questions/4785454

  •  24-10-2019
  •  | 
  •  

質問

これが重複している場合は許してください。これが私のbinding.xjbファイルです。しかし、今では、複雑なタイプのターゲット「AddBankVaultrplyType」が見つからないという通常のエラーが発生しています。問題はありません。誰かがこれで私を助けることができますか?カスタマイズしようとしているXSDをリストしています

<jxb:bindings 
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:pd="http://chubb.com/cpi/polsvc/xmlobj"
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
jxb:extensionBindingPrefixes="inheritance"
jxb:version="2.1"
>


<jxb:bindings node="/xs:schema/xs:ServiceReply/xs:complexType[@name='AddBankVaultRplyType']">
<inheritance:extends>com.print.poc.AddressTypeHelper</inheritance:extends>
</jxb:bindings>

これが私がカスタマイズしようとしているXSDの一部です

<xs:schema xmlns:pd="http://com/polsvc/xmlobj" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://com/polsvc/xmlobj" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="AddBankVaultRplyType">

</xs:complexType>
<xs:element name="ServiceReply">
   <xs:complexType>
   <xs:sequence>
    <xs:element name="ReplyHeader" type="pd:MsgHeaderType"/>
    <xs:element name="RequestHeader" type="pd:MsgHeaderType"/>
    <xs:choice>
     <xs:element name="AddBankVaultReply" type="pd:AddBankVaultRplyType"/>
</xs:choice>
 </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>

今、私がXJCを実行した場合、それは私にターゲットだと言っています "/xs:schema/xs:ServiceReply/xs:complexType[@name='AddBankVaultRplyType']" 空のノードになります。私がここでしている間違いは何ですか

役に立ちましたか?

解決

スキーマの位置が設定されているバインディングでラップする必要があります。それは次のようなものでなければなりません:

<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:pd="http://chubb.com/cpi/polsvc/xmlobj"
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
    jxb:extensionBindingPrefixes="inheritance"
    version="2.1">
    <jxb:bindings schemaLocation="your-schema.xsd">
        <jxb:bindings node="//xs:complexType[@name='AddBankVaultRplyType']">
            <inheritance:extends>com.print.poc.AddressTypeHelper</inheritance:extends>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

詳細については:

他のヒント

私はついにサブクラスで私の職場を取得し、ルート要素で使用されているdang complexTypesに@xmlrootelementを追加しました(Jaxbが私に追加しない理由がわかりませんが、これはJaxb以来それを行うトリックを行いますしない)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
  xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:annox="http://annox.dev.java.net"
  xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd
                    http://annox.dev.java.net "
  jaxb:extensionBindingPrefixes="xjc annox"
  version="2.1">

  <jaxb:globalBindings>
    <jaxb:serializable uid="1"/>
    <!-- All generated classes must have MySignature interface (supplied in dependencies) -->
    <xjc:superClass name="com.cigna.framework.DataObject"/>
    <xjc:superInterface name="com.cigna.framework.InterfaceTest"/>
    <!-- All temporal fields are implemented as Joda DateTime and use DateUtils as an adapter -->
    <jaxb:javaType
      name="org.joda.time.DateTime"
      xmlType="xs:time"
      parseMethod="com.cigna.framework.util.DateUtil.stringToDateTime"
      printMethod="com.cigna.framework.util.DateUtil.dateTimeToString"
      />
  </jaxb:globalBindings>



  <!-- Application of annotations to selected classes within schemas -->

  <!-- org.example.SomeRootType @XmlRootElement -->
  <jaxb:bindings schemaLocation="../schemas/externalaction_2012_03.xsd" node="/xs:schema">
    <jaxb:schemaBindings >
        <jaxb:package name="com.framework.action"></jaxb:package>
    </jaxb:schemaBindings>

  </jaxb:bindings>

  <jaxb:bindings schemaLocation="../schemas/common_2012_04.xsd" node="/xs:schema">
    <jaxb:schemaBindings >
        <jaxb:package name="com.framework.common"></jaxb:package>
    </jaxb:schemaBindings>

    <jaxb:bindings node="xs:complexType[@name='PersonNameType']">
      <annox:annotate>
        <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="SomeRootType"/>
      </annox:annotate>
    </jaxb:bindings>
  </jaxb:bindings>

  <jaxb:bindings schemaLocation="../schemas/utilities_2012_03.xsd" node="/xs:schema">
    <jaxb:schemaBindings >
        <jaxb:package name="com.framework.util"></jaxb:package>
    </jaxb:schemaBindings>

  </jaxb:bindings>  

</jaxb:bindings>

もちろん、私はpom.xmlに苦労しましたが、ついに私のために働いたこの解決策に来ました。

        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.8.1</version>
            <executions>
                <execution>
                    <id>process-xsd</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <phase>generate-sources</phase>
                    <configuration>
                        <schemaIncludes>
                            <include>schemas/*.xsd</include>
                        </schemaIncludes>
                        <bindingIncludes>
                            <include>schemas/*.xjb.xml</include>
                        </bindingIncludes>
                        <generateDirectory>${project.build.directory}/generated-sources</generateDirectory>
                        <extension>true</extension>
                        <args>
                            <arg>-Xannotate</arg>
                        </args>
                        <plugins>
                            <plugin>
                                <groupId>org.jvnet.jaxb2_commons</groupId>
                                <artifactId>jaxb2-basics-annotate</artifactId>
                                <version>0.6.3</version>
                            </plugin>
                            <plugin>
                                <groupId>org.jvnet.jaxb2_commons</groupId>
                                <artifactId>jaxb2-basics</artifactId>
                                <version>0.6.3</version>
                            </plugin>                               
                        </plugins>
                    </configuration>
                </execution>
            </executions>
        </plugin>           

後で、ディーン

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top