作者:穿行印象
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:
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/
查看其WSDL,并且保存成文件,以备后用(截图不全):
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方法为例,将getFlights和getFlight两个SOAP服务映射为OData服务。
1. Ecplipse中创建一个OData Service Implementation Project
2. 这个Project中新建一个OData Model,名字为S2O.
3. QUERY的映射
Endpoint:
http://localhost:8888/axis2/services/MyAirlineService.MyAirlineServiceHttpSoap
Namespace:
Operation:
getFlights
PortType:
MyAirlineservicePortType
这些信息在SOAP的WSDL中可以找到。
返回结果集映射好之后,需要使用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”:
之后测试一下如下URI:
http://localhost:8080/gateway/odata/sap/MyS2O;v=1/FlightSet?$filter=AirlineID eq 1
测试结果:
4. READ的映射
http://localhost:8080/gateway/odata/sap/MyS2O;v=1/FlightSet(AirlineID=0,FlightID=1)
之后定义SOAP服务的返回结果与OData实体的对应关系:
http://localhost:8080/gateway/odata/sap/MyS2O;v=1/FlightSet(AirlineID=1,FlightID=2)
来精确获取AirlineID=1且FlightID=2的Flight信息了:
使用Integration Gateway将SOAP服务映射成OData之后,就可以使用前面讨论的SMP Native OData SDK或者SMP Kapsel开发所需要的移动应用并且通过SMP消费这些OData服务了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。