问题描述可能很长.请耐心等待,并提供任何帮助,因为我是新的网络服务.
我做了什么:
我使用Apache CXF RI在java中创建了一个Web服务.我只是创建了一个类,并使用自下而上的开发方法来生成SEI,WSDL和XML文件.
问题是:
现在,如果我请求“http:// localhost:8084 / DeepThoughtWS / services / DeepThoughtPort / whatIsTheAnswer”,那么在调用未知方法时,会产生无绑定操作信息的输出.
答复如下:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <soap:Fault> <faultcode>soap:Server</faultcode> <faultstring>No binding operation info while invoking unknown method with params unknown.</faultstring> </soap:Fault> </soap:Body> </soap:Envelope>
生成的WSDL是:
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://ws.service.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="DeepThoughtService" targetNamespace="http://ws.service.com/"> <wsdl:types> <schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://ws.service.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://ws.service.com/" schemaLocation="http://localhost:8084/DeepThoughtWS/services/DeepThoughtPort?xsd=deepthought_schema1.xsd" /> </schema> </wsdl:types> <wsdl:message name="whatIsTheAnswerResponse"> <wsdl:part element="tns:whatIsTheAnswerResponse" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="whatIsTheAnswer"> <wsdl:part element="tns:whatIsTheAnswer" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:portType name="DeepThought"> <wsdl:operation name="whatIsTheAnswer"> <wsdl:input message="tns:whatIsTheAnswer" name="whatIsTheAnswer"></wsdl:input> <wsdl:output message="tns:whatIsTheAnswerResponse" name="whatIsTheAnswerResponse"></wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="DeepThoughtServiceSoapBinding" type="tns:DeepThought"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="whatIsTheAnswer"> <soap:operation soapAction="" style="document" /> <wsdl:input name="whatIsTheAnswer"> <soap:body use="literal" /> </wsdl:input> <wsdl:output name="whatIsTheAnswerResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="DeepThoughtService"> <wsdl:port binding="tns:DeepThoughtServiceSoapBinding" name="DeepThoughtPort"> <soap:address location="http://localhost:8084/DeepThoughtWS/services/DeepThoughtPort" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
DeepThought课程包括:
@WebService(targetNamespace = "http://ws.service.com/",portName = "DeepThoughtPort",serviceName = "DeepThoughtService") public class DeepThought { public String whatIsTheAnswer(@WebParam(name = "arg0") String interviewer) { return ("The answer " + interviewer); } }
Feb 05,2013 3:59:14 PM org.apache.cxf.service.invoker.AbstractInvoker invoke SEVERE: Invocation without a binding operation. Feb 05,2013 3:59:14 PM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging WARNING: Interceptor for {http://ws.service.com/}DeepThoughtService has thrown exception,unwinding now org.apache.cxf.interceptor.Fault: No binding operation info while invoking unknown method with params unknown. at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:59) at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:107) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:218) at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:163) at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137) at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168) at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Feb 05,2013 3:59:14 PM org.apache.cxf.services.DeepThoughtService.DeepThoughtPort.DeepThought INFO: Outbound Message --------------------------- ID: 5 Response-Code: 500 Encoding: UTF-8 Content-Type: text/xml Headers: {} Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>No binding operation info while invoking unknown method with params unknown.</faultstring></soap:Fault></soap:Body></soap:Envelope>
解决方法
In general,this exception usually occurs if the incoming soap method
doesn’t correctly match the WSDL. In such a case,the soap message
could not be mapped to an appropriate method on the service. CXF just
doesn’t know what to do. Double check the incoming soap message.
Source of the above explanation.
可能的解决方案:
@WebService(targetNamespace = "http://ws.service.com/",serviceName = "DeepThoughtService",endpointInterface = "your.pck.DeepThoughtService",wsdlLocation = "WEB-INF/wsdl/DeepThoughtService.wsdl") public class DeepThought { @WebMethod(action = "whatIsTheAnswer") public String whatIsTheAnswer(@WebParam(name = "arg0") String interviewer) { return ("The answer " + interviewer); } }
我将要做的是在您的@WebService中添加WSDL位置和endpointInterface.另外你使用Java-First方法,所以你的方法应该用@WebMethod(action =“whatIsTheAnswer”)注释.所以如果方法没有注释CXF“了解”你的Web服务根本不包含任何方法,并说:没有绑定操作信息,而调用未知的方法与params未知.
也可以看看: