一、开发环境
IDE:Eclipse IDE for Enterprise Java Developers 2018-12; SDK:jdk 1.8; Server:tomcat 8.0; Web services engine:axis2 1.7.8;
二、Axis2环境配置
官网下载axis2的支持包,下载地址 ,如果只是调用Web Service,不开发Web Service的话,只需要下载Binary distribution的包就可以; 解压支持包,在环境变量的系统变量中新建变量 AXIS2_HOME ,值为axis2包解压后的路径,比如 D:\axis2-1.7.8;在Path变量中加上 ;%AXIS2_HOME%\bin 在Eclipse中,点击Windows→Preferences→Web Service→Axis2 Preferences,Axis2 runtime location设置为axis2 包的路径,点击应用(Apply),显示Axis2 runtime loaded succesfully表示配置完成;
三、开发
根据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文件放到项目对应的包中。在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包导入到项目中。编写代码 jar包引入,Web Service客户端文件没有报错后,可以开始编写代码了: 在写代码前再次打开浏览器,输入Web Service的地址,找到调用方法的xml段,一般在最下面,实际调用方法需要该方法对应的url地址,标签名为soap:address location
Authenticator auth = new Authenticator ( ) ;
auth. setUsername ( "UserName" ) ;
auth. setPassword ( "PassWord" ) ;
String url = "http://192.168.xx.xx:8003/sap/bc/srt/rfc/sap/do_some_thing/888/do_some_thing/do_some_thing" ;
DO_SOME_THINGStub stub;
try {
stub = new DO_SOME_THINGStub ( url) ;
stub. _getServiceClient ( ) . getOptions ( ) . setProperty ( HTTPConstants. AUTHENTICATE, auth) ;
stub. _getServiceClient ( ) . getOptions ( ) . setProperty ( Configuration. CHARACTER_SET_ENCODING, "utf-8" ) ;
stub. _getServiceClient ( ) . getOptions ( ) . setProperty ( Configuration. HTTP_METHOD, HTTPConstants. HTTP_METHOD_POST) ;
DO_SOME_THINGStub. DoSomeThing doSomeThing = new DO_SOME_THINGStub. DoSomeThing ( ) ;
DO_SOME_THINGStub. String ivData = new DO_SOME_THINGStub. String ( ) ;
String str = "要传的参数" ;
ivData. setString ( str) ;
doSomeThing. setIvData ( ivData) ;
DO_SOME_THINGStub. DoSomeThingResponse res = new DO_SOME_THINGStub. DoSomeThingResponse ( ) ;
res = stub. DoSomeThing ( doSomeThing) ;
System. out. println ( "【返回信息:】" + res. getEvOut ( ) . getString ( ) ) ;
} catch ( AxisFault e) {
e. printStackTrace ( ) ;
}