2013-02-05 23 views
13

Mô tả sự cố có thể dài. Hãy kiên nhẫn và cung cấp bất kỳ loại trợ giúp nào kể từ khi tôi mới sử dụng các dịch vụ web.Phản hồi từ dịch vụ Web bằng Apache CXF hiển thị "Không có thông tin hoạt động ràng buộc .."

Điều tôi đã làm: Tôi đã tạo một dịch vụ web bằng java sử dụng Apache CXF RI. Tôi chỉ đơn giản là tạo ra một lớp và sử dụng cách tiếp cận phát triển từ dưới lên để tạo ra các tệp SEI, WSDL và XML.

gì vấn đề là: Bây giờ, nếu tôi yêu cầu "http://localhost:8084/DeepThoughtWS/services/DeepThoughtPort/whatIsTheAnswer", nó tạo ra như Không ràng buộc thông tin hoạt động trong khi cách gọi phương pháp vô danh với params rõ. Câu trả lời như sau:

<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> 

Các tạo WSDL là:

<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> 

Lớp DeepThought bao gồm:

@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); 
    } 
} 

Giao diện điều khiển đầu ra tại thời điểm yêu cầu cho thấy một số lỗi quá:

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> 

Trả lời

7

Nói chung, ngoại lệ này thường xảy ra nếu phương pháp xà phòng đến không khớp chính xác với WSDL. Trong trường hợp này, thông báo xà phòng không thể được ánh xạ tới một phương thức thích hợp trên dịch vụ. CXF chỉ không biết phải làm gì. Kiểm tra kỹ thông điệp xà phòng đến.

Source of the above explanation.

giải pháp có thể:

@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); 
    } 
} 

gì tôi sẽ làm là để thêm vị trí WSDL và endpointInterface trong @WebService của bạn. Ngoài ra, bạn đang sử dụng phương pháp tiếp cận Java-Đầu tiên nên phương pháp của bạn nên được chú thích với @WebMethod(action = "whatIsTheAnswer"). Vì vậy, nếu phương pháp này là không chú thích CXF "hiểu" rằng dịch vụ web của bạn không chứa bất kỳ phương pháp nào cả và nói: No binding operation info while invoking unknown method with params unknown.

Xem thêm:

+0

Tôi đã cung cấp vị trí WSDL, endpointInterface và cũng là @WebMethod (action = "whatIsTheAnswer"). Vẫn không có phản hồi. Yêu cầu của tôi có đúng "http: // localhost: 8084/DeepThoughtWS/services/DeepThoughtPort/whatIsTheAnswer" không? – Sujan

+0

Ý của bạn là gì? Đây là URL, không phải là yêu cầu. Nếu đây là điểm cuối của dịch vụ web được triển khai của bạn thì bạn đã gửi yêu cầu SOAP tới nó. –

+0

Ý tôi là URL. Tôi có thể nhận phản hồi từ URL không? Dịch vụ web đang hoạt động nếu tôi gửi yêu cầu SOAP. Nhưng có cách nào để lấy đầu ra XML bằng GET từ URL không? – Sujan

2

tôi đã vấn đề giống nhau. Sử dụng cxf 2.6 2.7 Yêu cầu này bởi một trình duyệt web như chrome hoặc firefox không hoạt động. Tôi đã thử sử dụng một khách hàng đã làm trong cxf và nó hoạt động! Các dịch vụ web của bạn đang hoạt động nhưng bạn không thể thực hiện yêu cầu của trình duyệt web, bạn cần một máy khách vì máy khách biết các yêu cầu của XML.

1

Có đã trả lời bạn không thể truy cập trực tiếp vào dịch vụ trong url trình duyệt.Bạn cần một mã khách hàng như

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"); 

} 
0

người này kêu gọi yêu cầu SOAP WebService với GET của bạn, nhưng SOAP WebServices không thể nhận GET yêu cầu. Bạn nên nói với anh ấy/cô ấy không gọi số SOAP WebService của tôi với yêu cầu GET hoặc gọi dịch vụ web của tôi theo số GET yêu cầu như described here.

Các vấn đề liên quan