Подтвердить что ты не робот

Как определить глобальный JAX-WS MessageHandler, который прозрачно передает все службы?

У нас есть набор веб-сервисов, реализованных в JAX-WS и SOAPHandler, который добавляет атрибуты управления в заголовки SOAP. Сегодня нам нужно добавить аннотацию @HandlerChain в каждую новую службу, которую мы создаем.

Идея заключается в том, что разработчикам новых сервисов не нужно знать, что существует @HandlerChain.

Есть ли способ настроить глобальный Handler, который перехватывает все службы, запущенные в моей WAR?

4b9b3361

Ответ 1

Я использую Spring как веб-службу Factory Bean и определил родительский Bean следующий:

 <bean id="parentWebService" abstract="true" class="org.jvnet.jax_ws_commons.spring.SpringService">
        <property name="handlers">
            <list>
                <bean class="com.tosan.sipa.framework.webservice.handler.AuthenticationHandler"/>
            </list>
        </property>
   </bean>

и в определении новой службы мы устанавливаем родительский элемент новой службы в родительский WebService

Ответ 2

Не проще ли было бы использовать фильтры в web.xml? Немного похоже на urlrewiter.

Ответ 3

Один из вариантов, который может работать, - aspectj. Если вы хотите использовать байткод (или в сочетании с spring), вы можете создать один обработчик как аспект и, возможно, перетащить его во все классы (и файлы WAR) через плагин maven. Я не пробовал это сам, я думаю, единственная задача - получить дескриптор заголовка SOAP с точки зрения.

Ответ 4

Я думаю, что нет никакого прямого способа сделать это. Но, присоединяясь к комментариям предварительного просмотра, возможно, вы можете создать банку со всеми своими обработчиками, а затем в каждом военном проекте определить один абстрактный класс с цепочкой, которую вы хотите, и наследовать ее в своих сервисах. ИЛИ Вместо того, чтобы включать WAR, попробуйте посмотреть JNDI, чтобы включить включение во время выполнения.

Ответ 5

По крайней мере, с JBoss AS и Wildfly вы можете настроить цепочки до и после обработки в конфигурации конечной точки. Например. Wildfly 8.1.0.Final standalone.xml имеет следующие настройки по умолчанию:

<subsystem xmlns="urn:jboss:domain:webservices:1.2">
    <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>
    <endpoint-config name="Standard-Endpoint-Config"/>
    <endpoint-config name="Recording-Endpoint-Config">
        <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
            <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
        </pre-handler-chain>
    </endpoint-config>
    <client-config name="Standard-Client-Config"/>
</subsystem>

Предопределенные конфигурации клиентов и конечных точек