欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/7/14 编程问答 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 转 ofbiz的webservice接口提供(1)-WSDL的生成 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

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

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

 

[xhtml] view plaincopy
  • <service   
  •     name="findSeniorService"    
  •     engine="java"   
  •     location="com.hc360.cem.ws.CEMSeniorMemberService"   
  •     invoke="findSeniorService"   
  •     export="true"   
  •     validate="false"   
  •     auth="false">  
  •     <description>CRM call CEM findSeniorService soap</description>  
  •     <attribute name="userid" type="String" mode="INOUT" optional="true"/>  
  •     <attribute name="salt" type="String" mode="IN" optional="true"/>  
  •     <attribute name="aaa" type="String" mode="OUT" optional="true"/>        
  •     <attribute name="bbb" type="String" mode="OUT" optional="true"/>        
  •     <attribute name="ccc" type="String" mode="OUT" optional="true"/>        
  • </service>  
  • 上边图片的意思就是将:com.hc360.cem.ws.CEMSeniorMemberService类中的findSeniorService作为soap接口提供出去。输入参数有userid、salt,输出参数有userid、aaa、bbb、ccc。

    而我实际类如下:

     

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

     

    我传入的参数将从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
  • <!-- 引擎接口 -->  
  • <request-map uri="httpService">  
  •     <event type="java" path="org.ofbiz.service.engine.HttpEngine" invoke="httpEngine"/>  
  •     <response name="success" type="none"/>  
  •     <response name="error" type="none"/>  
  • </request-map>  
  • <request-map uri="SOAPService">  
  •     <event type="soap"/>  
  •     <response name="error" type="none"/>  
  •     <response name="success" type="none"/>  
  • </request-map>  
  • <request-map uri="xmlrpc" track-serverhit="false" track-visit="false">  
  •     <event type="xmlrpc"/>  
  •     <response name="error" type="none"/>  
  •     <response name="success" type="none"/>  
  • </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文件是否可用

    转载于:https://www.cnblogs.com/Ivan-j2ee/archive/2012/08/16/2642451.html

    总结

    以上是生活随笔为你收集整理的转 ofbiz的webservice接口提供(1)-WSDL的生成的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。