1、WebService入門(mén)(webService筆記)

一、概述

  • 1、WebService集中解決的問(wèn)題
    遠(yuǎn)程調(diào)用、跨平臺(tái)調(diào)用、跨語(yǔ)言調(diào)用。

  • 2、在實(shí)際中的用途

    • (1)同一個(gè)公司新、舊系統(tǒng)的整合。
    • (2)不同公司的業(yè)務(wù)整合。
    • (3)內(nèi)容聚合:如天氣預(yù)報(bào)、股票行情等的應(yīng)用需要調(diào)用大量不同平臺(tái)、不同語(yǔ)言編寫(xiě)的應(yīng)用的方法。
  • 3、CXF
    CXF(XFire+Celtrix)號(hào)稱是SOA框架。SOA框架是一種面向服務(wù)的架構(gòu),是由IBM提出的,希望以“組裝電腦”的方式來(lái)開(kāi)發(fā)軟件。主要包括兩種服務(wù):一是各種提供服務(wù)的組件(WebService);另一種是企業(yè)服務(wù)總線(Enterprise Service Bus, ESB),當(dāng)然我們主要講WebService部分,即XFire部分。

二、使用

2.1、入門(mén)

每個(gè)WebService組件需要兩個(gè)部分:接口和實(shí)現(xiàn)類。將CXFE:\API\CXF3\apache-cxf-3.1.5\bin目錄加入到環(huán)境變量PATH中,然后在命令行使用wsdl2java驗(yàn)證是否成功。

2.1.1準(zhǔn)備

  • 需要的依賴包(使用CXF3.1.5版本)
  • Servlet規(guī)范包:geronimo-servlet_3.0_spec-1.0.jar
    注意:這個(gè)規(guī)范包在Tomcat中也存在,但是這里我們是開(kāi)發(fā)一個(gè)獨(dú)立的應(yīng)用,不用tomcat。
  • Jetty Web服務(wù)器相關(guān)包
jetty-continuation-9.2.11.v20150529.jar
jetty-http-9.2.11.v20150529.jar
jetty-io-9.2.11.v20150529.jar
jetty-security-9.2.11.v20150529.jar
jetty-server-9.2.11.v20150529.jar
jetty-util-9.2.11.v20150529.jar
  • 其他包:
asm-5.0.4.jar
commons-logging-1.2.jar(在此版本CXF中未找見(jiàn))
neethi-3.0.3.jar
wsdl4j-1.6.3.jar
xmlschema-core-2.2.1.jar
核心包:cxf-core-3.1.5.jar

