SAP调用JAVA
前言:eclipse中的JBOSS可以发布webservice,但是缺点是关闭eclipse,webservice服务就没有了,并且局域网中不可以访问。对于SAP中必须要局域网访问webservice才可以实现调用java,所以本文就是一个成功真正的从sap链接java的方法所走联通路的记录,笔者在此希望各位有此方面需求的程序员少走弯路,所以在此分享我的经验。若有不足和更好的方法,希望给我留言,我们共同探讨,谢谢。
下图为方法的总体思路。
如果SAP中无权限创建代理类,则也可以使用一下思路。
一、JAVA脱离eclipse发布局域网的webservice,作为服务端。
1、用eclipse创建java程序,并发布webservice.
下载eclipse——jee版本,http://pan.baidu.com/s/1qXVO6de 密码:yd08;这里面有eclipse可以下载使用
记得先前需要配置电脑JDK与JRE的java运行环境,这里就不做过多解释。
(1)打开eclipse创建web工程如下图所示:File->new->other->web->Dynamic Web Project .
(2)创建包在src里面
(3)创建一个class
(4)这里在里面写入了两个方法,一个是sayhello,另一个是加减乘除运算
public class HelloWorld {
public String SayHello (String UserName ) {
return "Hello" + UserName;
}
}
public class CalculatorImpl {
public String calucate(String number1, String number2, String operator) {
Float f1, f2, f3 = null;
try{
f1= Float.parseFloat(number1);
f2= Float.parseFloat(number2);
switch(operator.charAt(0)) {
case'+':
f3= f1 + f2;
break;
case'-':
f3= f1 - f2;
break;
case'*':
f3= f1 * f2;
break;
case'/':
f3= f1 / f2;
break;
default:
return"Not supported!";
}
}catch (Exception e) {
return"Not supported!";
}
return String.valueOf(f3);
}
}
2、写好eclipse程序后就先放在这里,接下来在分享盘中下载
(7)点击next;output file...你就选择桌面吧。
(8)点击finish你就会发现桌面出现了一个aar文件,这里就先放在这吧。
3、在云盘中有apache-tomcat-8.5.20.zip服务器这里面我都配置好了,你直接下下来解压你就放在C\盘下吧(其实那个盘都无所谓)。
(1)打开cmd
输入:cd C:\apache-tomcat-8.5.20\bin 回车
再输入:service.bat install 回车即可,则tomcat服务器安装成功
(2)将刚才生成的arr文件放到C:\apache-tomcat-8.5.20\webapps\axis2\WEB-INF\services的文件夹下
(3)启动tomcat服务器:点击C:\apache-tomcat-8.5.20\bin\tomcat8w.exe,点击start就好了。
(4)在浏览器中输入http://localhost:8080/axis2/services/CalculatorImpl?wsdl就可以看见你发布的webservice
4、局域网中的其他电脑访问你的http://你的ip:8080/axis2/services/CalculatorImpl?wsdl
是访问不到的,如果想其他电脑访问,这需要进行一下设置开放8080端口,关于tomcat的设置都已经设置好了。
(2)点击高级设置,入栈规则,新建规则,选择端口
(3)选择TCP,端口填写8080
(4)然后一直next到完成,在局域网别的电脑输入
http://你的ip:8080/axis2/services/CalculatorImpl?wsdl也会出现webservice服务。
到目前为止,java服务端已经做好了,接下来就开始做SAP服务端了。
二、 SAP如何调用Webservice
1、使用PHP作为桥梁帮SAP传参数
ini_set('soap.wsdl_cache_enabled','0');//关闭缓存
$soap = new SoapClient('http://你的IP:8080/axis2/services/CalculatorImpl?wsdl');
$number1 = isset($_GET["number1"]) ? $_GET["number1"] : ' ' ;
$number2 = isset($_GET["number2"]) ? $_GET["number2"] : ' ';
$operator = isset($_GET["operator"]) ? $_GET["operator"] : ' ';
$pamer = array('number1' => $number1 , 'number2' => $number2 ,'operator' => $operator);
$over = $soap->calucate($pamer);
//print_r($over) ;
echo $over->return;
//echo $soap->_soapCall('Add',array(1,2))//或者这样调用也可以
?>
AllowOverride none
Require all granted
</Directory>
<Directory "${INSTALL_DIR}/www/">
AllowOverride all
Require all Granted
</Directory>
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
2、SAP如何调用PHP
DATA : url TYPE string.
DATA : http_client TYPE REF TO if_http_client.
DATA: content TYPE xstring. "16进制返回值
DATA : l_content_length TYPE i.
DATA: str TYPE string,
l_con TYPE REF TO cl_rpe_convert.
DATA number1 TYPE c.
DATA number2 TYPE c.
DATA operator TYPE c.
START-OF-SELECTION.
CREATE OBJECT l_con.
number1 = '1'. "三个参数
number2 = '2'.
operator = '*'.
CONCATENATE 'http://132.147.248.16/website/diaoyong.php?number1=' number1 '&number2=' number2 '&operator=' operator INTO url. "地址嵌入参数
CALL METHOD cl_http_client=>create_by_url "调用php函数
EXPORTING
url = url
IMPORTING
client = http_client "生成新客户端
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc = 0.
http_client->send( ). "传参数
http_client->receive( )."返回值
content = http_client->response->get_data( ). "返回的数据值
http_client->close( ).
CALL METHOD l_con->xstring_to_string "将16进制转换为字符串
EXPORTING
input = content
IMPORTING
output = str.
IF sy-subrc = 0.
write:str.
ENDIF.
ENDIF.