JAXB を使用して、いくつかの xsd ファイルに基づいて Java クラスを生成しようとしています。自分では解決できない問題にぶつかります。xsd ファイルを変更できないことを強調したいだけです。だから、これは私が持っている問題です: MultiDestScheduleRQ と MultiDestScheduleRS の 2 つの xsd ファイルがあり、どちらも同様の構造を持っています:
<xs:attributeGroup name="ResponseGroup">
<xs:annotation>
<xs:documentation source="Description" xml:lang="en">BLA</xs:documentation>
</xs:annotation>
<xs:attribute name="MoreIndicator" type="xs:boolean" use="optional">
<xs:annotation>
<xs:documentation source="Description" xml:lang="en">BLA BLA</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MoreDataEchoToken" type="StringLength1to128" use="optional">
<xs:annotation>
<xs:documentation source="Description" xml:lang="en">BLA BLA BLA.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:attributeGroup>
<xs:element name="MultiDestScheduleRQ">
<xs:complexType>
<xs:complexContent>
<xs:extension base="QueryType">
<xs:sequence>
<xs:element name="Journeys">
<xs:complexType>
<xs:sequence>
<xs:element name="Journey" maxOccurs="12">
<xs:complexType>
<xs:attribute name="RPH" type="Type" use="required">
<xs:annotation>
<xs:documentation>BLA</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attributeGroup ref="ResponseGroup"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
MultiDestScheduleRS の唯一の違いは、要素の名前です。Java クラスを生成しようとすると、エラーが発生します。
org.xml.sax.SAXParseException: 'ResponseGroup' is already defined
カスタムバインディングで修正しようとしました:
<jxb:bindings schemaLocation="./../Validated/MultiDestScheduleRQ.xsd" >
<jxb:bindings node="//xs:attributeGroup[@name='ResponseGroup']//xs:attributeGroup">
<jxb:property name="ResponseGroupRQ"/>
</jxb:bindings>
</jxb:bindings>
しかし、それはエラーメッセージを変更しただけです
com.sun.istack.SAXParseException2: XPath evaluation of "//xs:attributeGroup[@name='ResponseGroup']//xs:attributeGroup" results in empty target node
私も試しました
<jxb:bindings schemaLocation="./../Validated/MultiDestScheduleRQ.xsd" >
<jxb:bindings node="//xs:attributeGroup[@name='ResponseGroup']">
<jxb:property name="ResponseGroupRQ"/>
</jxb:bindings>
</jxb:bindings>
最初のエラーが再び発生するだけです (「ResponseGroup」が既に定義されているというエラー)。
誰でも助けてもらえますか?
更新 Mavenプラグインを使用してクラスを生成します。これはpomのフラグメントです
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.7.4</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<verbose>true</verbose>
<schemaDirectory>./src/main/xsd</schemaDirectory>
<schemaIncludes>
<include>**/*/*.xsd</include>
</schemaIncludes>
<bindingDirectory>./src/main/xsd/541_Grammar_Multidest/xjb</bindingDirectory>
<bindingIncludes>
<include>binding.xml</include>
</bindingIncludes>
<generatePackage>com.my.package</generatePackage>
<extension>true</extension>
<staleFile>${project.build.directory}/jaxb2/.schema2XjcStaleFlag</staleFile>
</configuration>
</plugin>