2.1.2 使用 CXF 開(kāi)發(fā) WebService 服務(wù)器端(工程WS_Server01

  • (1)開(kāi)發(fā)一個(gè)WebService業(yè)務(wù)接口。該接口要用@WebService修飾。
    HelloWorld.java
package org.fkjava.cxf.ws;
import javax.jws.WebService;

@WebService
public interface HelloWorld {
    String sayHi(String name);
}
  • (2)開(kāi)發(fā)一個(gè)WebService的實(shí)現(xiàn)類,實(shí)現(xiàn)類需要用@WebService修飾。
    HelloWorldWs.java
package org.fkjava.cxf.ws.impl;
import java.util.Date;
import javax.jws.WebService;
import org.fkjava.cxf.ws.HelloWorld;

@WebService(endpointInterface = "org.fkjava.cxf.ws.HelloWorld", serviceName = "HelloWorldWs")
public class HelloWorldWs implements HelloWorld {

    @Override
    public String sayHi(String name) {

        return name + "您好!" + "現(xiàn)在的時(shí)間是: " + new Date();
    }
}
  • (3)發(fā)布WebService
    MyService.java
package org.fkjava.cxf.ws.service;
import javax.xml.ws.Endpoint;
import org.fkjava.cxf.ws.HelloWorld;
import org.fkjava.cxf.ws.impl.HelloWorldWs;

public class MyService {
    public static void main(String[] args) {

        HelloWorld hw = new HelloWorldWs();

        //調(diào)用此方法發(fā)布WebService
        Endpoint.publish("http://localhost:8080/myService", hw);
        System.out.println("Hello World!");
    }
}
  • (4)驗(yàn)證服務(wù)是否發(fā)布成功
    使用地址http://localhost:8080/myService?wsdl訪問(wèn),如果出現(xiàn)以下信息,則表明成功。如若不成功,有可能是端口號(hào)被占用了,可以更改端口號(hào)再試。
    1

2.1.3使用 CXF 開(kāi)發(fā) WebService 客戶端(工程WS_Client01

  • (1)調(diào)用CXF提供的wsdl2java工具,根據(jù)WSDL文檔生成相應(yīng)的java代碼,而WSDL就是Web Service Definition Language。任何語(yǔ)言實(shí)現(xiàn)WebService,都需要提供WSDL文檔。
    首先我們?cè)?code>MyEclipse中新建一個(gè)新的java工程WS_Client01,然后我們使用cmd打開(kāi)DOS窗口,進(jìn)入到客戶端的src目錄中,使用dir命令發(fā)現(xiàn)沒(méi)有代碼,我們使用wsdl2java http://localhost:8080/myService?wsdl根據(jù)服務(wù)端的WSDL文檔生成相應(yīng)的java代碼。之后我們?cè)偈褂?code>dir可以看到src下多出一個(gè)org目錄。

    2

    在工程WS_Client01中我們也可以發(fā)現(xiàn)多出來(lái)幾個(gè)包:
    2

    注意:這里我們?cè)趫?zhí)行命令的時(shí)候服務(wù)端要開(kāi)啟。

  • (2)找到wsdl2java所生成類中,一個(gè)繼承了Service的類,即HelloWorldWs類。該類的實(shí)例可當(dāng)成工廠來(lái)使用。

  • (3)調(diào)用Service子類的實(shí)例的getXxxPort()無(wú)參方法,返回遠(yuǎn)程WebService的代理。

MyClient.java

package org.fkjava.cxf.ws.client;
import org.fkjava.cxf.ws.HelloWorld;
import org.fkjava.cxf.ws.impl.HelloWorldWs;

public class MyClient {

    public static void main(String[] args) {
        
        HelloWorldWs factory = new HelloWorldWs();
        HelloWorld hw = factory.getHelloWorldWsPort();
        System.out.println(hw.sayHi("張三"));
    }
}

說(shuō)明:這個(gè)程序中使用的HelloWorldWs.javaHelloWorld.java與服務(wù)端的類不是一樣的,這兩個(gè)類都是客戶端(本工程)的類。這里的HelloWorldWs.java可以當(dāng)作工廠來(lái)使用。然后我們就可以調(diào)用服務(wù)端的相關(guān)方法了。運(yùn)行如果打印出張三您好!現(xiàn)在的時(shí)間是: Fri Jun 24 21:25:20 CST 2016則表明成功。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、基本介紹 Web Services是一個(gè)軟件接口,它描述了一組可以在網(wǎng)絡(luò)上通過(guò)標(biāo)準(zhǔn)化的 XML 消息傳遞訪問(wèn)的...
    Leon丶l閱讀 2,247評(píng)論 1 5
  • 一、環(huán)境搭建 這里只是初步整合,我們直接將CXF中的lib目錄中的所有jar包全部加入(除去jetty相關(guān)包、ge...
    yjaal閱讀 3,774評(píng)論 0 13
  • 前言 在跨系統(tǒng)和跨平臺(tái)的系統(tǒng)通信中,WebService是一個(gè)事實(shí)上的標(biāo)準(zhǔn),其以平臺(tái)無(wú)關(guān)性,獲得了廣泛的應(yīng)用。本文...
    孟婆湯不解渴閱讀 1,893評(píng)論 0 6
  • 概覽 CXF frontends 是一組編程的API,被用來(lái)開(kāi)發(fā)和發(fā)布webservice。CXF支持兩種類型的f...
    JohnShen閱讀 1,469評(píng)論 2 2
  • 2014年5月21日 才看了一眼,卻好像看到了心底的湖泊,看到了時(shí)光的流轉(zhuǎn)。 2014年5月30日 臨摹別人的照片...
    玄弋閱讀 274評(píng)論 0 1

友情鏈接更多精彩內(nèi)容