基於weblogic8.x 的webservices開發

webservices的開源組件很多,這裏我們選用的是MyEclipse集成的一個組件xfire,利用這個組件的最大好處就是配置簡單,而且功能也十分的強大。

 

在很多行業軟件開發中用到的都是1.4的JDK,所以要求組件一定要支持。下面我就使用xfire+weblogic 8.x 開發做一個使用介紹。

 

XFire是codeHaus組織提供的一個開源框架,它構建了POJO和SOA之間的橋樑,主要特性就是支持將POJO通過非常簡單的方式發佈成Web服務,這種處理方式不僅充分發揮了POJO的作用,簡化了Java應用轉化爲Web服務的步驟和過程,也直接降低了SOA的實現難度,用過xfire的朋友一定會這樣的感觸,對於xfire的基本配置及調用方式已經很多的相關文章,這裏主要對xfire的權限管理的實現做一下詳細的講解。

 

下面是我的包結構

 

 

 

 

首先,我們就開始講解怎樣實現一個webservice;再講解,怎樣用xfire進行用戶的權限驗證和獲取客戶端IP進行驗證;最後講解怎麼把webservices整合到我們的項目中去。

 

 

第一步:實現一個簡單的webservices

在MyEclipse裏怎麼建立一個xfire webservices工程,這個在我的資源裏有對應的視頻,如果看下面的內容看不太懂的話建議先下載視頻看看。

 

服務器端代碼:

 

利用工具生成客戶端的時候,會生成泛型來獲取參數,但在JDK1.4下並不支持泛型,於是可以採用aegis綁定方法配置

方法是在接口類同目錄下建一個文件名爲 接口類名+.aegis.xml的文件,如下

IHelloWordwebservices.aegis.xml文件如下:

其中,method代表需要配置的方法名,由於XFire可以支持基本類型,針對集合類型時,需要配置,返回類型或參數類型爲基本類型時不需要特殊配置。
<return-type/>爲配置返回類型,componentType屬性代表返回的集合中所包含的類,此類可以是自定義的對象,也可以是基本類型,例如java.lang.String
index="0"代表方法的參數的序號,0即第一個參數。 當參數爲基本類型時可以不用配置
componentType代表集合參數內包含的類型,也可以爲自定義對象

 

 

web.xml

 

 

services.xml

 

到此服務器端就寫完了。

 

部署到weblogic上,注意現在服務器配置纔剛剛開始,如果不配置的話在tomcat上可以正常運行的的,但在weblogic上就會報錯。

 

第一個可能的錯誤DTD解析錯誤

weblogic8.1的版本,只支持jdk1.4和servlet2.3的規範,在web.xml的配置文件中需要將Myeclipse工具默認生成的

改爲:

再啓動就不會包DTD解析錯誤了

 

 

第二個錯誤,將下載的xfire jar包導入lib,啓動weblogic可能會報QName異常,結果到官方網站又去下了個QName.jar包,解壓後把qname.class文件覆蓋到weblogic路徑 d:/bea/weblogic81/server/lib中有個weblogic.jar包,解壓後可以看到javax.xml.namespace文件夾下也有個QName.class,我把這兩個class反編譯後看到原來weblogic.jar中的這個類的放在QName.jar包中都有,所以把QName.jar包中的QName.class覆蓋過去,QName Exception排除

 

第三:在Xfire1.2.6類中有依賴到spring包中的類,所以xfire還需要spring-1.2. 6和xben-spring-2.8的jar包,不然會報springframework的異常錯誤,因爲services.xml文件中節點的讀取需要依賴spring。(這個在建立工程的時候選擇xfire 1.2Core 和心包時裏面已經包含了spring的兩個包,所以這個問題一般不會遇到,遇到的話就看看xfire 1.2Core 裏有沒包含,沒有的話再加進去就ok了)

 

最後注意用JDK1.4編譯運行哦。

 

到此服務器全部搞定,在ie輸入http://127.0.0.1:7001/webservices/services/Interface?wsdl就可以訪問了哦,顯示xml結構頁面說明接口訪問成功。

 

 

客戶端的開發

 

現在開始客戶端的開發,客戶端可以利用xfire wsdl 的url來生成,但生成的默認文件使用的是泛型,我們的JDK1.4是不支持的,所以最好還是手動的編寫客戶端吧,代碼如下:

 

客戶端編寫完成,注意把客戶端jar包導入到lib,所有jar包在我的資源了下載

 

 

 

XFire 通過 繼承AbstractHandler 實現安全驗證

WebSerice是一種開放的web服務,任何人都可以訪問,但我們有時候需要考慮只有付費用戶才能使用WS,所以,我們就需要對WS加入安全驗證機制,當然,可以利用防火牆的IP過濾,web應用的配置從最外層去隔離非法用戶,但在內層,我們也可以使用SOAP Header的方式,由客戶端發送驗證數據,服務端驗通過後基WS訪問權限。(攔截器)

 

 

 首先,編寫服務端驗證類繼承AuthenticationHandler

 

 

接着,在客戶端編寫類ClientAuthenticationHandler繼承AbstractHandler

 

 

 

然後,在調用WebService的客戶端中加入如下代碼

 

client.addOutHandler(new ClientAuthenticationHandler("abcd","1234")); 

 

加入權限後代碼如下:


 

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.crimson.tree.XmlDocument;
import org.codehaus.xfire.client.Client;

import org.w3c.dom.*;

public class WebServices {
 public static void main(String[] args) throws Exception {
  
  
  /**
   * 調用接口創建Client
   */
  Client client = new Client(
    new URL(
      "http://127.0.0.1:7001/jdqb/services/JdqbInterface?wsdl"));
 

client.addOutHandler(new ClientAuthenticationHandler("abcd","1234")); 

 
  /**
   * 調用接口方法(getList就是我們接口中定義的)
   */
  Object[] results = client.invoke("getList",
    new String[] { "0020100400000009" });
  /**
   * 得到了返回的數據文件,數據被封裝在了一個XmlDocument裏
   * ,獲得XmlDocument後可以對XmlDocument進行解析得到目標文件,
   * 具體的解析XmlDocument的方法很多就不囉嗦了
   */
  XmlDocument doc = (XmlDocument) results[0];

 

 


 

 

 

 

 

 

同時修改services.xml,綁定Handler


 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
 <xfire>
    <inHandlers>
      <handler handlerClass="services.jdqb.Test">
      </handler>
    </inHandlers>
  </xfire>
 <service>
  <name>HelloWordwebservices</name>
  <serviceClass>helloword.IHelloWordwebservices</serviceClass>
  <implementationClass>
   helloword.HelloWordwebservicesImpl
  </implementationClass>

 <inHandlers>  
          <handler  handlerClass ="services.AuthenticationHandler" ></handler>  
         </inHandlers>
  <style>wrapped</style>
  <use>literal</use>
  <scope>application</scope>
 </service></beans>

 

權限控制開發完畢,使用abcd@1234,可以正常訪問WS,如果用錯誤帳號,則會報異常


 

使用abcd@1234,可以正常訪問WS,如果用錯誤帳號,則會報異常

 

 

xfire與web項目整合

xfire集成到項目中,有幾個注意點:

              第一、在web.xml添加xfire servlet;

              第二、將META-INF/xfire/services.xml中要對外發布的web service類配置好;

              第三、把META-INF目錄移到src下;

              第四、發佈到應用服務器上;

 

所需jar包下載連接:

              第五、將web工程原有的META-INF文件夾刪除,保留web-inf/classes裏的META-INF,整合完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章