1、SAP发布Webservice
(1)、在SAP系统中输入TCDE:SE37创建函数Z_CALCULATE
需要先按下图创建功能组,名称为:Z_CALCULATE_GROUP
(2)、设置属性如下图,注意:Processing Type必须为RFC
(3)、RFC相关参数设置为:
(4)、源代码为:
(5)、保存并**(属性一定要设置为RFC), 把函数发布成Webservice:
键入刚才创建的Function module名称:
后续一直按默认配置即可,完成后服务已经创建;接下来输入TCODE:SOAMANAGER,会打开一个网页(如果打不开,网络上有解决教程),选择“Web service Administration界面“,点击第一个"Single Service Administration"如下图所示:
Apply selection => Overview => Display selected Binding's WSDL URL,在右边可以看到WSDL的URL了。
接下来TCODE:SICF中找到服务的Endpoint地址:
在浏览器中会得到地址:
2、JAVA 调用SAP Web service
(1)、wsimport 生成java代码
使用java自带的编译器可以很简单帮你生成该wsdl文档下的java框架。原理很简单,wsdl包括了接口文档信息,只要把wsdl的文件给wsimport就可以生成java文件
a、在java安装环境下找到jdk的bin目录下有一个wsimport.exe的工具,
b、使用该工具可以根据wsdl地址生成java的客户端代码。在CMD中键入命令如下:
wsimport -d E:\data\soap -keep -verbose -Xauthfile E:\data\soap\11.txt http://XXXXXXX
命令参数说明:
-d: 生成客户端执行类的class文件的存放目录
-s: 生成客户端执行类的源文件的存放目录
-p: 定义生成类的包名
- http://XXXXXXX:为sap生成WSDL的URL
其中11.txt里填写wsdl地址:http://账号:密码@XXXXXXX
(在java环境下创建了一个名为TestClient的java project,找到TestClient磁盘路径,在src下新建11.txt文件)
CMD我键入的命令为:wsimport -d D:\eclipse-workspace\Testclient\src -keep -verbose -Xauthfile D:\eclipse-workspace\Testclient\src\11.txt http://xxxxxxx
此时,CMD状态如下:
完成后,在D:\eclipse-workspace\Testclient\src下会生成几个文件,如图:
c、到java中的TestClient工程下可看见:(建立package:org.clyde,在包内建立Class,名为:Client)
Client.java中的内容如下所示:
package org.clyde;
import java.rmi.RemoteException;
import com.sap.document.sap.soap.functions.mc_style.ZSAPCALCULATEService;
public class Client {
public static void main(String[] args) throws RemoteException {
ZSAPCALCULATEService zs = new ZSAPCALCULATEService();
System.out.println("-----------------------------------------");
System.out.println(zs.getZSAPCALCULATE().zCalculate("7","4", "*"));
}
}
选择Client.java文件并运行即可。
若运行结果报错无法访问位于以下位置的 WSDL: http://XXXX(401需要授权)如下:
则需在ZSAPCALCULATEService.java文件添加以下代码(增加用户名和密码):
URL url = null;
try {
url = new URL("YOUR_WSDL_URL");
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("YOUR_USERNAME","YOUR_PASSWORD".toCharArray());
}
});
}catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}
经测试,运行成功: