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 社区中所有即将举行的活动。

查看所有