Spring Web Services 1.5 中的新功能

工程 | Arjen Poutsma | 2008 年 3 月 29 日 | ...

經過大約六個月的努力,我很高興地宣佈 Spring Web Services 1.5.0 已釋出! 在這篇文章中,我想回顧一下一些主要的新功能。

新傳輸

1.5 版本包括兩個新的傳輸:JMS 和電子郵件。 使用這些新的傳輸不需要任何 Java 程式碼更改:只需新增一些配置即可! JMS 傳輸與 Spring 2 的 Message-Driven POJO 模型完美整合,如以下從 airline 示例應用程式中提取的配置所示


<jms:listener-container connection-factory="connectionFactory">
  <jms:listener destination="RequestQueue" ref="messageListener"/>
</jms:listener-container>

<bean id="messageListener" class="org.springframework.ws.transport.jms.WebServiceMessageListener">
  <property name="messageFactory" ref="messageFactory"/>
  <property name="messageReceiver" ref="messageReceiver"/>
</bean>

除了標準的 JMS 配置(連線工廠和要偵聽的目標名稱)之外,您只需要定義一個 WebServiceMessageListener,併為其提供您正在使用的訊息工廠的引用(通常是 SaajSoapMessageFactory)和訊息排程程式。 如果您仍然停留在 EJB 領域,甚至還有一個 MessageDrivenBean 供您使用! 檢視 airline 示例或 參考文件 以獲取更多詳細資訊。

在客戶端,同樣簡單。 配置 WebServiceTemplate 以使用 JmsMessageSender,並指定一個jms要將訊息傳送到的 URL。 這是一個示例,再次從 airline 示例中獲取


<bean id="jmsClient" class="org.springframework.ws.samples.airline.client.jms.JmsClient">
  <property name="defaultUri" value="jms:RequestQueue"/>
  <property name="messageSenders">
    <bean class="org.springframework.ws.transport.jms.JmsMessageSender">
      <property name="connectionFactory" ref="connectionFactory"/>
    </bean>
  </property>
</bean>

除了 JMS 傳輸之外,Spring Web Services 1.5 還引入了一種電子郵件傳輸,從而符合 Zawinski 的軟體包絡定律 ;)。 此傳輸將輪詢您的 POP3 或 IMAP 伺服器以獲取新訊息,或者 - 如果您的伺服器支援 - 使用 IMAP IDLE 命令非同步接收新訊息。

基於 WSS4J 的 WS-Security 實現

另一個新功能是基於 Apache WSS4J 的 WS-Security 實現。 在 1.0 中,Spring Web Services 已經有一個基於 SUN XWSS 的 WS-Security 實現,但這需要 Java 1.5,並且只能在 SUN JDK 上執行。 基於 WSS4J 的解決方案可在 JDK 1.4(與 Spring-WS 的其餘部分一樣)和用於 WebSphere 的 IBM JDK 上執行。

有關更多詳細資訊,請參閱 參考文件

WS-Addressing 支援

WS-Addressing 是一個 W3C 規範,它定義了一種傳輸中立的路由機制。 它基於一個操作SOAP 標頭,分別指示 SOAP 訊息的目標和意圖。 Spring Web Services 1.5.0 實現了 WS-Addressing 規範的 1.0(2006 年 5 月)版本,以及仍在廣泛使用的 2004 年 8 月版本。

您可以透過 XML(在應用程式上下文中)或透過註釋來配置 WS-Addressing


package samples;

import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.soap.addressing.server.annotation.Action

@Endpoint
public class AnnotationOrderEndpoint {
  private final OrderService orderService;

  public AnnotationOrderEndpoint(OrderService orderService) {
    this.orderService = orderService;
  }

  @Action("http://samples/RequestOrder")
  public Order getOrder(OrderRequest orderRequest) {
    return orderService.getOrder(orderRequest.getId());
  }

  @Action("http://samples/CreateOrder")
  public void order(Order order) {
    orderService.createOrder(order);
  }

}

在這種情況下,如果傳入一個帶有操作標頭值http://samples/RequestOrder的 WS-Addressing 訊息,它將呼叫getOrder()方法。 您可以檢視 stockquote 示例或 參考文件 以獲取更多詳細資訊。

另一個巧妙的新功能是 @Endpoints 現在使用 @Component 註釋,因此如果您使用 Spring 2.5 元件掃描您的端點將自動被拾取,並且不需要 XML 配置! 對於 Spring-WS 元件的配置,我們現在提供兩個新的名稱空間,用於配置 OXM marshaller 和其他常見構造。 例如,這是 JAXB2 marshaller 的配置


<oxm:jaxb2-marshaller id="marshaller" contextPath="org.springframework.ws.samples.airline.schema"/>

其他新功能

Spring Web Services 1.5 還引入了以下其他新功能

  • 對 Java 6 的原生支援,包括 JAXP 1.4,以及捆綁的 SAAJ 1.3 和 JAXB 2.0,以及 嵌入式 HTTP 伺服器。 有關更多詳細資訊,請參閱 stockquote 示例,
  • Spring-WS jar 現在是 OSGi 捆綁包,使它們在基於 OSGi 的應用程式中更容易使用,
  • 一個新的和改進的 XSD 到 WSDL 生成器,它可以內聯包含和匯入的 XSD,從而使您的 WSDL 更容易為不遵循這些引用的客戶端提供服務,
  • 一種新的客戶端攔截機制,包括 WS-Security 支援,以及
  • 對 Spring Security 的支援

更多資訊

如果您想嘗試 Spring Web Services 1.5,您可以訪問 站點,或直接訪問 下載部分

2008-04-18 更新:更改了 JMS 配置以使用名稱空間。

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

取得領先

VMware 提供培訓和認證,以加速您的進步。

瞭解更多

獲取支援

Tanzu Spring 在一個簡單的訂閱中提供對 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案。

瞭解更多

即將舉行的活動

檢視 Spring 社群中所有即將舉行的活動。

檢視所有