使用 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>
有了以上内容,我可以生成带有附件的 SOAP 响应。问题是我真的不明白发生了什么。(即,启用 MTOM 附件的上述配置是做什么的。
要启用附件:
为什么需要配置 JAXB 编组器?如果没有此配置,所有不使用附件的 Web 服务都可以正常工作。我所要做的就是使用@EndPoint 注释。非附件 web 服务的请求/响应对象也是基于 JAXB 的,因此这表明我可能没有正确执行此操作(即使它有效)。
上述配置中显示的 messageReceiver 和 defaultmethodEndpointAdapter bean 的用途是什么?没有这些,非附件端点可以正常工作。
最后可以注释上述任何配置而不是 XML 吗?我注意到 JAX-WS 有一个 @MTOM 注释,但找不到 Spring-WS 的等价物
尽管服务按我预期的那样工作,但我有点担心配置可能不正确。我想了解为什么需要这些,因此也许我可以更好地决定我所做的是对还是错。
提前致谢