應用XFire開發WebService實例 xfire+myeclipse+weblogic 8

1. XFire介紹<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

XFireAxis是新一代的java web服務框架。XFire提供了非常方便的API,使用這些API可以開發面向服務(SOA)的程序。他比axis性能要高,支持各種標準,性能優良,基於低內存的STAX模型,也是其於流的XML

支持多個重要的Web Service標準,包括SOAPWSDLWS-I Basic ProfileWSAddressingWS-Security

高性能的SOAP

可選的綁定(binding)方式,如POJOXMLBeansJAXB1.1JAXB2.0CastorJiBX

支持JSR181 API

多種傳輸方式,如HTTPJMSXMPPInJVM

靈活的接口

支持多個容器,如SpringPico

關於XFire就知道這麼多,關於它的更祥細的資料或更深層次東西,就不去研究了,當然關於webservice的基本的知識還要學習的。作爲技術人員不能光知其然,不知其所以然。(行了,又廢話了)

2. 準備

在開始介紹開發實例之前,你首先要準備工具有:eclipseMyeclipseweblogic8,當然你也可以自己下載最新xfirehttp://repository.codehaus.org/org/codehaus/xfire/xfire-distribution/1.2.6/xfire-distribution-1.2.6.zip都準備好了 ,那就正式開工吧!

3. 開發

l  服務端

首先,eclipse新建一個webservice工程

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

工程名字就叫JuneServiceweb rootcontent root都爲June

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

