使用CXF框架發佈WebService

CXF官方網站:http://cxf.apache.org/html

1.使用CXF發佈WebService服務

準備:java

導入相關jar包:android

Jar包下載地址:http://cxf.apache.org/download.htmlweb

或者使用maven導入:spring

<dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.1.6</version>
        </dependency>

建立一個用於發佈WebService的類:apache

@WebService
public class PhoneService {
    public Phone getPhoneInfo(String name) {
        Phone phone = new Phone();
        phone.setName(name);
        if (name.endsWith("android")) {
            phone.setProduce("Oracle");
            phone.setTime(new Date());
        } else if (name.endsWith("apple")) {
            phone.setProduce("Apple");
            phone.setTime(new Date());
        } else {
            phone.setProduce("未知");
            phone.setTime(new Date());
        }
        return phone;
    }
}

發佈該服務:瀏覽器

public static void main(String[] args) {
        // 發佈服務的類, 相似Endpoint
        JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
        // 註冊服務器地址和端口
        jaxWsServerFactoryBean.setAddress("http://127.0.0.1:8888/wwss/phoneService");
        // 註冊哪一個類提供服務
        jaxWsServerFactoryBean.setServiceBean(new at.flying.ws.service.PhoneService());
        //配置輸入日誌攔截器
        jaxWsServerFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
        //配置輸出日誌攔截器
        jaxWsServerFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
        // 發佈一個cxf服務
        jaxWsServerFactoryBean.create();
    }

在瀏覽器地址欄輸入上述代碼設置的地址:http://127.0.0.1:8888/wwss/phoneService?wsdl服務器

便可看到發佈的服務的WSDL文件。app

而後根據該文件生成本地Java代碼,詳細操做請參考該篇文檔:http://my.oschina.net/u/2608182/blog/735762框架

而後根據本地Java代碼寫的測試函數以下:

@Test
    public void testws1() {
        PhoneServiceService phoneService = new PhoneServiceService();
        PhoneService phoneService1 = phoneService.getPhoneServicePort();
        //獲取到生成的本地Phone類,就能夠調用其中的任何對外開放的方法
        Phone phone = phoneService1.getPhoneInfo("eeeeapple");
        System.out.println(phone.getName());
        System.out.println(phone.getProduce());
        System.out.println(phone.getTime());

    }

輸出結果以下:

Tips:

從以上步驟咱們能夠看到使用CXF框架跟使用JDK來發布WebService服務有如下幾點不一樣:

1.CXF須要導入額外的Jar包。

2.二者的發佈方式不一樣。

2.CXF與Spring的集成

用於發佈WebService的類:

@WebService
@Service("phoneService")
public class PhoneService {
    public Phone getPhoneInfo(String name) {
        Phone phone = new Phone();
        phone.setName(name);
        if (name.endsWith("android")) {
            phone.setProduce("Oracle");
            phone.setTime(new Date());
        } else if (name.endsWith("apple")) {
            phone.setProduce("Apple");
            phone.setTime(new Date());
        } else {
            phone.setProduce("未知");
            phone.setTime(new Date());
        }
        return phone;
    }

}

1.配置cxf的Servlet

<!--WebServcie-CXF配置Servlet start-->
    <servlet>
        <servlet-name>ws-cxf</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ws-cxf</servlet-name>
        <url-pattern>/ws/*</url-pattern>
    </servlet-mapping>

2. cxf的spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans
        xmlns = "http://www.springframework.org/schema/beans"
        xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
        xmlns:jaxws = "http://cxf.apache.org/jaxws"
        xsi:schemaLocation = "
			http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans.xsd
			http://cxf.apache.org/jaxws
			http://cxf.apache.org/schemas/jaxws.xsd
            ">
    <!--最終的訪問WSDL文件的地址是:http://localhost:8080/{1}/{2}/{3}?WSDL
        {1}:項目名,我這裏是SSMProjectMaven
        {2}:在web.xml文件中配置org.apache.cxf.transport.servlet.CXFServlet時的匹配路徑,我這裏是ws
        {3}:如下<jaxws:server></jaxws:server>標籤中的address屬性值,我這裏是phone
        故個人WSDL訪問地址是:http://127.0.0.1:8080/SSMProjectMaven/ws/phone?wsdl
    -->

    <jaxws:server id = "ws_phone" serviceClass = "at.flying.ws.service.PhoneService" address = "/phone">
        <!--發佈服務的Bean-->
        <jaxws:serviceBean>
            <ref bean = "phoneService" />
        </jaxws:serviceBean>
        <!--配置輸入日誌攔截器-->
        <jaxws:inInterceptors>
            <bean class = "org.apache.cxf.interceptor.LoggingInInterceptor" />
        </jaxws:inInterceptors>
        <!--配置輸出日誌攔截器-->
        <jaxws:outInterceptors>
            <bean class = "org.apache.cxf.interceptor.LoggingOutInterceptor" />
        </jaxws:outInterceptors>
    </jaxws:server>

</beans>

3.將cxf的Spring配置文件引入到Spring總配置文件中去:

<!--引入WebService-CXF配置文件-->
    <import resource = "at/flying/ws/spring/xml/ws-spring.xml" />

4.啓動服務器後,Spring會自動發佈服務,在瀏覽器中輸入訪問WSDL的地址,我這裏是:http://127.0.0.1:8080/SSMProjectMaven/ws/phone?wsdl。便可看到相關服務的WSDL文檔。

Tips:

訪問「http://127.0.0.1:8080/SSMProjectMaven/ws/」地址時,會出現發佈的WebService的詳細信息,以下:

若需測試發佈的WebService,則須要根據WSDL文件生成Java本地代碼。具體細節參見該篇博客:http://my.oschina.net/u/2608182/blog/735762

 

CXF官方網站:http://cxf.apache.org/

相關文章
相關標籤/搜索