首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

怎么将ofbiz的服务暴露成webservice,并且利用soapui测试

2012-07-01 
如何将ofbiz的服务暴露成webservice,并且利用soapui测试理解本文之前需要了解以下几个东西:ofbiz的服务定

如何将ofbiz的服务暴露成webservice,并且利用soapui测试

理解本文之前需要了解以下几个东西:

ofbiz的服务定义和实现,webservice的含义和简单理解wsdl文件,soapui的简单使用

1.首先定义一个服务,并且在服务定义中增加一个export为true的属性,这样这个服务就暴露成webservice了

<service engine="java" name="TestSoap" location="com.sunyard.cpsp.ofbiztemplate.OfbizTemplateService" invoke="testSoap"export="true"><description>这是一个暴露成webservice的服务,java实现中有利用soapui测试的详细介绍</description><attribute name="attr1" mode="INOUT" type="String"></attribute><attribute name="attr2" mode="INOUT" type="Map"></attribute><attribute name="attr3" mode="INOUT" type="Double"></attribute></service>

2.写好这个服务的实现,我们这里采用的是java

public static Map<String, Object> testSoap(DispatchContext dctx,Map<String, Object> context){/**介绍如何结合soapui测试这个服务*//* * 1.浏览器中输入http://localhost:8080/webtools/control/SOAPService?wsdl可以查看所有ofbiz暴露成webservice的服务 * 2.选择TestSoap浏览器地址跳转到http://localhost:8080/webtools/control/SOAPService/TestSoap?wsdl这就是TestSoap的 * wsdl文件 * 3.在soapui中建立一个工程initil WSDL填上第二点中的wsdl文件(可以直接填这个地址) * 4.soapui中的第一个request中填入合法的参数数据,详情参考http://meilv.iteye.com/blog/1317112 */Map<String, Object> result = ServiceUtil.returnSuccess("成功运行TestSoap服务");result.putAll(context);return result;}

?3.按照服务实现中注释查看ofbiz为每个服务生产的wsdl文件

?为什么地址是webtools模块下面的地址?那是因为在webtools的control中有下面这样一个request,所以使用这样一个地址来暴露webservice。因为这个request中的event类型是soap,所以control中一定要引用了soap这个handler

<request-map uri="SOAPService">        <event type="soap"/>        <response name="error" type="none"/>        <response name="success" type="none"/></request-map>

4.soapui的request中的数据格式如下。实际上就是将context中的内容用xml表示了出来。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://ofbiz.apache.org/service/">   <soapenv:Header/>   <soapenv:Body>      <ser:TestSoap>         <map-Map>            <!-- Map中的一个元素,其中key为String类型,value也为String类型--><ser:map-Entry>               <ser:map-Key>                  <ser:std-String value="attr1"/>               </ser:map-Key>               <ser:map-Value>                  <ser:std-String value="attr1"/>               </ser:map-Value>            </ser:map-Entry><!-- Map中的一个元素,其中key为String类型,value也为Map类型-->    <ser:map-Entry><ser:map-Key><ser:std-String value="attr2"/></ser:map-Key><ser:map-Value><ser:map-Map><ser:map-Entry>               <ser:map-Key>                  <ser:std-String value="attr21"/>              </ser:map-Key>               <ser:map-Value>                  <ser:std-String value="attr21"/>               </ser:map-Value>            </ser:map-Entry></ser:map-Map>               </ser:map-Value>   </ser:map-Entry><!-- Map中的一个元素,其中key为String类型,value也为Double类型-->  <ser:map-Entry>               <ser:map-Key>                  <ser:std-String value="attr3"/>               </ser:map-Key>               <ser:map-Value>                  <ser:std-Double value="20"/>               </ser:map-Value>            </ser:map-Entry>         </map-Map>      </ser:TestSoap>   </soapenv:Body></soapenv:Envelope>

热点排行