Axis2访问cxf发布的webservice的参数设置问题

在最近的项目过程中,需要发布一个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();
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值