10

私はCXFを初めて使用し、WSDLからクライアントを作成しようとしています。私は過去にMetroとAxisを使用しました。apache-cxf-2.3.3をダウンロードし、wsdl2javaを使用してクライアントスタブを生成しました。私はMavenを使用し、これを使用してpomを設定します。

<properties>
    <cxf.version>2.3.3</cxf.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-ws-security</artifactId>
        <version>${cxf.version}</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <inherited>true</inherited>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
                <optimize>true</optimize>
                <debug>true</debug>
            </configuration>
        </plugin>
    </plugins>
</build>

プロジェクトをビルドすると、次のエラーが発生します。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project client-cxf: Compilation failure: Compilation failure:
[ERROR] \Devel\Projects\Client-CXF\src\main\java\my\webservice\ServiceRuntimeException.java:[38,149] cannot find symbol
[ERROR] symbol  : method required()

[ERROR] \Devel\Projects\Client-CXF\src\main\java\my\snmpv2\MyService.java:[76,8] cannot find symbol
[ERROR] symbol  : constructor Service(java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[])
[ERROR] location: class javax.xml.ws.Service

問題は、生成されたコードがJava 6機能(XmlElementRefの「require」要素、Serviceの新しいコンストラクター)を使用しているという事実に関連しているようですが、CXFMavenの依存関係はJava5用です。

生成されたコードがJava5に準拠するように指定する方法はありますか?

4

2 に答える 2

25

実際、CXFのwsdl2javaコマンドラインツールがJava 5と互換性があるコードは、Java 6と互換性がない可能性があります。その理由は、JAX-WS2.2およびJAXB2.2に準拠したコードを生成するためです。ただし、Java6に含まれているAPIのバージョンは2.1のみです。

いくつかのオプションがあります:

1)最も簡単なのは、wsdl2javaコマンドに「-fejaxws21」を追加して、2.2ではなくjaxws2.1準拠のコードを生成することです。

2)JDKの承認されたディレクトリに2.2apijarを追加します

3)2.2jarを「承認」するようにmavenでコンパイラプラグインを構成します

于 2011-04-13T22:04:42.040 に答える
0

wsdl2javaのドキュメントには、Javaのバージョンを指定するためのオプションについては記載されていません。

Maven cxf-codegen-pluginを使用して、クライアントスタブを生成してみてください。クライアントスタブは、Mavenコンパイラのソースバージョンとターゲットバージョンを尊重する必要があります。

それが機能しない場合は、次のように、pomのソース行とターゲット行を変更することでJava6を使用するようにMavenを構成できます。

               <source>1.6</source>
               <target>1.6</target>
于 2011-04-13T20:09:53.427 に答える