生活随笔
收集整理的這篇文章主要介紹了
转 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?{??????????????????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;??????}??}?? ?
?
我傳入的參數將從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的生成的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。