AXIS调用jws发布的webservice出现Cannot find dispatch method for
2014-04-29 11:22
309 查看
服务端代码
[java] view
plaincopy
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class WebserviceServer {
@WebMethod
public void doSomething() {
System.out.println("hello");
}
public static void main(String[] args) {
WebserviceServer server = new WebserviceServer();
Endpoint.publish("http://172.16.160.67:8888/login", server);
}
}
服务端发布成功时的wsdl文件内容
[html] view
plaincopy
<?xml version="1.0" encoding="UTF-8"?>
<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01. -->
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01. -->
-<definitions name="WebserviceServerService" targetNamespace="http://test.kedacom.com/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://test.kedacom.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> -<types> -<xsd:schema> <xsd:import schemaLocation="http://172.16.160.67:8888/login?xsd=1" namespace="http://test.kedacom.com/"/> </xsd:schema> </types> -<message name="doSomething"> <part name="parameters" element="tns:doSomething"/> </message> -<message name="doSomethingResponse"> <part name="parameters" element="tns:doSomethingResponse"/> </message> -<portType name="WebserviceServer"> -<operation name="doSomething"> <input message="tns:doSomething" wsam:Action="http://test.kedacom.com/WebserviceServer/doSomethingRequest"/> <output message="tns:doSomethingResponse" wsam:Action="http://test.kedacom.com/WebserviceServer/doSomethingResponse"/> </operation> </portType> -<binding name="WebserviceServerPortBinding" type="tns:WebserviceServer"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> -<operation name="doSomething"> <soap:operation soapAction=""/> -<input> <soap:body use="literal"/> </input> -<output> <soap:body use="literal"/> </output> </operation> </binding> -<service name="WebserviceServerService"> -<port name="WebserviceServerPort" binding="tns:WebserviceServerPortBinding"> <soap:address location="http://172.16.160.67:8888/login"/> </port> </service> </definitions>
客户端调用代码
[java] view
plaincopy
String endPoint = "http://172.16.160.67:8888/login";
Service service = new Service();
try {
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endPoint));
call.setOperation("doSomething");
call.invoke(new Object[] {});
} catch (ServiceException e) {
e.printStackTrace();
} catch (AxisFault e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
调用时出现的了错误:
[java] view
plaincopy
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client
faultSubcode:
faultString: Cannot find dispatch method for {}doSomething
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:Cannot find dispatch method for {}doSomething
原因:
可以通过wsdl文件看到,[b]利用jws发布时,namespace="http://test.kedacom.com/",而在客户端访问时没有指定命名空间。[/b]
修改方法:
修改客户端调用代码
[java] view
plaincopy
String endPoint = "http://172.16.160.67:8888/login";
Service service = new Service();
try {
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endPoint));
call.setOperationName(new QName("http://test.kedacom.com/", "doSomething"));
call.invoke(new Object[] {});
} catch (ServiceException e) {
e.printStackTrace();
} catch (AxisFault e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
[java] view
plaincopy
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class WebserviceServer {
@WebMethod
public void doSomething() {
System.out.println("hello");
}
public static void main(String[] args) {
WebserviceServer server = new WebserviceServer();
Endpoint.publish("http://172.16.160.67:8888/login", server);
}
}
服务端发布成功时的wsdl文件内容
[html] view
plaincopy
<?xml version="1.0" encoding="UTF-8"?>
<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01. -->
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01. -->
-<definitions name="WebserviceServerService" targetNamespace="http://test.kedacom.com/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://test.kedacom.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> -<types> -<xsd:schema> <xsd:import schemaLocation="http://172.16.160.67:8888/login?xsd=1" namespace="http://test.kedacom.com/"/> </xsd:schema> </types> -<message name="doSomething"> <part name="parameters" element="tns:doSomething"/> </message> -<message name="doSomethingResponse"> <part name="parameters" element="tns:doSomethingResponse"/> </message> -<portType name="WebserviceServer"> -<operation name="doSomething"> <input message="tns:doSomething" wsam:Action="http://test.kedacom.com/WebserviceServer/doSomethingRequest"/> <output message="tns:doSomethingResponse" wsam:Action="http://test.kedacom.com/WebserviceServer/doSomethingResponse"/> </operation> </portType> -<binding name="WebserviceServerPortBinding" type="tns:WebserviceServer"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> -<operation name="doSomething"> <soap:operation soapAction=""/> -<input> <soap:body use="literal"/> </input> -<output> <soap:body use="literal"/> </output> </operation> </binding> -<service name="WebserviceServerService"> -<port name="WebserviceServerPort" binding="tns:WebserviceServerPortBinding"> <soap:address location="http://172.16.160.67:8888/login"/> </port> </service> </definitions>
客户端调用代码
[java] view
plaincopy
String endPoint = "http://172.16.160.67:8888/login";
Service service = new Service();
try {
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endPoint));
call.setOperation("doSomething");
call.invoke(new Object[] {});
} catch (ServiceException e) {
e.printStackTrace();
} catch (AxisFault e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
调用时出现的了错误:
[java] view
plaincopy
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client
faultSubcode:
faultString: Cannot find dispatch method for {}doSomething
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:Cannot find dispatch method for {}doSomething
原因:
可以通过wsdl文件看到,[b]利用jws发布时,namespace="http://test.kedacom.com/",而在客户端访问时没有指定命名空间。[/b]
修改方法:
修改客户端调用代码
[java] view
plaincopy
String endPoint = "http://172.16.160.67:8888/login";
Service service = new Service();
try {
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endPoint));
call.setOperationName(new QName("http://test.kedacom.com/", "doSomething"));
call.invoke(new Object[] {});
} catch (ServiceException e) {
e.printStackTrace();
} catch (AxisFault e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
相关文章推荐
- AXIS调用jws发布的webservice出现Cannot find dispatch method for
- AXIS调用jws发布的webservice出现Cannot find dispatch method for
- AXIS调用jws发布的webservice出现Cannot find dispatch method for
- Delphi调用Java的WebService报错can not find dispatch method for{null}terminalNo using "Payload QName-based Dispatcher"的解决方法
- eclipse 报错 Cannot find dispatch method for
- 记一次在JAVA中客户端使用axis调用webservice服务端出现的异常:Unmarshalling Error: For input string: ""
- WinServer 之 发布WebService后调用出现" The test form is only available for requests from the local machine. "
- axis客户端调用jws发布的webservice要5分钟才能返回问题解决
- ArcGIS API for Silverlight 调用WebService出现跨域访问报错的解决方法
- 基于JAVA中使用Axis发布/调用Webservice的方法详解
- Linux安装命令出现如下错误:cannot find a valid baseurl for repo :base/7x86_64
- ArcGIS API for Silverlight 调用WebService出现跨域访问报错的解决方法
- 安装centos 5.9系统,出现Error: Cannot find a valid baseurl for repo: base报错
- Servlet,当由浏览器直接调用servlet时,出现的The specified HTTP method is not allowed for the requested resource.
- Struts2-动态方法调用-Could not find action or result-Method update for action user is not allowed
- 服务端使用Axis2-1.6.3发布webservice服务、客户端使用Axis1.4实现调用
- 安装centos 5.9系统,出现Error: Cannot find a valid baseurl for repo: base报错
- xFire写webservice的时候出现 Cannot create mapping for java.util.List,
- Xcode5中ios7模拟器出现 Cannot find executable for CFBundle ... axbundle> (not loaded) 的解决办法
- 发布Axis的webservice服务 调用webservice服务