首页 > SAP > HANA > SMP3.0学习笔记之十七 与非SAP后端系统集成之SOAP WebServices篇
2019
08-27

SMP3.0学习笔记之十七 与非SAP后端系统集成之SOAP WebServices篇

上篇尝试使用SMP Integration
Gateway将后端的数据库table映射为SMP3.0可以消费的OData服务。这次我使用SMP Integration
Gateway将SOAP Webservice服务映射为SMP3.0可以消费的OData服务。

首先我使用Tomcat7.0+Axis2-1.6.2搭建了一个Webservice服务:

下载Tomcat7:
<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-17.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

查看其WSDL,并且保存成文件,以备后用(截图不全):

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-53.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

在浏览器中分别对上面的几个WebServices方法进行测试,确保WebService工作正常,例如获取airlineID=1的所有航班信息的SOAP返回结果如下:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-16.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

精确获取airlineID=1,
flightID=1
的航班信息的SOAP结果如下:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-96.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

下面的例子以上面的两个SOAP方法为例,将getFlights和getFlight两个SOAP服务映射为OData服务。


1. Ecplipse中创建一个OData
Service Implementation Project

项目名称为MyS2O:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-12.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

2. 这个Project中新建一个OData
Model
,名字为S2O.

在这个Model中增加2个Entities,Flight和Airline。Airline略去不表,

下面的工作主要以Flight实体为例说明如何将后端的getFlights和getFlight两个方法映射成OData
Flight的QUERY和READ操作。

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-10.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

3. QUERY的映射

QUERY就是在OData中可以获取一个实体的数据集的操作,通过QUERY可以使用filter操作进行过滤出自己想要的数据集。

首先映射Flight的QUERY:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-93.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-89.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

Endpoint:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-7.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

返回结果集映射好之后,需要使用java将OData的过滤条件转变为SOAP的过滤条件,比如下面的OData请求:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-43.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

此时会生成一个java 类:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-33.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

需要我们自己完成对过滤条件的提取与转换。我的代码是这样的:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-22.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

发布MyS2O项目到SMP
Integration Gateway,然后在Integration
Gateway Cockpit中将MyS2O服务激活。之后可以查看转换好的OData服务的metadata:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-31.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

之后测试一下如下URI:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-44.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

4. READ的映射

与QUERY不同的是,OData的READ操作可以精确获取某个指定实体的详细信息。例如类似下面的URI察看AirliineID=0,
FlightID=1 的航班信息。
<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-79.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

之后定义SOAP服务的返回结果与OData实体的对应关系:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-64.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

重新部署整个项目到Integration Gateway,并且在Integration
Gateway将服务激活。然后就可以使用如下URI

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124614-74.jpg" alt="SMP3.0学习笔记之十七与非SAP后端系统集成之SOAPWebServices篇” />

至此上面的这个例子完成了OData QUERY、READ操作与SOAP服务的映射。其他的Create,
Update和Delete也可以使用类似方法与SOAP服务进行映射。

使用Integration Gateway将SOAP服务映射成OData之后,就可以使用前面讨论的SMP Native OData
SDK或者SMP Kapsel开发所需要的移动应用并且通过SMP消费这些OData服务了。

最后编辑:
作者:yangsen
本站为个人博客网站,全由我个人维护,我从事SAP开发13年,其它ERP开发7年,基本都是零售行业。本站记录工作学习的过程, 有SAP相关询问专、兼职工作可随时联系我。 有网站相关的问题可直接在文章下方留言,或者联系我。 邮件:yan252@163.com给我。 QQ:415402519

留下一个回复

你的email不会被公开。