前一段总结了一篇Java调用webservice的方式,当时因客户是局域网,所以只是在我们本地用.NET实现了一个webservice,然后进行测试,测试是通过的.但是在前一段去现场部署后,却一直的出异常,抛出的异常为null while involing ...找了很多原因都没有结果.后来百度了很多帖子发现一个比较全面的连接webservice的方法,貌似还区分连接.NET系统和其他系统.将信将疑就挑了一种实现方式.自己还搭建了一个Java实现的webservice做实验,发现原来的方法确实没有将值传到webservice上.最后部署到客户方发现真的成功了.故记录一下.
EndpointReference endpointReference = new EndpointReference(url);//url为webservice路径,不带?wsdl
// 创建一个OMFactory,下面的namespace、方法与参数均需由它创建
OMFactory factory = OMAbstractFactory.getOMFactory();
// 创建命名空间.<span style="font-family: Arial, Helvetica, sans-serif;">urn</span><span style="font-family: Arial, Helvetica, sans-serif;">不用变,</span><span style="font-family: Arial, Helvetica, sans-serif;">xmlns</span><span style="font-family: Arial, Helvetica, sans-serif;">对应xml文件中的</span><span style="font-family: Arial, Helvetica, sans-serif;">targetNamespace</span><span style="font-family: Arial, Helvetica, sans-serif;">
</span>OMNamespace namespace = factory.createOMNamespace(xmlns, "urn");//
// 参数对数 arg0 arg1 arg2 分别对应要调用的webservice所对应值的名称
OMElement nameElement = factory.createOMElement("arg0",null);
nameElement.addChild(factory.createOMText(nameElement, "参数一"));
OMElement nameElement1 = factory.createOMElement("arg1",null);
nameElement1.addChild(factory.createOMText(nameElement1,"参数二"));
OMElement nameElement2 = factory.createOMElement("arg2",null);
nameElement2.addChild(factory.createOMText(nameElement2,"参数三"));
// 创建一个method对象
OMElement method = factory.createOMElement("这里是要调用的方法名", namespace);
//将参数添加进去
method.addChild(nameElement);
method.addChild(nameElement1);
method.addChild(nameElement2);
Options options = new Options();
options.setTo(endpointReference);
options.setSoapVersionURI(org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
// 请求并得到结果
OMElement element = sender.sendReceive(method);
//System.out.println(element);就可以打印出结果,但是结果是以xml格式显示的.可以通过迭代器遍历
<span style="font-family: Arial, Helvetica, sans-serif;"></span>Iterator iterator = element.getChildElements();返回迭代器进行遍历
while(iterator.hasNext()) {
<span style="white-space:pre"> </span>String result = ((OMElement) iterator.next()).getText();//getText()可以返回标签中的值
<span style="white-space:pre"> </span>System.out.println(result);
}
所需jar包http://download.csdn.net/detail/c5906343/8068967