生活随笔
收集整理的這篇文章主要介紹了
转 ofbiz的webservice接口提供(1)-WSDL的生成
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ofbiz的service:這個(gè)是ofbiz賴(lài)以驕傲的設(shè)計(jì)方式。她可以將所有內(nèi)部實(shí)體對(duì)象的CRUD都使用service的方式提供,不同系統(tǒng)之間可以通過(guò)互相調(diào)用service來(lái)完成業(yè)務(wù)操作。這種松耦合的方式是很多框架夢(mèng)寐以求的效果。?
?在ofbiz4的文檔中提到,如果想將ofbiz的某個(gè)服務(wù)開(kāi)放成webservice只是需要輕輕的將我們定義service文件中的service屬性中的export設(shè)定為true。
?例如:我的一個(gè)ofbiz項(xiàng)目的servicedef目錄下的services.xml文件中定義了一個(gè)服務(wù)
?
[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類(lèi)中的findSeniorService作為soap接口提供出去。輸入?yún)?shù)有userid、salt,輸出參數(shù)有userid、aaa、bbb、ccc。
而我實(shí)際類(lèi)如下:
?
[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?{??????????????????public?static?Map<String,?Object>?findSeniorService(DispatchContext?ctx,?Map<String,???extends?Object>?context)?{????????????????????Map<String,?Object>?result?=?FastMap.newInstance();??????????????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;??????}??}?? ?
?
我傳入的參數(shù)將從ofbiz的這個(gè)context中獲取,而我返回的參數(shù)將通過(guò)result這個(gè)map來(lái)put出去。
這里我想說(shuō)明的是:這個(gè)時(shí)候如果我調(diào)用如下鏈接:
http://yourip:port/projectname/control/SOAPService/findSeniorService?wsdl
就可以看到我這個(gè)服務(wù)的wsdl文件。
?
如果想看整個(gè)項(xiàng)目所有暴露給外部訪問(wèn)的webservice有哪些,我可以使用
http://yourip:port/projectname/control/SOAPService?wsdl
來(lái)進(jìn)行查看。
通過(guò)上邊wsdl鏈接我們需要知道一點(diǎn),我們的SOAPService哪里來(lái)的?
這里就需要指出,如果想將你的SOAPService暴露給外部,需要ofbiz的controller來(lái)做點(diǎn)貢獻(xiàn)。因?yàn)閛fbiz的外部請(qǐng)求都是通過(guò) ofbiz的servlet來(lái)處理的,入口點(diǎn)是項(xiàng)目的controller文件,我們需要給controller文件增加支持。
controller文件:ofbiz當(dāng)前項(xiàng)目的所有請(qǐng)求的入口,通過(guò)對(duì)應(yīng)request-map:將所有的請(qǐng)求uri對(duì)應(yīng)到指定的處理函數(shù)上。
增加如下:
?
[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>?? ?通過(guò)在controller.xml文件上的支持,你才能將httpService,SOAPService,xmlrpc這些服務(wù)對(duì)外提供,你的鏈接才能寫(xiě)成上邊的方式。
? 總結(jié)下ofbiz的webservice提供前提:
? 1、controller的支持,SOAPService的接口暴露】
? 2、service類(lèi)的提供,這個(gè)類(lèi)是static方式的,數(shù)據(jù)的傳入傳出使用map方式(注意那個(gè)context)
? 3、services.xml文件的定義,將你的webservice定義在這里,并設(shè)定export=true,否則只能是一個(gè)內(nèi)部的service了。
? 4、訪問(wèn)我們項(xiàng)目提供的所有webservice,看wsdl文件是否可用
轉(zhuǎn)載于:https://www.cnblogs.com/Ivan-j2ee/archive/2012/08/16/2642451.html
總結(jié)
以上是生活随笔為你收集整理的转 ofbiz的webservice接口提供(1)-WSDL的生成的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。