一路next後,點擊”Finish”,會看到如下結構,有了工具就是好,什麼東西都自己生成,那先看看WEB-INF/web.xml都生成了什麼吧。。

 

 

 

 

 

 

 

 

 

 

 

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <servlet>

        <servlet-name>XFireServlet</servlet-name>

        <servlet-class>

            org.codehaus.xfire.transport.http.XFireConfigurableServlet

        </servlet-class>

        <load-on-startup>0</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>XFireServlet</servlet-name>

        <url-pattern>/services/*</url-pattern>

    </servlet-mapping>

    <welcome-file-list>

        <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

</web-app>

在這個web.xml文件中定義了一個 XfireServlet,它負責提供Web Services,並提供

每個Web ServiceWSDL。如果你發佈了一個Web Service,比如叫JuneService,你

就可以通過網址http://<server_url[:port]>/<context>/ services/JuneService來訪問這個Web Service,並且通過網址http://<server_url[:port]>/<context>/

services/BookService?WSDL得到這個Web ServiceWSDL信息。

在源文件夾WEB-INF/src下新建一個java packagecom.june,在這個package下新建一個接口JuneService,(往往很多文章在介紹某項技術怎麼用時,都會用helloworld這個例子,這個例子確實應用廣泛,不過,咱換一種例子,或都另一種方式的HelloWorld)

這個接口定義了只定義了一個addDate方法。這個方法要求傳入一個整數的參數,返回類型爲一個字符串,用來得到當的時間的加上n天以後的日期,也很簡單吧。。

package com.june;

 

public interface JuneService {

    public String addDate(int d);

}

最寫一個實現這個接口的類

package com.june;

 

import java.util.Calendar;

 

public class JuneServiceImpl implements JuneService {

 

    public String addDate(int d) {

        Calendar cal = Calendar.getInstance();

        cal.add(Calendar.DATE, d);

        SimpleDateFormat dateFormat = new SimpleDateFormat();

        dateFormat.applyPattern("yyyyMMdd");

        return dateFormat.format(cal.getTime());

}

}

實現的很簡單,就是加上天數後,直接tostring反回就可以了。

現在看來很簡單吧,webserice的類跟普通的沒有什麼區別。好,繼續吧。在WebServices目錄下有一個services.xml文件,他就是用來發布你上面的這兩個類做爲webservice的,好,我們來配置一下這個文件。

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://xfire.codehaus.org/config/1.0">

    <service>

        <name>HelloService</name>

        <namespace>http://services.june.come/JuneService</namespace>

        <serviceClass>

            com.june.JuneService

        </serviceClass>

        <implementationClass>

            com.june.JuneServiceImpl

        </implementationClass>

    </service>

</beans>

好了,services.xml配置好了,關於services.xml配置結構這裏也不說明了,大家可以去查資料,這裏能說明問題就行了,那我就開始發佈我們的webservice!說明一點,如果使用的不是eclipse工具,你可能要手動裝services.xml文件考到WEB-INF/classes/META-INF/xfire下面。但是myeclipe都不用你關心這些事情,它替你搞定。

那就先發布到weblogic上,啓動服務。在地址裏輸入http://localhost:7001/June/services

這個問題是怎麼會事,難道是配置錯了,可是查來查去沒有什麼錯誤呀。那到google上找(真不知道現在程序員如果沒有Google會是什麼樣?),找了好長時間,終於在xfire的官網上找到相關的資料。如下:

 

 

 

 

 

 

 

 

 

Qname.jar 下載地址:http://docs.codehaus.org/download/attachments/27836/qname.jar?version=1

原來發生錯誤原因,是因爲weblogic.jar包的qname.jar太舊了,確切的說是 qname.class,好那就按照解決方法做,把qname.jar加到工程中,在weblogic server也加上qname.jar,還要在startweblogic.cmdclasspath里加放%WL_HOME%/server/lib/qname.jar,或是直接替換weblogic.jar裏的qname.class,這樣啓動時就會用這個新包了。加入weblogic.xml就是要用戶自己的jar先於系統的jar加載。好了,再重啓一下服務。

再輸入地址http://localhost:7001/June/services,好,終於看我們期盼已久的界面了。這樣我們webservice服務就發佈成功了。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

l  客戶端

有了服務端,那我們就應用一下,下面我們來做webservice的客戶端。

首先建一個java application工程。就叫JuneClient吧,這個工程很簡單,什麼也沒有,那我先建一下src源目錄,並做爲建我們的java package com.june,client來做爲webservice的客戶端。在工程上右鍵new->others選擇webservice client.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

然後,next按照提示來設置。

Wsdl url填寫剛發佈成功的webservice的地址http://localhost:7001/June/services/JuneService?wsdl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

這一步next,我這裏的eclipse會報web 服務描述語言有錯誤,直接finishOK

這樣,myeclipse就會自動生成客戶端所需要的程序,有了工具確實是很方便,這樣確實提高了開發效率,但是也造成了許多程序員沒有工具就不會寫程序,工具一通搞定,具體裏面的關係也不用管,我覺得程序員不光要會用工具,還要知道工具怎麼來實現的,爲什麼要設置這一步,在沒有工具情況下,我應該先從那做起,明白原理後,再利於工具,才能對你有所提高。才能提高對整個系統的整體把握。不光要知其然,還要知其所然,這纔是搞技術應有的態度。(哎,又廢話了)

既然,自動生成了客戶端程序,我們就來測試一下我們的webservice

package com.june.client;

 

import com.june.client.JuneServiceClient;

import com.june.client.JuneServicePortType;

public class JuneClientMain {

 

    public static void main(String[] args) {

        JuneServiceClient client = new JuneServiceClient();

        JuneServicePortType juneService = client.getJuneServiceHttpPort();

        // 調用服務

        String result = juneService.addDate(21);

        System.out.println(result);

    }

以上爲通過webservice客戶端調用web服務的一個例子,我調用webserviceaddDate()方法,參數傳入21,然後運行這個程序。也就是說通過webservice應該返回當前日期加上21天那天的日期是多少,結果是:20080808。正好是北京奧運會的日子,好日子呀,哈哈。。

好了,其實webservice在好多地方都可以佈署,也可以在web應用下,也可以桌面應用,C++、C#、VB等等。只要你提供相應的WSDL,告訴調用者相應的接口方法,只需傳入相應的參數,就能得到你想要的結果。

 

 

 

關鍵點:

l  

l  

l  

l  

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