Spring WS и JAXB -Настройка SOAPMessageDispatcher, DefaultMethodEndpointAdapter и MarshallingPayloadMethodProcessor

При работе с 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

. Несмотря на то, что службы работают так, как я ожидаю, я немного беспокоюсь, что, возможно, конфигурация неверна. Я хотел бы понять, почему это необходимо, и, возможно, я смогу принять лучшее решение относительно того, правильно ли то, что я делаю, или неправильно.

Заранее спасибо

9
задан ziggy 17 July 2012 в 14:13
поделиться