SAP如何调用JAVA
2017-09-27 13:44
274 查看
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,另一个是加减乘除运算
package def.pack;
public class HelloWorld {
public String SayHello (String UserName ) {
return "Hello" + UserName;
}
}
package org.clyde;
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程序后就先放在这里,接下来在分享盘中下载
org.apache.axis2.eclipse.codegen.plugin_1.7.6.jarorg.apache.axis2.eclipse.service.plugin_1.7.6.jar
(1)这两个文件下载好后,放在你安装eclipse目录下eclipse\dropins文件夹中,然后重新启动eclipse你会发现File->new->other会多一项axis2 wizards文件。
(2)右键一个java文件出现File->new->other->Axis2 Service Archiver之后出现以下界面,选择你的工程目录下的classes文件夹就可以了。
(3)点击next
(4)点击next
(5)点击next
(6)随便取名Service name 但是class name 是包名.class名;点击load会加载出里面的方法。
(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的设置都已经设置好了。
![](https://img-blog.csdn.net/20170927163119778<br/>ad8b<br/>?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ2hhcm1lYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(2)点击高级设置,入栈规则,新建规则,选择端口(3)选择TCP,端口填写8080
(4)然后一直next到完成,在局域网别的电脑输入
http://你的ip:8080/axis2/services/CalculatorImpl?wsdl也会出现webservice服务。
到目前为止,java服务端已经做好了,接下来就开始做SAP服务端了。
二、 SAP如何调用Webservice
因为在SAP中的se80创建代理类时出现访问权限问题,若你的SAP可以创建代理类,则可以看一下此博客的方法:http://www.cnblogs.com/ruingy/p/3539630.html,当然其中的URL换成http://你的ip:8080/axis2/services/CalculatorImpl?wsdl就可以了,如果不能创建,那就接下来向向下看吧。1、使用PHP作为桥梁帮SAP传参数
(1)创建PHP函数建议使用sublime编写,或者你直接建一个txt文件将程序写在里面,然后保存为名字点PHP;在云盘中下载Wampserver安装作为php的运行环境。<?php
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))//或者这样调用也可以
?>
(2)将上面所写的文件放在wampsever的安装目录WWW下,启动wampsever,当变绿色了就在浏览器输入http://localhost/文件名点php?number1=1&number2=2&operator=/就可以访问了。访问结果应是0.5
(3)如果你想使用别的计算机中也可以访问本地的php文件需要修改wampsever一下参数。一下两个Conf文件都需要修改
httpd.conf的修改是:(这里我将其他的备注# 都删除了。红色是已改的地方)
<Directory />
AllowOverride none
Require all granted
</Directory>
<Directory "${INSTALL_DIR}/www/">
AllowOverride all
Require all Granted
</Directory>
httpd-vhosts.conf的修改是:
<Directory "${INSTALL_DIR}/www/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
改完之后重新启动wampsever你就可以在局域网访问http://你的IP/文件名点php?number1=1&number2=2&operator=/
2、SAP如何调用PHP
打开SE38创建一个程序代码为一下:REPORT ZWEB.
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.
这就连通SAP掉用JAVA的全部路径。
相关文章推荐
- PHP 如何调用 JAVA 类库
- 如何在Java中调用dll(一)
- 如何在C/C++中调用Java的方法
- java 如何调用window开发的dll文件
- Java如何通过VC调用VB编写的COM
- 请教:在java中如何实现线程的函数互斥调用,用synchronized好像实现不了
- JAVA如何调用.NET开发的WebService
- webservice系列教学(4)-如何调用webservice(pb,java)
- 如何在C/C++中调用Java
- 【java.lang】〖Runtime〗如何正确地应用Runtime类调用程序
- 如何用java调用linux操作系统下的命令行
- java编译好的class文件如何在jsp页面中调用
- java中如何使用JNI调用C++写的函数
- PHP如何调用JAVA 类库
- Java如何调用外部exe程序
- Java如何调用可执行文件和批处理命令
- 如何在C/C++中调用Java的方法
- Java如何调用外部命令?
- java中如何调用.bat程序
- 如何调用JavaBean