关于axis2的RPCServiceClient客户端无法传参问题的解决方案
本内容链接上一篇博客。关于如何访问webservice的问题 axis2方式的rpcserviceclient客户端方式调用webservice一般方式如下: import java.io.IOException; RPCServiceClient client = new RPCServiceClient(); Options options = client.getOptions(); String address = "http://webservice.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx"; EndpointReference epf = new EndpointReference(address); options.setAction("http://WebXml.com.cn/getAreaString"); options.setTo(epf); client.setOptions(options); QName qname = new QName("http://WebXml.com.cn/","getAreaString"); Object[] result = client.invokeBlocking(qname,new Object[] { -4 },new Class[] { Object.class }); // System.out.println(result[0]); 但是这种方式调用电视台节目,存在无法传参问题。别的webservice接口没有测试过,这里不敢下决定性的结论。但至少是访问电视台接口是不行的。搜索了下资料,发现以下方式可以传参。代码如下: 这种方式是采用serviceclient方式调用的。 // axis2方式 private static void axis2WebService() { try { String soapBindingAddress = "http://webservice.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx?wsdl"; ServiceClient sender = new ServiceClient(); EndpointReference endpointReference = new EndpointReference( soapBindingAddress); Options options = new Options(); options.setAction("http://WebXml.com.cn/getTVstationDataSet"); options.setTo(endpointReference); sender.setOptions(options); OMFactory fac = OMAbstractFactory.getOMFactory(); // 这个和qname差不多,设置命名空间 OMNamespace omNs = fac.createOMNamespace("http://WebXml.com.cn/","getTVstationDataSet"); OMElement data = fac.createOMElement("getTVstationDataSet",omNs); // 对应参数的节点 String[] strs = new String[] { "theAreaID" }; // 参数值 String[] val = new String[] { "-4" }; 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(); } } 所需包如如下: activation-1.1.jar 下载axis2的包就行,没有挑除不需要的。 具体原因没有仔细研究,可能问题是命名空间无法访问造成的吧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |