博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SAP和Java系统的Webservice实例
阅读量:6706 次
发布时间:2019-06-25

本文共 5080 字,大约阅读时间需要 16 分钟。

简介:

        关于Webservice的概念和原理,简单来讲,Webservice是一种基于SOAP传输协议,用WSDL描述,用XML封装数据的接口技术。由于其跨平台、跨防火墙、开发成本低、开发周期短等优势而被广泛应用,但也有局限性,包括传输负载大、没有统一的实现模型等。

        对于Webservice在SAP中的应用,多被用在系统同步要求高,数据传输负载小的接口开发上。下面以SAP系统和外部系统的交互为例,SAP ECC系统两个、外部系统一个(Java EJB3 Jboss5),分别讲述从SAP到SAP,SAP到Java,Java到Java,Java到SAP的Webservice实例。

一、SAP系统间的Webservice调用

SE37创建函数z_calculate,类型要设置为RFC类型,参数都设置为传值:

1 FUNCTION Z_CALCULATE. 2 *"---------------------------------------------------------------------- 3 *"*"Local interface: 4 *"  IMPORTING 5 *"     VALUE(NUMBER1) TYPE  STRING 6 *"     VALUE(NUMBER2) TYPE  STRING 7 *"     VALUE(OPERATOR) TYPE  STRING 8 *"  EXPORTING 9 *"     VALUE(RESULT) TYPE  STRING10 *"----------------------------------------------------------------------11   TRY .12       CASE operator.13         WHEN '+'.14           result = number1 + number2.15         WHEN '-'.16           result = number1 - number2.17         WHEN '*'.18           result = number1 * number2.19         WHEN '/'.20           result = number1 / number2.21         WHEN OTHERS.22           result = 'Not supported!'.23       ENDCASE.24     CATCH cx_root.25       result = 'Not supported!'.26   ENDTRY.27   CONDENSE result.28 ENDFUNCTION.

      把函数发布成Webservice

 

 

 

其他一路下来默认,完成后服务已经创建;接下来到SOAMANAGER中去找WSDL的URL,进入到Web service Administration界面,

Apply selection => Overview =>  ,在右边可以看到了。

 

接下来去SICF中找到服务的Endpoint地址

 

 

在浏览器中会得到地址:

 

下面进入到Webservice的Client端SAP系统,SE80创建代理类:

 

 

 

在URL栏位输入上面的WSDL的URL

 

激活代理类,然后LPCONFIG创建逻辑端口:

 

在URL栏位输入上面的Endpoint的URL

 

保存后激活,然后回到SE80 测试代理类:

 

 

已经成功的正确返回结果。也可以以代码的方式访问:

 

1 REPORT  zyincl_test_00. 2 DATA: go_proxy TYPE REF TO zco_zsap_calculate, 3       gs_input TYPE zzcalculate, 4       gs_output TYPE zzcalculate_response, 5       go_exception TYPE REF TO cx_ai_system_fault. 6 TRY. 7     CREATE OBJECT go_proxy. 8     gs_input-number1 = '3'. 9     gs_input-number2 = '7'.10     gs_input-operator = '*'.11     go_proxy->zcalculate(12       EXPORTING input = gs_input13       IMPORTING output = gs_output ).14     WRITE gs_output-result.15   CATCH cx_ai_system_fault INTO go_exception.16     WRITE go_exception->errortext.17 ENDTRY.

执行结果:

二、SAP系统调用EJB服务

准备好Eclipse的Java EE版、JDK1.5、Jboss5.0、Axis2。进入eclipse配置JRE和Jboss如下:

 

 

 

接下来创建一个EJB3的项目:

 

 

创建一个接口:

package org.clyde;

public interfaceICalculator {

Stringcalucate(String number1, String number2, String operator);

}

创建一个它的实现类:

package org.clyde;

importjavax.ejb.Remote;

importjavax.ejb.Stateless;

importjavax.jws.WebMethod;

importjavax.jws.WebService;

@Remote @Stateless@WebService

public classCalculatorImpl implements ICalculator {

@WebMethod

publicString calucate(String number1, String number2, String operator) {

Floatf1, f2, f3;

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!";

}

returnString.valueOf(f3);

}

}

 

部署到Jboss上:

 

WSDL的地址组合方式为:http:// + 应用服务器地址 + 端口 + 项目名 + 类名 + "?WSDL"

即:

 

根据此WSDL在SAP端创建代理类,配置方式跟SAP到SAP类似,只是在Lpconfig里面的URL也用当前的WSDL的URL。

 

 

 

