XSD ファイルからクラスを生成するために JAXB を使用しています。生成されるクラスに共通のインターフェースを実装させたいと考えています。そのため、これを行うために、外部バインディング ファイルアプローチを使用して JAXB2 Basics プラグインを試しています。これは私のカスタム バインディング ファイルです。
customBindingFile.xjb
<?xml version="1.0"?>
<jxb:bindings version="1.0"
xmlns:jxb="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:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
jxb:extensionBindingPrefixes="xjc">
<jxb:bindings schemaLocation="abc-api.xsd">
<jxb:bindings node="//xs:complexType[@name='MyClass']">
<inheritance:implements>com.kuldeep.CommonInterface</inheritance:implements>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
以下は、ソース生成用の pom ファイル内の私の maven プラグインです。私が追加したコメントは、この既存のプラグイン エントリに加えた変更です。
pom.xml
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.plugin.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<!-- **extensions and args added by me** -->
<extensions>
<extension>org.jvnet.jaxb2_commons:jaxb2-basics:0.9.2</extension>
</extensions>
<args>
<arg>-Xinheritance</arg>
</args>
<sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
<defaultOptions>
<bindingFiles>
<bindingFile>src/main/resources/jaxws_binding.xml</bindingFile>
<bindingFile>src/main/resources/jaxb_binding.xml</bindingFile>
</bindingFiles>
</defaultOptions>
<wsdlOptions>
......
<wsdlOption>
<wsdl>${project.build.directory}/generated/framework/cxf/abc-api-inline.wsdl</wsdl>
<!-- **bindingFile added by me** -->
<bindingFile>src/main/resources/customBindingFile.xjb</bindingFile>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<!-- **dependency added by me** -->
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.9.2</version>
</dependency>
</dependencies>
</plugin>
私が抱えている問題は、スキーマ ファイルabc-api.xsdが他のプロジェクトに存在することです。そのため、クラスを生成するために maven インストールを実行しようとすると、abc-api.xsd がこのコンパイルの一部ではないというエラーが表示されます。
[エラー] プロジェクトでゴール org.apache.cxf:cxf-codegen-plugin:3.0.3:wsdl2java (generate-sources) を実行できませんでした: ゴール org.apache.cxf:cxf-codegen-plugin の generate-sources を実行します: 3.0.3:wsdl2java が失敗しました: ファイル:/I:/project/src/main/resources/customBindingFile.xjb [9,56]: "file:/I:/project/src/main/resources/abc-api.xsd " は、このコンパイルの一部ではありません。「file:/I:/project/src/main/resources/jaxb_binding.xml」の間違いでしょうか?→【ヘルプ1】
また、 customBindingFile.xjbから schemaLocation 属性を削除すると、機能せず、エラーが発生します。
"//xs:complexType[@name='MyClass']" の XPath 評価により、空のターゲット ノードが生成される
したがって、私の質問は、customBindingFile.xjbで特定のスキーマ ファイル名/場所を提供することを避け、クラスの生成に使用している xsd に適用する方法です。