首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Apache CXF 與 Spring 整合開發 Web 服務完整指南

     編輯:Java 相關知識

環境準備

  • Java 5+、Tomcat 5+、Ant、CXF 2.1 二進制分發包
  • 環境變量:JAVA_HOME、CATALINA_HOME、ANT_HOME、CXF_HOME
  • PATH 追加:%JAVA_HOME%\bin;%CATALINA_HOME%\bin;%ANT_HOME%\bin

為什麼選擇 CXF?

Apache CXF 是開源 Web 服務框架,支持 JAX-WS、SOAP、WSDL、MTOM、WS-* 全棧標準,可部署於 Tomcat 等輕量容器,也能運行於 JBoss、WebSphere、WebLogic 等應用服務器。核心特性:

  • 前端建模:簡單工廠 Bean、JAX-WS 實現、動態客戶端。
  • 工具鏈:Java Bean ↔ Web Service ↔ WSDL 雙向生成,Maven/Ant/Spring 無縫集成。
  • RESTful 支持:JAX-RS 實現(後續篇幅介紹)。
  • 多傳輸/綁定:SOAP/HTTP、JAXB、AEGIS、JSON、CORBA、JBI、SCA。

代碼優先開發訂單處理服務

1. 服務端點接口 (SEI)

package demo.order;
import javax.jws.WebService;

@WebService
public interface OrderProcess {
    String processOrder(Order order);
}

2. 服務實現

package demo.order;
import javax.jws.WebService;

@WebService(endpointInterface = "demo.order.OrderProcess")
public class OrderProcessImpl implements OrderProcess {
    public String processOrder(Order order) {
        return order.validate(); // 返回訂單 ID
    }
}

3. Spring 配置 beans.xml

<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxws="https://cxf.apache.org/jaxws"
       xsi:schemaLocation="
         https://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd
         https://cxf.apache.org/jaxws https://cxf.apache.org/schemas/jaxws.xsd">

    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>

    <jaxws:endpoint
        id="orderProcess"
        implementor="demo.order.OrderProcessImpl"
        address="/OrderProcess"/>
</beans>

4. Web 配置 web.xml

<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/beans.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

客戶端開發

Spring 客戶端配置 client-beans.xml

<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxws="https://cxf.apache.org/jaxws"
       xsi:schemaLocation="
         https://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans-2.0.xsd
         https://cxf.apache.org/jaxws https://cxf.apache.org/schema/jaxws.xsd">

    <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
        <property name="serviceClass" value="demo.order.OrderProcess"/>
        <property name="address" value="https://localhost:8080/orderapp/OrderProcess"/>
    </bean>

    <bean id="client" class="demo.order.OrderProcess"
          factory-bean="clientFactory" factory-method="create"/>
</beans>

客戶端調用代碼

public final class Client {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext ctx =
            new ClassPathXmlApplicationContext("demo/order/client/client-beans.xml");
        OrderProcess client = (OrderProcess) ctx.getBean("client");
        Order order = new Order();
        String orderID = client.processOrder(order);
        System.out.println("Order ID: " + orderID);
        System.exit(0);
    }
}

構建、部署、運行

  1. 目錄結構參考圖:
    代碼目錄結構
  2. ant deploy 生成 orderapp.war 部署至 Tomcat webapps。
  3. 啟動 Tomcat:catalina start。
  4. ant client 運行客戶端,控制台輸出訂單 ID。
    程序輸出

總結與展望

CXF 以極少代碼實現 Web 服務發布與調用,Spring 整合讓配置更聲明式。下一部分將介紹如何用 CXF + Spring 將 POJO 發布為 RESTful 服務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved