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. 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. public 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对应到指定的处理函数上。

增加如下:

[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文件是否可用

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

转 ofbiz的webservice接口提供(1)-WSDL的生成相关推荐

  1. 转 ofbiz的webservice接口提供(2)-数据类型的局限性

    ofbiz4 对于webservice的支持实在是不咋地,在官方的文档中,SOAP只是支持基础类型的数据的传入传出,这些基础的数据类型我们可以参照 org.ofbiz.service.ModelPar ...

  2. cmd 调用webservice接口_c# 三种方法调用WebService接口

    1.引用*.wsdl文件 WebService服务端会提供wsdl文件,客户端通过该文件生成.cs文件以及生成.dll. 注意:若服务端只提供的了URL,在URL后面加上"?wsdl&quo ...

  3. 根据wsdl文件生成WebService客户端代码

    有时候在项目中,一个项目可能有好几个公司在做.系统之间难免会出现互相调用接口的现象,这时候有一种办法就是使用webService.本篇文章将介绍如何将对接系统提供的WebService接口,根据对方提 ...

  4. cmd命令生成webservice_根据wsdl文件生成WebService客户端代码

    有时候在项目中,一个项目可能有好几个公司在做.系统之间难免会出现互相调用接口的现象,这时候有一种办法就是使用webService.本篇文章将介绍如何将对接系统提供的WebService接口,根据对方提 ...

  5. python调用webservice接口实例_python调用webservice接口的实现

    使用suds这个第三方模块 from suds.client import Client url = 'http://ip:port/?wsdl' cilent=Client(url) print c ...

  6. Java,Axis方式调用WebService接口,支持多参数

    package com.demo.modules.si.util;import org.apache.axis.client.Call; import javax.xml.rpc.ParameterM ...

  7. java wsdl xfire_Java使用XFire调用WebService接口

    服务端(为客户端提供Webservice接口): 使用工具:myeclipse-8.5-win32,apache-tomcat6.0 开发步骤: 1.创建工程 File->New->Web ...

  8. html调用天气预报wsdl服务,webservice接口调用天气预报例程

    [实例简介] c# winform 调用公共天气预报webservice接口,初学者参考,大神忽略 [实例截图] [核心代码] WSTest └── WS Test └── WindowsFormsA ...

  9. Python3 访问 webservice 接口(WSDL+suds 方式)

    Python3 访问 webservice 接口(WSDL+suds 方式) suds 安装 参考 suds 使用说明 WSDL文件解读 学习 python 学习 上一篇文章整理了 通过request ...

最新文章

  1. CSS之定位(元素的层级z-index)
  2. 第三周项目四-穷举法解决组合问题
  3. 消息队列如何保证顺序性?
  4. Exception in thread “main“ java.sql.SQLException: The server time zone value
  5. 以太坊2.0存款合约地址余额已突破50万ETH
  6. VSCode无法写入用户设置 请打开用户设置并清除错误或警告, 然后重式
  7. HDU 2222- Keywords Search
  8. 2018年python工作好找吗-2018年最新数据:python、大数据、人工智能从业者薪资表...
  9. docker mysql镜像 使用_docker下MySQL镜像的使用方法
  10. 动态SQL和PL/SQL的EXECUTE IMMEDIATE选项
  11. 在使用体验上,VS远远不如Eclipse
  12. java程序设计从方法学角度描述_(特价书)Java程序设计:从方法学角度描述
  13. CodeSmith 介绍
  14. 斯芬克怎么样 谁说我没有担心
  15. python executescript_Python(SQLite)executescript用法(
  16. TextView rotation 旋转
  17. 使用docker部署java服务
  18. Spring cacheable
  19. 武装到牙齿的Android重度依赖者
  20. 月薪过2w的IT程序员都是怎么做到的?

热门文章

  1. Visual Paradigm 教程[UML]:如何在序列图中使用持续时间约束?
  2. 大数据为何让传统银行焦虑?
  3. 影响SDN和NFV部署速度的两个因素
  4. Instagram允许用户管理评论 网络骚扰评论一扫空
  5. 【转】Monkey测试6-Monkey Test Log
  6. Word 2003高级技巧之可爱的锚标记
  7. 关于bat中使用rar压缩命令
  8. 关于幂律分布的一个笔记_哈克_新浪博客
  9. 【超级经典】程序员装B指南(转)
  10. DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~)