すでに多くの 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 に到達しません)。
編集:匿名化するつもりだったものを匿名化しました。