`

ofbiz的webservice接口提供(1)-WSDL的生成

 
阅读更多

ofbiz的service:这个是ofbiz赖以骄傲的设计方式。她可以将所有内部实体对象的CRUD都使用service的方式提供,不同系统之间可以通过互相调用service来完成业务操作。这种松耦合的方式是很多框架梦寐以求的效果。 

 在ofbiz4的文档中提到,如果想将ofbiz的某个服务开放成webservice只是需要轻轻的将我们定义service文件中的service属性中的export设定为true。

 例如:我的一个ofbiz项目的servicedef目录下的services.xml文件中定义了一个服务

 

[xhtml] view plaincopy
 
 
  1. <service   
  2.     name="findSeniorService"    
  3.     engine="java"   
  4.     location="com.hc360.cem.ws.CEMSeniorMemberService"   
  5.     invoke="findSeniorService"   
  6.     export="true"   
  7.     validate="false"   
  8.     auth="false">  
  9.     <description>CRM call CEM findSeniorService soap</description>  
  10.     <attribute name="userid" type="String" mode="INOUT" optional="true"/>  
  11.     <attribute name="salt" type="String" mode="IN" optional="true"/>  
  12.     <attribute name="aaa" type="String" mode="OUT" optional="true"/>        
  13.     <attribute name="bbb" type="String" mode="OUT" optional="true"/>        
  14.     <attribute name="ccc" type="String" mode="OUT" optional="true"/>        
  15. </service>  

 

上边图片的意思就是将:com.hc360.cem.ws.CEMSeniorMemberService类中的findSeniorService作为soap接口提供出去。输入参数有userid、salt,输出参数有userid、aaa、bbb、ccc。

而我实际类如下:

 

[c-sharp] view plaincopy
 
 
  1. import java.util.Map;  
  2. import javolution.util.FastMap;  
  3. import org.ofbiz.base.util.Debug;  
  4. import org.ofbiz.service.DispatchContext;  
  5.   
  6. public class CEMSeniorMemberService {  
  7.    /** 
  8.     * 开放一个service供测试使用 
  9.     * wsdl的访问方式:http://yourip:port/project/control/SOAPService/findSeniorService?wsdl 
  10.     * 但是ofbiz给我们生成的wsdl使用任何的客户端生成工具都无法正确生成,但是这个webservice接口是可以使用的 
  11.     * @author kongqz 
  12.     * @date 2009-03-11 
  13.     *  
  14.     * */  
  15.     public static Map<String, Object> findSeniorService(DispatchContext ctx, Map<String, ? extends Object> context) {  
  16.         //存放结果的map  
  17.         Map<String, Object> result = FastMap.newInstance();  
  18. //        GenericDelegator delegator = ctx.getDelegator();  
  19.   
  20.         String userid = (String) context.get("userid");  
  21.         String salt = (String) context.get("salt");  
  22.         Debug.logInfo("salt is ["+salt+"],userid is ["+userid+"] ""findSeniorService");  
  23.   
  24.         result.put("aaa""test_aaaaa");  
  25.         result.put("bbb""test_bbbbb");  
  26.         result.put("ccc""test_ccccc");  
  27.         result.put("userid", userid);  
  28.         return result;  
  29.     }  
  30. }  

 

 

 

我传入的参数将从ofbiz的这个context中获取,而我返回的参数将通过result这个map来put出去。

这里我想说明的是:这个时候如果我调用如下链接:

http://yourip:port/projectname/control/SOAPService/findSeniorService?wsdl

就可以看到我这个服务的wsdl文件。

 

如果想看整个项目所有暴露给外部访问的webservice有哪些,我可以使用

http://yourip:port/projectname/control/SOAPService?wsdl

来进行查看。

通过上边wsdl链接我们需要知道一点,我们的SOAPService哪里来的?

这里就需要指出,如果想将你的SOAPService暴露给外部,需要ofbiz的controller来做点贡献。因为ofbiz的外部请求都是通过ofbiz的servlet来处理的,入口点是项目的controller文件,我们需要给controller文件增加支持。

controller文件:ofbiz当前项目的所有请求的入口,通过对应request-map:将所有的请求uri对应到指定的处理函数上。

增加如下:

 

[xhtml] view plaincopy
 
 
  1. <!-- 引擎接口 -->  
  2. <request-map uri="httpService">  
  3.     <event type="java" path="org.ofbiz.service.engine.HttpEngine" invoke="httpEngine"/>  
  4.     <response name="success" type="none"/>  
  5.     <response name="error" type="none"/>  
  6. </request-map>  
  7. <request-map uri="SOAPService">  
  8.     <event type="soap"/>  
  9.     <response name="error" type="none"/>  
  10.     <response name="success" type="none"/>  
  11. </request-map>  
  12. <request-map uri="xmlrpc" track-serverhit="false" track-visit="false">  
  13.     <event type="xmlrpc"/>  
  14.     <response name="error" type="none"/>  
  15.     <response name="success" type="none"/>  
  16. </request-map>  

 

 通过在controller.xml文件上的支持,你才能将httpService,SOAPService,xmlrpc这些服务对外提供,你的链接才能写成上边的方式。

  总结下ofbiz的webservice提供前提:

  1、controller的支持,SOAPService的接口暴露】

  2、service类的提供,这个类是static方式的,数据的传入传出使用map方式(注意那个context)

  3、services.xml文件的定义,将你的webservice定义在这里,并设定export=true,否则只能是一个内部的service了。

  4、访问我们项目提供的所有webservice,看wsdl文件是否可用

分享到:
评论

相关推荐

    ofbiz-entry-zh-cn.doc

    不用解压ofbiz-entry-zh-cn.zip 直接把zip修改为doc 即可。 ofbiz-entry-zh-cn.doc 博文链接:https://jiasudu.iteye.com/blog/157892

    apache-ofbiz-16.11.05

    最新版OFBiz,apache-ofbiz-16.11.05,apache-ofbiz-16.11.05

    OFBiz-API-Docs

    有兴趣的朋友可以自己生成,ant命令是:docs-all,该命令生成帮助文档时会获取操作系统语言设置,要生成英文文档请先将操作系统语言改为英语,要生成中文文档需要在docs-all命令中的&lt;default-javadoc/&gt;添加属性...

    magento:Magento 与 Apache OFBiz 集成,兼容 OFBiz-13.07 和主干

    Magento 与 Apache OFBiz 集成,兼容 OFBiz-13.07 和主干 在 Apache OFBiz-13.07 和 OFBiz 主干中使用磁电机组件的步骤 启动终端并进入 Apache OFBiz 的主目录 在热部署文件夹中签出 magento 组件 使用命令加载数据...

    WebService 调用封装实体的接口 SOAP

    C#开发核心代码,用拼接XML方式,调用封装了实体类的SOAP接口

    Ofbiz-16-全量数据库873张表.rar

    Apache-Ofbiz-16-全量数据库873张表sql文件

    ofbiz用户使用手册

    不用解压ofbiz-manual-zh-cn.zip 直接把.zip修改为.pdf即可 ofbiz-manual-zh-cn.pdf 博文链接:https://jiasudu.iteye.com/blog/157891

    ofbiz-birt.pdf

    ofbiz-birt.pdfofbiz-birt.pdfofbiz-birt.pdfofbiz-birt.pdfofbiz-birt.pdfofbiz-birt.pdfofbiz-birt.pdfofbiz-birt.pdf

    OFBIZ官方文档

    ( OFBIZ-OFBizTutorial-ABeginnersDevelopmentGuide-140115-0148-28488.pdf )

    OFBiz-manual-zh.doc

    OFBiz-manual-zh.docOFBiz-manual-zh.docOFBiz-manual-zh.docOFBiz-manual-zh.docOFBiz-manual-zh.doc

    CVE-2021-26295-Apache-OFBiz:CVE-2021-26295 Apache OFBiz rmi反序列化POC

    CVE-2021-26295-Apache-OFBiz CVE-2021-26295 Apache OFBiz rmi反序列化POC需要将ysoserial.jar放置在目录下,并且不能使用java的高版本

    ofbiz1004运行于外部tomcat6的配置文件

    如果你没有试过在windows 上的tomcat上运行ofbiz,那么你一定认为10分的贵了。但是当你搞了几天都没有成功的时候,你就知道这个是物有所值的了。 你只需要下载这个文件包中的配置文件模板,虽后放到ofbiz1004\...

    CVE-2020-9496 ofbiz反序列化漏洞分析1

    CVE-2020-9496 ofbiz反序列化漏洞分析1

    ofbiz资料压缩包

    ofbiz初学者的一些文档资料,包括 1、A1-OFBiz功能介绍-xpp2、A ... 3、A2-OFBiz开发快速入门-hongs-Ob9.04 4、A3-OFBiz创建模块-...5、B1-OFBiz开发指南-Ob4.0-EN[Apache-OFBiz-Development-The-Beginners-Tutorial]

    解决ofbiz中文报表"#"导入字体

    ofbiz后台应用 - 订单 - 订单查询/订单列表 - 订单明细 - "PDF" 报表, 中文报"#" 错误。 需导入中文解决

Global site tag (gtag.js) - Google Analytics