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

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

发布时间:2020-12-17 01:00:06 所属栏目:安全 来源:网络整理
导读:ofbiz的service:这个是ofbiz赖以骄傲的设计方式。她可以将所有内部实体对象的CRUD都使用service的方式提供,不同系统之间可以通过互相调用service来完成业务操作。这种松耦合的方式是很多框架梦寐以求的效果。? ?在ofbiz4的文档中提到,如果想将ofbiz的某个

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

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

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

[xhtml]? view plain copy
  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</>??
  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"service>??

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

而我实际类如下:

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

?

我传入的参数将从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对应到指定的处理函数上。

增加如下:

copy
    <!--?引擎接口?-->??
  1. 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-maprequest-map?uri="SOAPService"event?type="soap"request-map?uri="xmlrpc"?track-serverhit="false"?track-visit="false"event?type="xmlrpc">??

?通过在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文件是否可用

(编辑:李大同)

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

    推荐文章
      热点阅读