上篇尝试使用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服务了。