2

すでに多くの SOAP リクエストを使用している既存のプロジェクトに、新しい SOAP リクエストを追加しました。それらはすべて正常に機能します。新しいものをまったく同じ方法 (Apache CXF を介して WSDL から生成されたコード) で追加しましたが、なぜか失敗します。

次のエラーが表示されます。

javax.xml.ws.WebServiceException: Could not find wsdl:binding operation info for web method foo.
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:113)
    at $Proxy51.foo(Unknown Source)

これは Grails プロジェクトで、コードは次のように呼び出されます。

FooRequest request = new FooRequest()
processResponse(order) { getPort().foo(request) }

明らかに失敗するのは、一番下の getPort().foo() です。実際、失敗したのは呼び出しではなく、クロージャーの作成であると思います。これは、processResponse() が実行されていないように見えるためです (そのメソッドの最初の行に println を配置しました)。 編集:失敗するのはクロージャーの実行であり、作成ではありません。したがって、生成されたインターフェースにこのメソッドがあるにもかかわらず、実際には getPort().foo() を見つけることができません。

public nl.wecompany.portal.webserviceQopi.QOPIResponse foo(
    @WebParam(name = "in", targetNamespace = "")
    com.myproject.FooRequest in
);

getPort() は org.apache.cxf.jaxws.JaxWsClientProxy@41079622 を返します。これは、他の SOAP 要求 (機能するもの) に対しても行います。

新しいコードと既存のコードの間に意味のある違いが見つかりません。何が間違っている可能性がありますか?どこを見るべきかについて何か提案はありますか?

編集: port.metaClass.methods*.name.sort().unique() には、新しい foo() メソッドが含まれています。しかし、私がそれを呼び出すと、この奇妙な wsdl:binding エラーが発生し、メソッドは実行されません (最初の行の println に到達しません)。

編集:匿名化するつもりだったものを匿名化しました。

4

3 に答える 3

7

私はそれを理解したと思います。JaxWsClientProxy には foo() メソッドがあるかもしれませんが、それは私の foo() メソッドではありません。これは、このメソッドがリモート サーバーの WSDL に実際に存在するかどうかを最初に確認する、私の foo() メソッドのプロキシです。また、foo 要求でリモート サーバー上の WSDL を更新していない場合、実際の foo() メソッドを呼び出す代わりに、例外がスローされます。通常のメソッド呼び出しのように見える途中でこの種のチェックが行われるとは思っていませんでしたが、明らかにそのチェックが、このような WSDL/SOAP バインディング フレームワークを持つことの要点です。

更新された WSDL を持つサーバーに接続すると、問題が修正されました。

于 2012-04-12T04:58:58.450 に答える
3

これは jboss EAP で発生していました。問題は、フレームワークの module.xml に jboss-cxf の依存関係が追加されておらず、デフォルトで de jaxws 仕様が使用されていることでした。これを解決するために、次を追加しました。

<module name="org.jboss.ws.cxf.jbossws-cxf-client" export="true"/>

export=true は、cxf ライブラリに必要なすべてのライブラリが含まれていることを示します。

これがより多くの人々を助けることができることを願っています。私はこれにほぼ1週間を費やしました。

于 2014-08-30T07:37:59.640 に答える
0

パラメータ名「in」を使用していますか?

inは groovy の予約語です。それが問題だと思います。

パラメータの名前を変更してみてください。

于 2012-04-11T14:07:33.680 に答える