問題の説明が長い場合があります。私はWebサービスを初めて使用するので、しばらくお待ちください。
私がやったこと: Webサービスを作成しましたJava。クラスを作成し、ボトムアップ開発アプローチを使用してSEI、WSDLを生成しました。およびXMLファイル。
問題の内容:さて、「http://localhost:8084/DeepThoughtWS/services/DeepThoughtPort/whatIsTheAnswer
"、出力はunknown paramsでunknownメソッドを呼び出している間、バインディング操作情報なし。応答は次のとおりです。 :
<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>
一般に、この例外は通常、着信SOAPメソッドがWSDLと正しく一致しない場合に発生します。このような場合、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.
_
以下も参照してください:
同じ問題がありました。 cxf 2.6 2.7の使用chromeまたはfirefoxのようなWebブラウザーによるこの要求は機能しませんでした。cxfでクライアントを使用してみましたが機能します!Webサービスは機能していますが、実行できます 'クライアントがXMLの要件を知っているため、Webブラウザーで要求を行うにはクライアントが必要です。
Webサービスの実装が機能することを確認するには、urlの最後にwsdl(?wsdlを追加するなど)を使用してクエリを実行する必要があります。ブラウザは、SOAPクライアントとしてSOAP要求を送信できません。
はい、ブラウザの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");
}
誰かがあなたのSOAP WebService
GET
リクエストあり、ただしSOAP WebServices
GET
リクエストを受信できません。あなたは彼/彼女に私のSOAP WebService
GET
リクエストを使用するか、 ここで説明 のようなGET
リクエストを使用してWebサービスを呼び出します。