При работе с 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? Все веб-сервисы, которые не используют вложения, прекрасно работают без этой конфигурации. Все, что мне нужно сделать, это использовать аннотацию @EndPoint. Объекты запроса/ответа для веб-службы без вложений также основаны на JAXB, поэтому это говорит о том, что, возможно, я делаю это неправильно (, хотя это работает ).
Какова цель bean-компонентов messageReceiver и defaultmethodEndpointAdapter, показанных в приведенной выше конфигурации? Конечные точки без вложений работают без них.
И, наконец, можно ли аннотировать любую из приведенных выше конфигураций вместо XML?Я заметил, что JAX -WS имеет аннотацию @MTOM, но не смог найти эквивалент для Spring -WS
. Несмотря на то, что службы работают так, как я ожидаю, я немного беспокоюсь, что, возможно, конфигурация неверна. Я хотел бы понять, почему это необходимо, и, возможно, я смогу принять лучшее решение относительно того, правильно ли то, что я делаю, или неправильно.
Заранее спасибо