6

以下のコマンドを実行して、cxf(バージョン2.2.3、2.2.6、および2.7.0)を使用してwsdlからスタブとクライアントを生成しようとしました。

> wsdl2java.bat -p com.easynet.eordering.client -client  http://expediter.staging.gis.easynet.com:7001/cds/services/eordering?wsdl

しかし、私は次のようなエラーが発生しています

WSDLToJavaエラー:一意でないボディパーツ!港では、ディスパッチを成功させるために、オペレーションはネットワーク上に固有のオペレーションサインを持っている必要があります。ポート{http://eordering.uk.easynet.net}eorderingPortSOAPで、操作"{http://eordering.uk.easynet.net}getAMList"および"{http://eordering.uk.easynet.net}getDCList "同じリクエスト本文ブロックを持っている{http://eordering.uk.easynet.net}userListRequest

このエラーがスローされた理由を知っています。私のwsdl操作では次のように記述されています。

<operation name="getDCList"><input message="tns:userListRequest"/><output message="tns:userListResponse"/></operation>
<operation name="getAMList"><input message="tns:userListRequest"/><output message="tns:userListResponse"/></operation>

両方の操作でuserListRequestパラメーターを再利用していましたが、両方の操作で同じパラメーター(userListRequest)が指定されているため、エラーがスローされたと思います。

wsdlに変更を加えずにこのエラーを回避する方法はありますか?(私が知っているように、操作のオーバーロードはwsdl 1.2からは許可されていませんが、入力パラメーターはオーバーロードしていますか?)。

4

4 に答える 4

11

このようなWSDLは、WSI-BasicProfileに準拠していません。見る:

http://www.ws-i.org/profiles/basicprofile-1.1.html#Operation_Signatures

プロファイルは、soap:Bodyに表示される要素の名前として操作シグネチャを定義します。したがって、2つの操作が同じ子要素(またはあなたの場合はメッセージ)を使用する場合、それらは一意ではなく、違反していると見なされます。

R2710 The operations in a wsdl:binding in a DESCRIPTION MUST result in operation signatures that are different from one another.
于 2012-10-23T15:48:05.190 に答える
11

質問で述べたように:

wsdlに変更を加えずにこのエラーを回避する方法はありますか?

WSDLを修正できない場合は、その検証を無効にすることができます。

-validate = none

または、Mavenを使用している場合:

<configuration>
    <wsdlOptions>
        <wsdlOption>
            <wsdl>${basedir}/src/main/wsdl/my.wsdl</wsdl>
            <validate>none</validate>
        </wsdlOption>
    </wsdlOptions>
</configuration>

これが実行時に問題を引き起こさないかどうかはわかりません。私はこれをすぐに見つけて、この投稿を更新します。

于 2014-06-25T13:20:37.047 に答える
0

WSDLの変更が可能で、WS-I Basic Profile 2.0が使用されている場合は、要素(要素内)wsa:Action一意の値を追加できます。wsdl:inputwsdl:operation

例えば

<wsdl:operation name="update">
  <wsdl:input message="tns:myMessage" wsam:Action="namespace/port/operation" />
</wsdl:operation>

WS-I Basic Profile 2.0では、「操作署名」の定義:「プロファイルは、「操作署名」を、WSDLバインディングの操作によって記述されたSOAP入力メッセージのSOAP本文の子要素の完全修飾名として定義します。存在する場合は、wsa:ActionSOAPヘッダーブロックのURI値。」

于 2015-09-02T14:21:59.683 に答える
0

別の回避策は、WSDLからスキーマファイルを取得しようとすることです。そして、Javaクラスを生成するためのMavenの以下のプラグイン

<plugin>
    <groupId>org.jvnet.jax-ws-commons</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>2.3</version>
    <executions>
        <execution>
            <id>schema1-generate</id>
            <goals>
                <goal>wsimport</goal>
            </goals>
            <configuration>
                <extension>true</extension>
                <bindingFiles>
                    <bindingFile>${basedir}/src/main/resources/wsdl/service-bindings.xjc</bindingFile>
                </bindingFiles>
                <wsdlDirectory>src/main/resources/wsdl</wsdlDirectory>
                <wsdlFiles>
                    <wsdlFile>Service.wsdl</wsdlFile>
                </wsdlFiles>
                <keep>true</keep>
                <sourceDestDir>target/generated-code/src</sourceDestDir>
                <vmArgs>
                    <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
                </vmArgs>
            </configuration>
            <phase>generate-sources</phase>
        </execution>
    </executions>
</plugin>
于 2017-05-31T14:50:34.917 に答える