Java通过Axis2调用SAP的Webservice

你。 提交于 2020-02-29 15:38:19

1、设置环境变量 AXIS2_HOME = D:\JAVA\axis2\axis2-1.6.2 2、下载工具:(1.6.2生成的代理类存在BUG,建议用1.5.1版本) Eclipse:http://www.eclipse.org/downloads/ Tomcat:http://tomcat.apache.org/ Axis:http://axis.apache.org/axis2/java/core/download.cgi axis2-war:http://axis.apache.org/axis2/java/core/tools/index.html axis2-eclipse-codegen-plugin:http://axis.apache.org/axis2/java/core/tools/index.html axis2-eclipse-service-plugin:http://axis.apache.org/axis2/java/core/tools/index.html 安装JDK不用多说了吧。 3、安装Eclipse插件: axis2-eclipse-codegen-plugin和axis2-eclipse-service-plugin是Eclipse的插件,分别解压在Eclipse的根目录就可以了。 注意:Axis2 1.6.2有个BUG,需要添加两个额外的Jar放在eclipse\dropins目录下: org.apache.axis2.eclipse.codegen.plugin_0.0.0.SNAPSHOT.jar org.apache.axis2.eclipse.service.plugin_0.0.0.SNAPSHOT.jar 下载地址: https://repository.apache.org/content/groups/snapshots/org/apache/axis2/axis2.eclipse.service.plugin/SNAPSHOT/ https://repository.apache.org/content/groups/snapshots/org/apache/axis2/axis2.eclipse.codegen.plugin/SNAPSHOT/

4、在SAP端发布Webservice(之前我写过相关文档,发布Web服务的细节这里就不在赘述了)

5、得到WSDL文件的地址,并保存为本地文件以wsdl作为文件扩展名 http://r3ids01:8000/sap/bc/srt/wsdl/bndg_534F90D9B51D4480E10080000A3F001C/wsdl11/allinone/ws_policy/document?sap-client=800

6、在eclispe 的package Explorer 中点击右键,在菜单中选择新建--->other--->Axis2 Code Generator

7、点击next,进入下一个页面,选择从wsdl文件来产生java文件。

8、点击next,然后选择wsdl文件,注意此处选之前保存到本地的WSDL地址

9、点击next,进入设置页面,这里我们就用默认的设置。

10、点击next,选择输出文件的路径。

11、点击finish,如果看到这个页面,恭喜你已经生成代码成功。

注意:有时候SAP发布的Web服务的WSDL文件中Policy节点无法识别,此时在WSDl文件中将其注释即可:

12、已经生成代理类源码

13、在Eclipse中新建项目,将生成的这两个加载源码里,你会惊喜的发现,著名的小红叉一个接一个的,这是因为没有axis2的类包。我们可以在下载的axis2-1.6.2-bin中找到lib包,把其中的jar都加入我们的工程中。有可能还是少Jar包,就在www.findjar.com 找吧。然后重新编译一下工程,这时我们发现SimpleServerStub还是有几个小红叉。这个是因为这个插件有个小bug。生成的代码没有实现序列化方法。我们可以自己来加上,在小红叉上点一下,弹出一个小菜单,选择Add unimplemented methods。

14、编写调用的代码

运行并返回结果

大功告成

测试类代码

package mc_style.functions.soap.sap.document.sap_com;

import java.rmi.RemoteException;

import org.apache.axis2.Constants.Configuration; import org.apache.axis2.transport.http.HTTPConstants; import org.apache.axis2.transport.http.HttpTransportProperties;

public class ServiceTest {

//用axis2-eclipse-codegen-wizard生成Java代码,不能解析WSDl文件的Policy节点,需要手工删掉Policy节点
public static void main(String[] args) throws RemoteException {
	ServiceStub stub = new ServiceStub();
	//设置用户名密码
	HttpTransportProperties.Authenticator basicAuth = new HttpTransportProperties.Authenticator();
	basicAuth.setUsername("hh_zhaowei");
	basicAuth.setPassword("zhaowei");
	stub._getServiceClient().getOptions().setProperty(HTTPConstants.AUTHENTICATE, basicAuth);
	stub._getServiceClient().getOptions().setProperty(Configuration.CHARACTER_SET_ENCODING, "GBK");
	stub._getServiceClient().getOptions().setTimeOutInMilliSeconds(300 * 1000);
	stub._getServiceClient().getOptions().setProperty(Configuration.HTTP_METHOD, HTTPConstants.HTTP_METHOD_POST);

	ServiceStub.ZwfmTest01 in = new ServiceStub.ZwfmTest01();//输入
	ServiceStub.ZwfmTest01Response out = new ServiceStub.ZwfmTest01Response();//输出

	in.setInput("zhaow");//设置输入数据
	out = stub.zwfmTest01(in);//调用
	System.out.println(out.getOutput());//接收返回结果
}

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!