ofbiz的webservice接口提供(1)-WSDL的生成
2013-04-14 13:04
369 查看
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文件是否可用
在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文件是否可用
相关文章推荐
- 转 ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- 转 ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- 转 ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- 转 ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-wsdl文件的不规范性
- ofbiz的webservice接口提供(3)-wsdl文件的不规范性
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码