我已向已使用大量 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)。
编辑:匿名一些我打算匿名的东西。