设为首页 收藏本站
查看: 1116|回复: 0

[经验分享] SAP和Java系统的Webservice实例

[复制链接]

尚未签到

发表于 2015-9-20 03:33:14 | 显示全部楼层 |阅读模式
  简介:
  关于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  STRING
10 *"----------------------------------------------------------------------
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
DSC0000.gif
  
DSC0001.gif
  
DSC0002.gif
  
  其他一路下来默认,完成后服务已经创建;接下来到SOAMANAGER中去找WSDL的URL,进入到Web service Administration界面,
  Apply selection => Overview =>  Displayselected Binding's WSDL URL,在右边可以看到了。
DSC0003.gif
  
  接下来去SICF中找到服务的Endpoint地址
DSC0004.gif
  
DSC0005.gif
  
  在浏览器中会得到地址:
DSC0006.gif
  
  下面进入到Webservice的Client端SAP系统,SE80创建代理类:
DSC0007.gif
  
DSC0008.gif
  
DSC0009.gif
  
  在URL栏位输入上面的WSDL的URL
DSC00010.gif
  
  激活代理类,然后LPCONFIG创建逻辑端口:
DSC00011.gif
  
  在URL栏位输入上面的Endpoint的URL
DSC00012.gif
  
  保存后激活,然后回到SE80 测试代理类:
DSC00013.gif
  
DSC00014.gif
  
  已经成功的正确返回结果。也可以以代码的方式访问:
  



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_input
13       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.
  执行结果:
DSC00015.gif
  二、SAP系统调用EJB服务
  准备好Eclipse的Java EE版、JDK1.5、Jboss5.0、Axis2。进入eclipse配置JRE和Jboss如下:
  
DSC00016.gif
  
DSC00017.gif
  
  接下来创建一个EJB3的项目:
DSC00018.gif
  
DSC00019.gif
  
  创建一个接口:
  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);
  }
  }
DSC00020.gif
  
  部署到Jboss上:
DSC00021.gif
  
  WSDL的地址组合方式为:http:// + 应用服务器地址 + 端口 + 项目名 + 类名 + "?WSDL"
  即:http://localhost:8080/EJB001/CalculatorImpl?WSDL
DSC00022.gif
  
  根据此WSDL在SAP端创建代理类,配置方式跟SAP到SAP类似,只是在Lpconfig里面的URL也用当前的WSDL的URL。
DSC00023.gif
  
DSC00024.gif
  
DSC00025.gif
  
  保存激活后,返回到SE80测试:
DSC00026.gif
  
  结果如下:
DSC00027.gif
  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地址:http://ecc.dev.jsepc.com.cn:8002/sap/bc/srt/rfc/sap/zsap_calculate/200/zsap_calculate/zsap_calculate?sap-client=200
  用Axis2的WSDL2Java工具,把上面的WSDL地址转化为Java类:
DSC00028.gif
  
  
DSC00029.gif
  
  执行完后,能看到生成的类:
DSC00030.gif
  
  下面创建一个Java Project,写一个webservice的客户端
DSC00031.gif
  
  
  把生成的SRC下面的东西复制到当前项目的SRC下面:
  
DSC00032.gif
  
  导入后,刷新,发现有错误,这是因为还没有导入Axis2的jar包,依次导入:
DSC00033.gif
  
DSC00034.gif
  
  然后写一个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(
  "http://ecc.dev.jsepc.com.cn:8002/sap/bc/srt/rfc/sap"
  +"/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调用,结果如下:
DSC00035.gif
  
  
  四、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());
  }
  }
  运行结果如下:
DSC00036.gif
  到此,Webservice的四种交互方式都简单的做了实例分析。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115953-1-1.html 上篇帖子: SAP标准名词解释 下篇帖子: 『转』SAP模块介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表