2013-02-05 40 views
13

समस्या का विवरण लंबा हो सकता है। कृपया धैर्य रखें और किसी भी प्रकार की सहायता प्रदान करें क्योंकि मैं वेब सेवाओं में नया हूं।अपाचे सीएक्सएफ का उपयोग कर वेब सेवा से प्रतिक्रिया "कोई बाध्यकारी संचालन जानकारी .."

मैंने जो किया है: मैंने अपाचे सीएक्सएफ आरआई का उपयोग कर जावा में एक वेब सेवा बनाई है। मैंने बस एक वर्ग बनाया और एसईआई, डब्ल्यूएसडीएल और एक्सएमएल फाइलें उत्पन्न करने के लिए नीचे विकास दृष्टिकोण का उपयोग किया।

क्या समस्या है: अब, मैं अनुरोध करते हैं "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> 

उत्तर

7

सामान्य तौर पर, इस अपवाद आमतौर पर तब होता है, भेजे साबुन विधि सही ढंग से डबल्यूएसडीएल मेल नहीं खाता। ऐसे मामले में, साबुन संदेश सेवा पर उचित विधि के लिए मैप नहीं किया जा सका। सीएक्सएफ बस नहीं जानता कि क्या करना है। आने वाले साबुन संदेश को दो बार जांचें।

Source of the above explanation.

संभव समाधान:

@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 में डबल्यूएसडीएल स्थान और endpointInterface जोड़ना है। इसके अलावा आप जावा-फर्स्ट दृष्टिकोण का उपयोग कर रहे हैं, इसलिए आपकी विधि @WebMethod(action = "whatIsTheAnswer") के साथ एनोटेट की जानी चाहिए। तो अगर विधि CXF एनोटेट नहीं है "समझता है" कि आपके वेब सेवा कोई भी तरीकों शामिल नहीं है और कहते हैं: No binding operation info while invoking unknown method with params unknown.

यह भी देखें:

+0

मैंने डब्लूएसडीएल स्थान, एंडपॉइंट इंटरफेस और @WebMethod (action = "whatIsTheAnswer") प्रदान किया। अभी भी कोई प्रतिक्रिया नहीं है। क्या मेरा अनुरोध सही है "http: // localhost: 8084/DeepThoughtWS/सेवाएं/DeepThoughtPort/whatIsTheAnswer"? – Sujan

+0

आपका अनुरोध क्या है? यह यूआरएल है, अनुरोध नहीं। यदि यह आपकी तैनात वेब सेवा का अंत बिंदु है तो आपने इसे एसओएपी अनुरोध भेज दिया है। –

+0

मेरा मतलब यूआरएल था। क्या मुझे यूआरएल से प्रतिक्रिया मिल सकती है? यदि मैं SOAP अनुरोध भेजता हूं तो वेब सेवा काम कर रही है। लेकिन यूआरएल से जीईटी का उपयोग कर एक्सएमएल आउटपुट प्राप्त करने का कोई तरीका है? – Sujan

2

मैं था एक ही समस्या। सीएक्सएफ 2.6 2.7 का उपयोग करना क्रोम या फ़ायरफ़ॉक्स जैसे वेब ब्राउज़र द्वारा यह अनुरोध अभी काम नहीं किया है। मैंने सीएक्सएफ में क्लाइंट का इस्तेमाल करने की कोशिश की और यह काम करता है! आपकी वेब सेवाएं काम कर रही हैं लेकिन आप किसी वेब ब्राउज़र द्वारा अनुरोध नहीं कर सकते हैं, आपको क्लाइंट की आवश्यकता है क्योंकि क्लाइंट XML की आवश्यकताओं को जानता है।

1

हाँ पहले ही उत्तर दिया गया है कि आप ब्राउज़र यूआरएल में सीधे सेवा तक नहीं पहुंच सकते हैं।आप इस

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

किसी के पास आपका SOAP WebService साथ GET अनुरोध कहता है, लेकिन SOAP WebServicesGET अनुरोध प्राप्त नहीं कर सकते हैं की तरह एक ग्राहक कोड की जरूरत है। आपको कहना चाहिए कि उसे SOAP WebService पर GET अनुरोध के साथ कॉल न करें या अनुरोध के साथ मेरी वेब सेवा described here पर कॉल करें।