用Axis2生成客户端的方式调用SAP带用户验证的WebService

一、开发环境

  1. IDE:Eclipse IDE for Enterprise Java Developers 2018-12;
  2. SDK:jdk 1.8;
  3. Server:tomcat 8.0;
  4. Web services engine:axis2 1.7.8;

二、Axis2环境配置

  1. 官网下载axis2的支持包,下载地址,如果只是调用Web Service,不开发Web Service的话,只需要下载Binary distribution的包就可以;
  2. 解压支持包,在环境变量的系统变量中新建变量 AXIS2_HOME ,值为axis2包解压后的路径,比如 D:\axis2-1.7.8;在Path变量中加上 ;%AXIS2_HOME%\bin
  3. 在Eclipse中,点击Windows→Preferences→Web Service→Axis2 Preferences,Axis2 runtime location设置为axis2 包的路径,点击应用(Apply),显示Axis2 runtime loaded succesfully表示配置完成;在这里插入图片描述

三、开发

  1. 根据Web Service生成客户端
    SAP提供的Web Service地址与一般情况下以wsdl为结尾的地址不太一样,比如http://192.168.xx.xx:8003/sap/bc/srt/wsdl/flv_10002A111AD1/srvc_url/sap/bc/srt/rfc/sap/do_some_thing/888/do_some_thing/do_some_thing?sap-client=888,后面没有以wsdl结尾;
    先打开浏览器,访问Web Service地址,输入用户验证的账号密码后会以XML的形式展示Web Service 的相关信息,右击网页空白处,另存为,修改文件后缀名xml 为 wsdl,然后保存;在这里插入图片描述
    以管理员身份运行命令提示符,进入axis2包的bin目录下,运行命令
    wsdl2java -uri do_some_thing.wsdl(刚刚在浏览器另存为的wsdl文件的路径) -p www.xxx(包名) -o (生成的客户端文件存放位置)
    注意,包名一定要与在项目中存放生成的Web Service文件的包名相同,以下示例在这里插入图片描述
    运行成功后在D:\ws目录下可以找到生成的Web Service客户端类文件,文件类型为java,将java文件放到项目对应的包中。
  2. 在Eclipse中导入axis2的开发jar包
    我这里将java文件放入项目之中后,发现有报错,推测是项目没有导入axis2相关的jar包导致的,这里用了一个取巧的办法,点击File→New→Other→Web Service Client创建Web Service客户端,填入SAP提供的Web Service地址,Web service runtime选择Apache Axis2,点击完成(Finish),应该会出现错误而无法创建客户端,但是Eclipse会将相关的jar包导入到项目中。
  3. 编写代码
    jar包引入,Web Service客户端文件没有报错后,可以开始编写代码了:
    在写代码前再次打开浏览器,输入Web Service的地址,找到调用方法的xml段,一般在最下面,实际调用方法需要该方法对应的url地址,标签名为soap:address location在这里插入图片描述
// 配置验证信息
Authenticator auth = new Authenticator();
auth.setUsername("UserName");// 账号
auth.setPassword("PassWord");// 密码

// 刚刚在浏览器找到的调用Web Service方法对应的url
String url = "http://192.168.xx.xx:8003/sap/bc/srt/rfc/sap/do_some_thing/888/do_some_thing/do_some_thing";

// 定义stub类实例
DO_SOME_THINGStub stub;
try {
	stub = new DO_SOME_THINGStub(url);
	// 添加用户验证信息到请求头
	stub._getServiceClient().getOptions().setProperty(HTTPConstants.AUTHENTICATE,auth);
	// 设置编码为UTF-8
	stub._getServiceClient().getOptions().setProperty(Configuration.CHARACTER_SET_ENCODING,"utf-8");
	// 设置请求方式为POST
	stub._getServiceClient().getOptions().setProperty(Configuration.HTTP_METHOD,HTTPConstants.HTTP_METHOD_POST);
	
	DO_SOME_THINGStub.DoSomeThing doSomeThing = new DO_SOME_THINGStub.DoSomeThing();
	// 实例化一个WebService客户端定义的String类,我这个接口需要传一个json字符串,该类提供了一个setString方法,可以传java.lang.String
	DO_SOME_THINGStub.String ivData = new DO_SOME_THINGStub.String();
	// 赋值
	String str = "要传的参数";
	ivData.setString(str);
	doSomeThing.setIvData(ivData);
	
	// 返回类,接收Web Service的返回信息
	DO_SOME_THINGStub.DoSomeThingResponse res = new DO_SOME_THINGStub.DoSomeThingResponse();
	// 调用WebService方法,返回对象res
	res = stub.DoSomeThing(doSomeThing);
	
	System.out.println("【返回信息:】" + res.getEvOut().getString());
	// 调用完成
} catch (AxisFault e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值