2011-10-14 7 views
18

Mamy zestaw usług internetowych wdrożonych w JAX-WS i SOAPHandler, który dodaje atrybuty sterowania w nagłówkach SOAP. Dziś musimy dodać adnotację @HandlerChain w każdej nowej usłudze, którą tworzymy.Jak zdefiniować globalny Jhost-WS MessageHandler, który przechwytuje wszystkie usługi w przejrzysty sposób?

Chodzi o to, że nowi dostawcy usług nie muszą wiedzieć, że istnieje @HandlerChain.

Czy istnieje sposób na skonfigurowanie globalnego Handler, który przechwytuje wszystkie usługi działające w mojej WAR?

+1

Rozpoczęte bounty pojawi się być może niektóre odpowiedzi. –

+0

Czy masz obsługę w ramach WAR? czy chcesz tego przez WAR lub? Zastanawiam się tylko nad twoją funkcjonalnością. Myślę jednak, dlaczego nie należy umieszczać programu obsługi na interfejsie, który rozszerza interfejs usługi sieciowej (lub na klasie abstrakcyjnej, która rozszerza zakres usług)? –

+0

Chris, chodzi o to, aby udostępnić funkcję obsługi w WARach, aby uniknąć powielania kodu. Tak więc głównym celem (ale nie wiemy, czy jest to możliwe) jest dystrybucja tego handlarza w JAR, który powinien być dodany do każdego katalogu WAR WEB-INF/lib, a może do ostatecznego EAR. –

Odpowiedz

0

Sądzę, że nie ma na to sposobu na cieśninę. Ale dołączając do komentarzy podglądu, być może możesz utworzyć słoik ze wszystkimi programami obsługi, a następnie w każdym projekcie wojny zdefiniuj jedną klasę abstrakcyjną z żądanym łańcuchem i dziedzicz ją w swoich usługach. LUB Zamiast dołączać WAR, spróbuj spojrzeć na JNDI, aby dołączyć do środowiska wykonawczego.

+0

João, definiując klasy abstrakcyjnej z adnotacją tylko '' HandlerChain' nie działa. Program obsługi nie jest wywoływany. Jeśli opiszę klasę abstrakcyjną za pomocą '@ HandlerChain' i' @ Webservice', wystąpi błąd wdrożenia, mówiąc, że moja klasa 'FooService', która rozszerza abstrakcyjną, nie może być rzutowana na' javax.servlet.Servlet'. –

+0

Nie widzę, jak włączenie w czasie wykonywania jest bardziej elastyczne lub mniej sprzężone niż przypisywanie każdej klasy usług za pomocą '@ HandlerChain'. –

+0

Witam, przepraszam za opóźnienie w odpowiedzi. O klasach abstrakcyjnych, masz rację, że nie działają, w tej chwili odpowiadam na pytanie, że ma sens, że pracuję i nie testuję go, więc za to przepraszam. –

1

używam Wiosna jako Web Service Fabryki Bean i zdefiniowane rodzic fasola następujące:

<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> 

i zdefiniować nową usługę możemy ustawić tylko dominującą nowej usługi do "parentWebService"

1

nie byłoby łatwiej po prostu użyć filtrów w web.xml? Trochę jak robi to urlrewiter.

+0

czy możesz rozwinąć swoją odpowiedź? – MaVRoSCy

+1

nie jest dobrą odpowiedzią. –

1

Jedną z opcji, która może działać, jest aspectj. Z tekingiem bajtowym (lub w połączeniu ze sprężyną, jeśli chcesz) możesz utworzyć pojedynczy handler jako aspekt i spleść na wszystkie klasy (i pliki WAR również) poprzez wtyczkę maven. Nie próbowałem tego samodzielnie Myślę, że jedynym wyzwaniem byłoby uzyskanie uchwytu na nagłówku SOAP z aspektu.

0

Przynajmniej z JBoss AS i Wildfly można skonfigurować łańcuchy przed- i potknięcia w konfiguracji punktu końcowego. Na przykład. standalone.xml JBoss Application Server 8.1.0.Final ma następujące skonfigurowany domyślnie:

<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> 

Predefined client and endpoint configurations