使用Apache CXF的Web服务响应显示“无绑定操作信息…”

问题描述可能很长。 请耐心等待并提供任何帮助,因为我不熟悉Web服务。

我做了什么:我使用Apache CXF RI在java中创建了一个Web服务。 我只是创建了一个类,并使用自下而上的开发方法来生成SEI,WSDL和XML文件。

问题是:现在,如果我请求“ http://localhost:8084/DeepThoughtWS/services/DeepThoughtPort/whatIsTheAnswer ”,它会在调用未知方法的未知方法时生成输出为无绑定操作信息。 答复如下:

    soap:Server No binding operation info while invoking unknown method with params unknown.    

生成的WSDL是:

                                      

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:ServerNo binding operation info while invoking unknown method with params unknown. 

通常,如果传入的soap方法与WSDL不正确匹配,则通常会发生此exception。 在这种情况下,soap消息无法映射到服务上的适当方法。 CXF只是不知道该怎么做。 仔细检查传入的肥皂消息。

以上解释的来源。

可能的方法:

 @WebService(targetNamespace = "http://ws.service.com/", portName = "DeepThoughtPort", 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服务根本不包含任何方法,并说: No binding operation info while invoking unknown method with params unknown.

也可以看看:

  • 使用JAX-WS开发服务

我有同样的问题。 使用cxf 2.6 2.7像chrome或firefox这样的Web浏览器的这个请求只是没有用。 我尝试在cxf中使用客户端,它的工作原理! 您的Web服务正在运行但您无法通过Web浏览器执行请求,因为客户知道XML的要求,所以您需要客户端。

是的已经回答您无法在浏览器url中直接访问该服务。 你需要这样的客户端代码

 import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import org.junit.Test; @Test public void testWhatIsTheAnswer() { JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean(); factoryBean.getInInterceptors().add(new LoggingInInterceptor()); factoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); factoryBean.setServiceClass(DeepThought.class); factoryBean.setAddress("http://localhost:8084/DeepThoughtWS/services/DeepThoughtPort"); DeepThought service = (DeepThought) factoryBean.create(); service.whatIsTheAnswer("some answer"); } 

有人使用GET请求调用SOAP WebService ,但SOAP WebServices无法接收GET请求。 您应该对他/她说不要使用GET请求调用我的SOAP WebService ,或者使用GET请求调用我的Web服务,如此处所述 。

您应该在url的末尾使用wsdl(比如添加?wsdl)进行查询,以检查您的Web服务实现是否有效。 浏览器无法作为soap客户端发送任何soap请求。