保存激活后,返回到SE80测试:

 

结果如下:

ABAP代码的访问同SAP到SAP,这里不再演示。

 

三、SAP系统到Java系统

第一步中已经发布了一个SAP系统的webservice,要用到的两个地址,

WSDl地址:http://ecc.dev.jsepc.com.cn:8002/sap/bc/srt/wsdl /bndg_4E49EDE9E05800A2E1008000C0A80106/wsdl11/allinone/ws_policy/document?sap-client=200

Endpoint地址:

用Axis2的WSDL2Java工具,把上面的WSDL地址转化为Java类:

 

 

 

执行完后,能看到生成的类:

 

下面创建一个Java Project,写一个webservice的客户端

 

 

把生成的SRC下面的东西复制到当前项目的SRC下面:

 

 

导入后,刷新,发现有错误,这是因为还没有导入Axis2的jar包,依次导入:

 

 

然后写一个Client类,代码如下:

package org.clyde;

importjava.rmi.RemoteException;

importmc_style.functions.soap.sap.document.sap_com.ServiceStub;

importmc_style.functions.soap.sap.document.sap_com.ServiceStub.ZCalculate;

public class Client{

publicstatic void main(String[] args) throws RemoteException {

//代理类

ServiceStubstub = new ServiceStub(

""

+"/zsap_calculate/200/zsap_calculate/zsap_calculate?sap-client=200");

//准备输入

ZCalculateinput = new ZCalculate();

input.setNumber1("7");

input.setNumber2("3");

input.setOperator("-");

//调用并输出

System.out.println(stub.zCalculate(input).getResult());

}

}

给stub类的地址是上面提到的Endpoint地址,即SAP中SICF下测试服务的URL地址。

执行webservice调用,结果如下:

 

 

四、EJB系统到Java系统

java中访问webservice的方法有很多种,包括Stub方式、RPC方式、CXF方式等等,

下面还是以基于Axis2引擎的Stub方式实现:

上面已经发布了一个EJB的Webservice实例,

WSDL:http://localhost:8080/EJB001/CalculatorImpl?WSDL

同上,通过WSDL2JAVA 解析为本地类,然后编写客户端,代码如下:

packageorg.clyde;

importjava.rmi.RemoteException;

importorg.clyde.CalculatorImplServiceStub.Calucate;

importorg.clyde.CalculatorImplServiceStub.CalucateE;

publicclass Client_from_EJB {

publicstatic void main(String[] args) throws RemoteException {

//代理

CalculatorImplServiceStubstub =

newCalculatorImplServiceStub("http://localhost:8080/EJB001/CalculatorImpl?WSDL");

//准备输入

Calucateinput1 = new Calucate();

input1.setArg0("3");

input1.setArg1("8");

input1.setArg2("/");

CalucateEinput2 = new CalucateE();

input2.setCalucate(input1);

//调用并输出

System.out.println(stub.calucate(input2).getCalucateResponse().get_return());

}

}

运行结果如下:

到此,Webservice的四种交互方式都简单的做了实例分析。

转载于:https://www.cnblogs.com/ruingy/p/3539630.html

你可能感兴趣的文章
外媒分析富士康收购夏普的5大原因
查看>>
强强联手-赛迪中科数据中心联合实验室应运而生
查看>>
Web应用防火墙:必须拥有还是面临淘汰?
查看>>
码农的性能测试
查看>>
微软孵化平台筑“巢”南京
查看>>
我的第一个物联网项目:一份企业物联网项目指南
查看>>
安防迎来5G时代来临 是机遇还是挑战?
查看>>
中情局黑客武器库曝光,苹果安卓加密系统均被突破
查看>>
对Gogo不满 微软也来掺和飞机WiFi服务
查看>>
diy高手在民间
查看>>
国产IT彪起来了,后浪要将前浪拍死在沙滩上
查看>>
安防软件系统集成解决方案 想说爱你不容易
查看>>
《Tableau数据可视化实战》——1.7节连接其他数据库
查看>>
《C语言解惑》—— 1.1 中文字符以假乱真
查看>>
《Cisco局域网交换机配置手册(第2版•修订版)》一导读
查看>>
《Linux内核修炼之道》——1.3 获取内核源码
查看>>
阿里云前端周刊 - 第 12 期
查看>>
GNOME 3.26 将对控制中心进行大改进
查看>>
《CCNP ROUTE (642-902 )认证考试指南》一第1章 CCNP考试中的规划任务
查看>>
名落孙山之后, Edge 浏览器发布一大波新功能
查看>>