加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 23:49:29 所属栏目:安全 来源:网络整理
导读:作者:穿行印象 http://blog.sina.com.cn/s/blog_7a9486880101qr6k.html 上篇尝试使用SMP Integration Gateway将后端的数据库table映射为SMP3.0可以消费的OData服务。这次我使用SMP Integration Gateway将SOAP Webservice服务映射为SMP3.0可以消费的OData服

作者:穿行印象

http://blog.sina.com.cn/s/blog_7a9486880101qr6k.html


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

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

下载Tomcat7:
http://tomcat.apache.org/download-70.cgi
apache-tomcat-7.0.47.exe
安装Tomcat,端口号8888。

下载AXIS2:
http://axis.apache.org/axis2/java/core/download.cgi
axis2-1.6.2-war.zip
axis2-1.6.2-bin.zip

将axis2-1.6.2-war.zip解压之后的axis2.war放到tomcat的webapps目录下,之后使用可以使用如下URL测试AXIS2是否部属成功:
http://192.168.174.129:8888/axis2/

?????之后我写了一个简单的Webservice服务:?MyAirlineService,其暴露的SOAP方法如下所示:


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



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

http://localhost:8888/axis2/services/MyAirlineService/getFlights?airlineID=1



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

http://localhost:8888/axis2/services/MyAirlineService/getFlight?airlineID=1&flightID=1



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

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

?????项目名称MyS2O:



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

?????在这个Model中增加2EntitiesFlightAirlineAirline略去不表,?下面的工作主要以Flight实体为例说明如何将后端的getFlightsgetFlight两个方法映射成OData FlightQUERYREAD操作。



3. QUERY的映射

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

????首先映射Flight的QUERY:





Endpoint:

http://localhost:8888/axis2/services/MyAirlineService.MyAirlineServiceHttpSoap12Endpoint/

Namespace:

http://axis2test.sap.com

Operation:

getFlights

PortType:

MyAirlineServicePortType

这些信息在SOAP的WSDL中可以找到。

?

??????SOAP返回的XML的对象属性需要与OData实体的属性有映射,这样才能把SOAP的结果转变为OData格式。SAP GWPA Eclipse插件可以通过拖拽的方式完成这个映射,例如我的getFlights SOAP?结果与OData实体Flight之间的映射关系如下:



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

http://localhost:8080/gateway/odata/sap/MyS2O;v=1/FlightSet?$filter=AirlineID?eq 1

需要将后面的过滤条件(AirlineID eq 1)提取出来,然后发送给后端的SOAP服务。这就需要使用Java代码来实现。要实现这个功能首先点击QUERY操作的“Define Custom Logic for Request”:


此时会生成一个java 类:



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


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



之后测试一下如下URI:

http://localhost:8080/gateway/odata/sap/MyS2O;v=1/FlightSet?$filter=AirlineID?eq 1

测试结果:



4. READ的映射

?

????与QUERY不同的是,OData的READ操作可以精确获取某个指定实体的详细信息。例如类似下面的URI察看AirliineID=0,FlightID=1 的航班信息。
http://localhost:8080/gateway/odata/sap/MyS2O;v=1/FlightSet(AirlineID=0,FlightID=1)
????与QUERY映射相比,READ的映射更加简单,可以直接使用拖拉的方式完成,不需要java代码介入。

????定义READ操作的数据源如下图所示。注意这里的operation是SOAP的getFlight操作,其他与QUERY的数据源相同。



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


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

http://localhost:8080/gateway/odata/sap/MyS2O;v=1/FlightSet(AirlineID=1,FlightID=2)

来精确获取AirlineID=1且FlightID=2的Flight信息了:



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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读