axis2 java.net.url_axis,axis2调用.net的webservice

[由于最近做的一个项目需要与SAP通过WebServices进行接口传输数据。所以花时间去研究了一下当前的两种WebServices框架(axis2和XFire)。期间还是碰上了不少的异常, 现在就一今天一个朋友咨询java调用.net的webservice功能,折腾了2个小时,也都折腾出来了,贴出来,希望用到的朋友少走弯路

1、axis调用.net的webservice

package test;

import java.net.URL;

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.encoding.XMLType;

import javax.xml.rpc.ParameterMode;

public class Test {

public static void test() throws Exception{

Service service = new Service();

Call call = null;

try {

call = (Call) service.createCall();

call.setTargetEndpointAddress(new URL("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"));

call.setOperationName(new QName("http://WebXml.com.cn/","getWeatherbyCityName"));

call.addParameter(new QName("http://WebXml.com.cn/", "theCityName"),XMLType.SOAP_VECTOR,ParameterMode.IN);

call.setReturnType(XMLType.SOAP_VECTOR);

call.setUseSOAPAction(true);

call.setSOAPActionURI("http://WebXml.com.cn/getWeatherbyCityName");

System.out.println(call.invoke(new Object[]{"广州"}));

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* @param args

*/

public static void main(String[] args) throws Exception{

test();

}

}

2、axis2调用.net的webservice

axis2调用不需要写那么多,按照下面的步骤,一步一步来,简单你都想象不到

1、下载axis2(到apache官网下载www.apache.org)

2、我下载的是axis2-1.5-bin.zip,解压到当前文件夹

3、进入bin目录(F:\study\java\service\axis2\axis2-1.5\bin)

4、打开cmd,进入第3步的bin目录,输入wsdl2java.bat -uri http://www.webxml.c

om.cn/WebServices/WeatherWebService.asmx?wsdl,回车

5、之后会在bin目录下生成一个src目录,将src目录下的两个类考到eclipse开发目录下

6、建一个测试类Test,代码如下

import cn.com.webxml.WeatherWebServiceStub;

import cn.com.webxml.WeatherWebServiceStub.ArrayOfString;

import cn.com.webxml.WeatherWebServiceStub.GetWeatherbyCityName;

public class Test {

public static void test1(){

try{

WeatherWebServiceStub stub = new WeatherWebServiceStub();

stub._getServiceClient().getOptions().setProperty(

org.apache.axis2.transport.http.HTTPConstants.CHUNKED,

Boolean.FALSE);

GetWeatherbyCityName city = new GetWeatherbyCityName();

city.setTheCityName("广州");

ArrayOfString array = stub.getWeatherbyCityName(city).getGetWeatherbyCityNameResult();

String[] str = array.getString();

for(String s : str){

System.out.println(s);

}

}catch(Exception e){

e.printStackTrace();

}

}

/**

* @param args

*/

public static void main(String[] args) throws Exception{

test1();

}

}

需要注意的是这个类 GetWeatherbyCityName,这个本来是.net webservice中的一个方法,如下

POST /WebServices/WeatherWebService.asmx HTTP/1.1

Host: www.webxml.com.cn

Content-Type: text/xml; charset=utf-8

Content-Length: length

SOAPAction: "http://WebXml.com.cn/getWeatherbyCityName"

string

用axis2生成java代码后,[JAVA使用AXIS2调用asp.net的WebService]会自动生成一个对应的对象,webservice需要传递的参数,可以通过对这个对象赋值操作完成,如上面,我要查广州的天气,就设置为city.setTheCityName("广州");

注意,关键的地方

由于.net webservice中返回的是ArrayOfString,java中没有这个对象,所以axis2会自动生成这个对象,然后转换成对应的数组即可,如String[] str = array.getString();在axis版本中,使用的是返回类型,但是返回类型设置其他的比如String等都会报错,只能设置成VECTOR,即call.setReturnType(XMLType.SOAP_VECTOR),如果只返回一个字符串,可以直接使用STRING;这样才能确保返回正确。

比较两个版本,还是觉得axis2使用方便

[前面已经记录过通过axis调用webservice,昨天在对接.NET接口时,发现在传递参数时和一般的传参方法是不一样的,在接口方哥们的帮助下解决了。哈哈。]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值