Сбой миграции на Spring WS 2.0 из-за отсутствия сопоставления конечных точек компонента?

#java #spring #spring-ws

#java #spring #spring-ws

Вопрос:

Мы использовали PayloadRootQNameEndpointMapping для сопоставления сценариев конечных точек (на основе языка сценариев, такого как groovy или что-то еще) с заданным корнем QName . Недавно мы пытались перенести spring ws на версию 2.0. Javadoc PayloadRootQNameEndpointMapping показывает, что класс помечен как устаревший.

PayloadRootQNameEndpointMapping Не рекомендуется с Spring Web Services 2.0 в пользу PayloadRootAnnotationMethodEndpointMapping

Поскольку аннотации статичны, мы не можем предоставить динамическую концепцию для конечных точек сценариев. До сих пор мы могли в общем виде сопоставлять компонент, который обрабатывает конечную точку скрипта (предоставляется с файлом скрипта и некоторыми контекстами), с корнем QName .

Коротко: как мы можем добиться сопоставления конечной точки старого доброго компонента с корневым QName без использования устаревшего API? Есть идеи?

Заранее благодарю вас.

Ответ №1:

Можете ли вы использовать что-то вроде SimpleMethodEndpointMapping для написания собственного диспетчера? Проверьте ссылку на источник

Комментарии:

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

Ответ №2:

Вы можете использовать более общий XPathPayloadEndpointMapping, где xpath будет указывать на корневой элемент.

 <bean id="endpointMapping" class="org.springframework.ws.server.endpoint.mapping.XPathPayloadEndpointMapping">
    <property name="expression" value="local-name(//*[1])" />
    <property name="endpointMap">
        <map>
            <entry key="rootElement" value="endpointRef" />
        </map>
    </property>
</bean>