Axis2访问cxf发布的webservice的参数设置问题
2014-12-22 15:07
543 查看
在最近的项目过程中,需要发布一个webservice给其他系统调用。鉴于cxf与spring的集成比较方便,所以选用cxf框架。发布后,对方使用axis2反复出现无法调用的情况。在多次查资料之后,终于解决了这个问题。我把它记录下来,希望能给同样在困惑的朋友们一点灵感。
关于,cxf的webservice的code和发布就不再赘述了。这里着重讲一下,服务发布后如何用axis2调用的问题。
使用axis2客户端调用有两种方式:
1.使用ServiceClient,代码如下:
public static void main(String[] args) {
try {
String soapBindingAddress = "http://localhost:8080/test/services/testService?wsdl";//访问地址
ServiceClient sender = new ServiceClient();
EndpointReference endpointReference = new EndpointReference(soapBindingAddress);
Options options = new Options();
options.setAction("http://server.webService.test/");//指定action
options.setTo(endpointReference);
sender.setOptions(options);
OMFactory fac = OMAbstractFactory.getOMFactory();
// 这个和qname差不多,设置命名空间
OMNamespace omNs = fac.createOMNamespace("http://server.webService.test/",
"test");
OMElement data = fac.createOMElement("test", omNs);
// 对应参数的节点,xmlStr是参数名称
String[] strs = new String[] { "xmlStr" };
// 参数值
String[] val = new String[] { "axis2 serviceClient tester" };
for (int i = 0; i < strs.length; i++) {
OMElement inner = fac.createOMElement(strs[i], omNs);
inner.setText(val[i]);
data.addChild(inner);
}
// 发送数据,返回结果
OMElement result = sender.sendReceive(data);
System.out.println(result.toString());
} catch (AxisFault ex) {
ex.printStackTrace();
} 2.使用RPCServiceClient,代码如下:
public static void main(String[] args) {
//使用RPC方式调用WebService
RPCServiceClient serviceClient = null;
try {
serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
String serviceUrl = "http://localhost:8080/test/services/testService";
EndpointReference targetEPR = new EndpointReference(serviceUrl);
options.setTo(targetEPR);
OMFactory fac = OMAbstractFactory.getOMFactory();
// 这个和qname差不多,设置命名空间
OMNamespace omNs = fac.createOMNamespace("http://server.webService.test/",
"test");
OMElement data = fac.createOMElement("test", omNs);
// 对应参数的节点,xmlStr为参数名称
String[] strs = new String[] { "xmlStr" };
// 参数值
String[] val = new String[] { "axis2 EndpointReference tester" };
for (int i = 0; i < strs.length; i++) {
OMElement inner = fac.createOMElement(strs[i], omNs);
inner.setText(val[i]);
data.addChild(inner);
}
OMElement object = serviceClient.sendReceive(data);
System.out.println(object.toString());
serviceClient.cleanupTransport();
}catch (Exception e) {
e.printStackTrace();
}
}
关于,cxf的webservice的code和发布就不再赘述了。这里着重讲一下,服务发布后如何用axis2调用的问题。
使用axis2客户端调用有两种方式:
1.使用ServiceClient,代码如下:
public static void main(String[] args) {
try {
String soapBindingAddress = "http://localhost:8080/test/services/testService?wsdl";//访问地址
ServiceClient sender = new ServiceClient();
EndpointReference endpointReference = new EndpointReference(soapBindingAddress);
Options options = new Options();
options.setAction("http://server.webService.test/");//指定action
options.setTo(endpointReference);
sender.setOptions(options);
OMFactory fac = OMAbstractFactory.getOMFactory();
// 这个和qname差不多,设置命名空间
OMNamespace omNs = fac.createOMNamespace("http://server.webService.test/",
"test");
OMElement data = fac.createOMElement("test", omNs);
// 对应参数的节点,xmlStr是参数名称
String[] strs = new String[] { "xmlStr" };
// 参数值
String[] val = new String[] { "axis2 serviceClient tester" };
for (int i = 0; i < strs.length; i++) {
OMElement inner = fac.createOMElement(strs[i], omNs);
inner.setText(val[i]);
data.addChild(inner);
}
// 发送数据,返回结果
OMElement result = sender.sendReceive(data);
System.out.println(result.toString());
} catch (AxisFault ex) {
ex.printStackTrace();
} 2.使用RPCServiceClient,代码如下:
public static void main(String[] args) {
//使用RPC方式调用WebService
RPCServiceClient serviceClient = null;
try {
serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
String serviceUrl = "http://localhost:8080/test/services/testService";
EndpointReference targetEPR = new EndpointReference(serviceUrl);
options.setTo(targetEPR);
OMFactory fac = OMAbstractFactory.getOMFactory();
// 这个和qname差不多,设置命名空间
OMNamespace omNs = fac.createOMNamespace("http://server.webService.test/",
"test");
OMElement data = fac.createOMElement("test", omNs);
// 对应参数的节点,xmlStr为参数名称
String[] strs = new String[] { "xmlStr" };
// 参数值
String[] val = new String[] { "axis2 EndpointReference tester" };
for (int i = 0; i < strs.length; i++) {
OMElement inner = fac.createOMElement(strs[i], omNs);
inner.setText(val[i]);
data.addChild(inner);
}
OMElement object = serviceClient.sendReceive(data);
System.out.println(object.toString());
serviceClient.cleanupTransport();
}catch (Exception e) {
e.printStackTrace();
}
}
相关文章推荐
- 解决cxf+spring发布的webservice缺少<wsdl:types>和<wsdl:message>标签的问题
- AXIS2框架下另一种发布WEBSERVICE的方法,以及浏览器中验证的方法及参数的写法
- webservice框架对比-----Axis、Axis2和CXF【企业中最常用的webservice发布方式是CXF】
- 关于axis2发布服务,用cxf在同个进程调用不同服务时出现数组下标越界问题
- 使用CXF框架,发布webservice服务,并使用客户端远程访问webservice
- Silverlight项目发布无法访问WebService接口问题
- strtus2 + spring + CXF 实现能访问action的同时还能调用spring发布的Webservice
- linux下weblogic发布cxf webservice的问题
- cxf访问出现意外参数的问题解决办法
- C#发布WebService提供使用时候,通过服务器解决前端js跨域访问问题
- jQuery调用WebService返回JSON数据及参数设置注意问题
- 关于cxf方式访问webservice的问题
- webservice发布后访问没有要求输入参数
- 在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决
- 设置axis2访问webservice 权限
- jQuery调用WebService返回JSON数据及参数设置注意问题
- CXF的webservice接口中字符串参数中文问题
- webservice axis2客户端设置代理方法(公司网络通过代理访问时)
- 解决wince与主机webservice的连接和访问问题?webservice的IIS发布问题?
- cxf设置代理访问webservice接口