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

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.   
  6. public class CEMSeniorMemberService {  
  7.    /** 
  8.     * 開放一個service供測試使用 
  9.     * wsdl的訪問方式:http://yourip:port/project/control/SOAPService/findSeniorService?wsdl 
  10.     * 但是ofbiz給我們生成的wsdl使用任何的客戶端生成工具都無法正確生成,但是這個webservice接口是可以使用的 
  11.     * @author kongqz 
  12.     * @date 2009-03-11 
  13.     *  
  14.     * */  
  15.     public static Map<String, Object> findSeniorService(DispatchContext ctx, Map<String, ? extends Object> context) {  
  16.         //存放結果的map  
  17.         Map<String, Object> result = FastMap.newInstance();  
  18. //        GenericDelegator delegator = ctx.getDelegator();  
  19.   
  20.         String userid = (String) context.get("userid");  
  21.         String salt = (String) context.get("salt");  
  22.         Debug.logInfo("salt is ["+salt+"],userid is ["+userid+"] ""findSeniorService");  
  23.   
  24.         result.put("aaa""test_aaaaa");  
  25.         result.put("bbb""test_bbbbb");  
  26.         result.put("ccc""test_ccccc");  
  27.         result.put("userid", userid);  
  28.         return result;  
  29.     }  
  30. }  

 

 

 

我傳入的參數將從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文件是否可用

發佈了452 篇原創文章 · 獲贊 32 · 訪問量 93萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章