关于axis2的RPCServiceClient客户端无法传参问题的解决方案

来源:互联网 发布:老炮网络剧找不到了 编辑:程序博客网 时间:2024/05/22 16:45

本内容链接上一篇博客。关于如何访问webservice的问题


axis2方式的rpcserviceclient客户端方式调用webservice一般方式如下:


import java.io.IOException;
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.rpc.client.RPCServiceClient;

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
antlr-2.7.7.jar
axiom-api-1.2.10.jar
axiom-dom-1.2.10.jar
axiom-impl-1.2.10.jar
axis2-adb-1.5.4.jar
axis2-adb-codegen-1.5.4.jar
axis2-ant-plugin-1.5.4.jar
axis2-clustering-1.5.4.jar
axis2-codegen-1.5.4.jar
axis2-corba-1.5.4.jar
axis2-fastinfoset-1.5.4.jar
axis2-java2wsdl-1.5.4.jar
axis2-jaxbri-1.5.4.jar
axis2-jaxws-1.5.4.jar
axis2-jibx-1.5.4.jar
axis2-json-1.5.4.jar
axis2-kernel-1.5.4.jar
axis2-metadata-1.5.4.jar
axis2-mtompolicy-1.5.4.jar
axis2-saaj-1.5.4.jar
axis2-soapmonitor-servlet-1.5.4.jar
axis2-spring-1.5.4.jar
axis2-transport-http-1.5.4.jar
axis2-transport-local-1.5.4.jar
axis2-xmlbeans-1.5.4.jar
bcel-5.1.jar
commons-codec-1.3.jar
commons-fileupload-1.2.jar
commons-httpclient-3.1.jar
commons-io-1.4.jar
commons-logging-1.1.1.jar
geronimo-annotation_1.0_spec-1.1.jar
geronimo-jaxws_2.1_spec-1.0.jar
geronimo-jta_1.1_spec-1.1.jar
geronimo-saaj_1.3_spec-1.0.1.jar
geronimo-stax-api_1.0_spec-1.0.1.jar
geronimo-ws-metadata_2.0_spec-1.1.2.jar
httpcore-4.0.jar
jalopy-1.5rc3.jar
jaxb-api-2.1.jar
jaxb-impl-2.1.7.jar
jaxb-xjc-2.1.7.jar
jaxen-1.1.1.jar
jettison-1.0-RC2.jar
jibx-bind-1.2.1.jar
jibx-run-1.2.1.jar
juli-6.0.16.jar
log4j-1.2.15.jar
mail-1.4.jar
mex-1.5.4-impl.jar
neethi-2.0.4.jar
regexp-1.2.jar
tribes-6.0.16.jar
woden-api-1.0M8.jar
woden-impl-dom-1.0M8.jar
wsdl4j-1.6.2.jar
wstx-asl-3.2.9.jar
xalan-2.7.0.jar
xercesImpl-2.8.1.jar
xml-resolver-1.2.jar
xmlbeans-2.3.0.jar
XmlSchema-1.4.3.jar

下载axis2的包就行,没有挑除不需要的。

具体原因没有仔细研究,可能问题是命名空间无法访问造成的吧。

0 0
原创粉丝点击