zig*_*ggy 9 java spring soap spring-ws java-ee
使用Spring-WS时,配置非常小,因为我一直在使用注释.最近我一直试图测试如何在SOAP响应中包含附件并使其工作我最终得到了以下配置.
<bean id="messageReceiver"
class="org.springframework.ws.soap.server.SoapMessageDispatcher">
<property name="endpointAdapters">
<list>
<ref bean="defaultMethodEndpointAdapter" />
</list>
</property>
</bean>
<bean id="defaultMethodEndpointAdapter"
class="org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter">
<property name="methodArgumentResolvers">
<list>
<!-- Be careful here! You might need to add more processors if you do
more than webservices! -->
<ref bean="marshallingPayloadMethodProcessor" />
</list>
</property>
<property name="methodReturnValueHandlers">
<list>
<ref bean="marshallingPayloadMethodProcessor" />
</list>
</property>
</bean>
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath" value="com.mypackage.ws" />
<property name="mtomEnabled" value="true" />
</bean>
<bean id="marshallingPayloadMethodProcessor"
class="org.springframework.ws.server.endpoint.adapter.method.MarshallingPayloadMethodProcessor">
<constructor-arg ref="marshaller" />
<constructor-arg ref="marshaller" />
</bean>
Run Code Online (Sandbox Code Playgroud)
通过上面的内容,我可以生成带附件的SOAP响应.问题是我真的不明白发生了什么.(即上述配置是做什么的,可以启用MTOM附件.
要启用附件:
为什么我需要配置JAXB marshaller?没有此配置,所有不使用附件的Web服务都可以正常工作.我所要做的就是使用@EndPoint注释.非附件Web服务的请求/响应对象也是基于JAXB的,所以这表明我可能没有做到这一点(即使它有效).
上面配置中显示的messageReceiver和defaultmethodEndpointAdapter bean的用途是什么?没有这些,非附件端点工作正常.
最后是否可以注释上述任何配置而不是XML?我注意到JAX-WS有一个@MTOM注释但是找不到Spring-WS的等价物
即使服务工作正如我所期望的那样,我有点担心配置可能不正确.我想理解为什么这些是必需的,因此我可以更好地决定我所做的是对还是错.
提前致谢
如果您不自己创建这些 bean,Spring 会自动为您创建这些 bean。这就是为什么你以前不需要这样做。
要启用 mtom,请在编组器上设置 mtomEnabled = true。由于您自己创建了编组器,因此您必须专门创建依赖于它的 bean,否则 Spring 不会知道它。
我不能 100% 确定 MarshallingPayloadMethodProcessor 是否是默认创建的,而无需您自己定义,但我 100% 确定 DefaultMethodEndpointAdapter 是。
DefaultMethodEndpointAdapter 的工作只是映射您的端点,它能够执行一些任务,例如在调用端点之前委托给参数处理程序,以及从中获取返回值并将其转换为 mtom 消息。这就是 MarshallingPayloadMethodProcessor 的作用。
上面也可以注释。查看位于此处的 Spring WS mtom 示例:https://github.com/spring-projects/spring-ws-samples/tree/master/mtom
总而言之,您必须创建所有额外的 beans 的原因是因为您自定义了编组器。既然您这样做了,您还必须创建任何依赖于它的 bean,并传入依赖项(除非它使用 Spring 将按照约定查找的 bean 名称(如 messageSource)。
归档时间: |
|
查看次数: |
4819 次 |
最近记录: |