java webservice 返回数组_webservice调用接口,接口返回数组类型

本文介绍了如何使用Java调用WebService接口并处理返回的数组类型数据。通过Apache Axis库创建Service和Call对象,设置操作名称、参数类型及返回类型为SOAP_VECTOR。示例代码展示了调用sendSyncMsg1接口,接收并解析Vector结果的过程。
摘要由CSDN通过智能技术生成

1.

其中sendSyncMsg1接口是方法名,Vector实现了List接口,xml是sendSyncMsg1的方法形参

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(new URL(     "http://127.0.0.1:8080/services/fangkunTest"));

call.setOperationName(new QName("http://127.0.0.1:8080/",     "sendSyncMsg1"));

call.addParameter(new QName("http://127.0.0.1:8080/", "xml"),     XMLType.XSD_STRING, ParameterMode.IN);   //必须这么用,不知道为啥,此处与返回基本类型写法有差别

call.setReturnType(XMLType.SOAP_VECTOR);   //返回时数组类型,暂时知道用XMLType.SOAP_VECTOR

call.setUseSOAPAction(true);

call.setSOAPActionURI("http://127.0.0.1:8080/sendSyncMsg1");

Vector result = (Vector) call.invoke(new Object[] { "昆明" });

// Vector实现了List接口

System.out.println((String) result.get(1));

if (result != null && result.size() != 0) {

if (result.get(0).equals("1")) {

String etoken = (String) result.get(1);

} else {

System.out.println(result.get(2));

return;

}

}

2.(转来自google)

准备工作:

主要依赖的包:

1.axis.jar

官网:http://axis.apache.org/axis/

2.jaxrpc.jar

下载地址:http://www.java2s.com/Code/Jar/j/Downloadjaxrpcjar.htm

说明:

在拿到wsdl地址后先分析清楚xml文件的一些参数,然后再动手写代码,例如service名称,targetNamespace,请求operation的名称,要传入的参数类型,返回结果类型等等。具体的代码参考如下:

1 package com.joysee.account.service.impl;

2

3

4 import java.rmi.RemoteException;

5

6 import javax.xml.namespace.QName;

7 import javax.xml.rpc.ParameterMode;

8 import javax.xml.rpc.ServiceException;

9

10 import org.apache.axis.client.Call;

11 import org.apache.axis.client.Service;

12

13

14 public classTest{

15

16 /**

17 *@paramargs

18 *@throwsServiceException

19 *@throwsMalformedURLException

20 *@throwsRemoteException

21 */

22 public static void main(String[] args) throws ServiceException, RemoteException {

23

24 //WSDL地址

25 String wsdlUrl ="http://IP:PORT/ExampleWebService?wsdl";

26 //看具体响应的WSDL中的namespace

27 String nameSpaceUri ="http://ws.exmaple.com/";

28

29 Service service = new Service();

30

31 Call call = (Call)service.createCall();

32 call.setTargetEndpointAddress(wsdlUrl);

33

34 //设置operation 名称,

35 call.setOperationName(new QName(nameSpaceUri, "order"));

36

37 //设置账户,注意参数为XSD_STRRING

38 call.addParameter("account", org.apache.axis.Constants.XSD_STRING,

39 ParameterMode.IN);

40

41 //设置账户,注意参数为XSD_LONG

42 call.addParameter("price", org.apache.axis.Constants.XSD_LONG,

43 ParameterMode.IN);

44

45 //设置返回类型为对象数组

46 call.setReturnClass(Object[].class);

47

48 Object[] result = (Object[]) call.invoke(new Object[]{"test","123456"});

49

50 System.out.println(result[0]);

51

52 }

53

54 }

常见异常:

1.org.xml.sax.SAXException: No deserializer for {http://www.w3.org/2001/XMLSchema}anyType

这个异常需要检查call.setReturnClass(); 中的类型,或者是setReturnType()

2. Unexpected wrapper element order found.

可以检查setOperationName中的QName参数,其中的NameSpace地址是不是有问题,或者operation名是否有误

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值