用axis调用webservice

本人测试过的小demo,用axis调用webservice实现,下面为代码:

服务端方法代码为:

public String handler(String name){
		return "我的名字是:"+name;
	}

客户端调用代码为:

public static void main(String[] args) {
		try{

			String url = "http://localhost:9001/Service/ServiceTest.jws?wsdl";
			String space = "http://service.zhan.com/";
			
			Service service = new Service();
			Call call = (Call) service.createCall();
			call.setTargetEndpointAddress(new java.net.URL(url));
			call.setUseSOAPAction(true);
			call.setOperationName(new QName(space,"handler"));
			call.addParameter(new QName(space,"name"), XMLType.XSD_STRING, ParameterMode.IN);
			call.setReturnType(XMLType.XSD_STRING);
			String response = (String) call.invoke(new Object[]{"Brookes"});

			System.out.println("return value is: " + response);
			
		}catch (Exception ex){ 
			ex.printStackTrace();
		}
	}

结果一运行结果为:return value is: 我的名字是:null  //方法是调通了,但是没有接收到哦参数,。。

后来研究出来了:把call.addParameter(new QName(space,"name"), XMLType.XSD_STRING, ParameterMode.IN);修改为

call.addParameter("arg0", XMLType.XSD_STRING, ParameterMode.IN); 就可以了。

运行后结果为:return value is: 我的名字是:Brookes

 

这是为什么呢?

结合SoapUI分析发现,如果jws通过annotation来发布,或者类似方式,通过axis调用,需要注意两点:
1)在call.setOperationName是必须通过Qname来制定namespaceURI
2)在设定参数时,不使用服务端定义的参数名,而是arg0~argN来定义,也不需制定namespaceURI,

为什么服务端的参数好端端的变为arg0-arg9呢,参数变了很不好啊。服务端需要写什么来解决这个问题啊?

方法如下:
   到 WebRoot/WEB-INF/wsdl下,找到你项目对应的****.xsd文件,将其中arg0-arg9改成您对应的接口参数名。

 



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猩猩之火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值