2011-01-03 10 views
0

http://java.net/jira/browse/JAXB-131を実行しているので、xjcのコマンドラインで-enableIntrospectionを提供するというコメントにある治療法を採用しようとしています。私はしかしxjcの-enableIntrospectionをjaxws-maven-pluginと組み合わせて使用​​する

、:

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>jaxws-maven-plugin</artifactId> 
      <version>1.12</version> 
      <executions> 
       <execution> 
        <id>allservice</id> 
        <goals> 
         <goal>wsimport</goal> 
        </goals> 
        <configuration> 
         <xjcArgs><xjcArg>-enableIntrospection</xjcArg></xjcArgs> 
         <extension>true</extension> 
         <wsdlDirectory>src/main/webapp/WEB-INF/wsdl</wsdlDirectory> 
         <bindingDirectory>src/main/resources/bindings</bindingDirectory> 
         <target>2.0</target> 
        </configuration> 
       </execution> 
      </executions> 
      <dependencies> 
       <dependency> 
        <groupId>javax.jws</groupId> 
        <artifactId>jsr181-api</artifactId> 
        <version>1.0</version> 
       </dependency> 
      </dependencies> 
     </plugin> 

は、Mavenのビルドがで失敗します。

[DEBUG] The binding Directory is C:\Source\workspace\TheProject\src\main\resources\bindings 
[DEBUG] jaxws:wsimport args: [-s, C:\Source\workspace\TheProject\target\jaxws\wsimport\java, -d, C:\Source\workspace\TheProject\target\classes, -target, 2.0, -extension, -Xnocompile, -B-enableIntrospection, -b, C:\Source\workspace\TheProject\src\main\resources\bindings\servicebindings.xml] 
[INFO] jaxws:wsimport args: [-s, C:\Source\workspace\TheProject\target\jaxws\wsimport\java, -d, C:\Source\workspace\TheProject\target\classes, -target, 2.0, -extension, -Xnocompile, -B-enableIntrospection, -b, C:\Source\workspace\TheProject\src\main\resources\bindings\servicebindings.xml, C:\Source\workspace\TheProject\src\main\webapp\WEB-INF\wsdl\CaseService.wsdl] 
no such JAXB option: -enableIntrospection 

はどのようにしてJAXWS-のmaven-pluginのでXJCの-enableIntrospectionを使用することができますか?できない場合はBooleanプロパティのゲッターがisFoo()(Java Beansの仕様に違反する)ではなくgetFoo()(正しい)と呼ばれるように、jaxwsのコード生成をカスタマイズするための代替手段が存在します。

答えて

1

jaxws-maven-pluginは、インストールされたJDKのxjcを使用しているようです。最新のOracle JDKには、-enableIntrospectionのサポートが追加される前のバージョンのXJCが含まれています。

次に、JAXB-Pluginを使用して調べました。 turnsout jaxws-maven-pluginは、JAXB-Pluginsをロードするために必要なXJCのクラスパスに簡単に追加する方法を提供していません。

jaxws-maven-pluginの置き換えは、政治的な理由から不可能でした(jaxwsが標準で標準ライブラリのみが使用される可能性があります)。私はそのため生成後のソースコードを読み取るMavenプラグインを書くに戻って下落している

は、

content.replace("public Boolean is", "public Boolean get"); 

を行い、ディスクにソースファイルを書き込みます。これにより、私が使用しているAPIのビジネスキーの命名規則に依存するequals()hashCode()の定義を挿入することもできました。

1

enableIntrospectionオプションとJavaで承認されたオーバーライドメカニズムを使用する代わりに、ブーリアンのゲッターをJAX-WS生成アーティファクトに追加します。

JAX-WS RI 2.1.13のみがenableIntrospectionオプションをサポートしています。しかしJavaSE6 1.6.0_65はJAVA-WS RI 2.1.6に同梱されています。これを修正する1つの方法は、Javaの承認されたオーバーライドメカニズムを使用して、jaxws-api.jarおよびjaxb-api.jarをJRE/JDKが承認したディレクトリにコピーすることです。

もう1つの方法は、enableIntrospectionオプションを使用することではなく、ブーリアンのゲッターをJAX-WSで生成された成果物に追加することです。これらのゲッターは、R​​eplacer Mavenプラグインで追加することができます。

<plugin> 
    <groupId>com.google.code.maven-replacer-plugin</groupId> 
    <artifactId>replacer</artifactId> 
    <version>1.5.2</version> 
    <executions> 
     <execution> 
      <phase>process-resources</phase> 
      <goals> 
       <goal>replace</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <basedir>${project.basedir}</basedir> 
     <includes> 
      <include>src/main/java/lu/etat/cie/rn/rpp/ws/**/*.java</include> 
     </includes> 
     <token>public Boolean is(.*)\(\)(\s*\{\s*.+\s*\})</token> 
     <value>public Boolean is$1\(\)$2 
    public Boolean get$1\(\)$2</value> 
    </configuration> 
</plugin> 

置き換えます:

public Boolean isProperty() { 
    return property; 
} 

付:

public Boolean isProperty() { 
    return property; 
} 
public Boolean getProperty() { 
    return property; 
} 

Mavenの代替プラグインは、getメソッドを追加します