Mola WS e PayloadRootAnnotationMethodEndpointMapping
Pergunta
Eu tenho dois pontos finais usando anotações. Quero aplicar diferentes interceptores para cada um deles. (Sendo um deles um interceptor seguro eo outro não sendo seguro) Existe uma maneira de fazer isso usando PayloadRootAnnotationMethodEndpointMapping
? Alguém tem uma idéia?
De acordo com o applicationContext-ws.xml do exemplo companhia aérea que vem com Primavera:
Os mapeamentos de endpoint mapear a partir de um solicitar a um ponto final. Porque nós só deseja a intercepção de segurança para ocorrer durante a
GetFrequentFlyerMileageEndpoint
, nós definir dois mapeamentos: um com o securityInterceptor, e um geral sem ele.
Assim é a única maneira de fazer isso é ter dois mapeamentos diferentes:? org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping
e org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping
para os seguros
Solução
Quando você dá um conjunto de interceptor a um EndpointMapping
, em seguida, os interceptores serão aplicadas a todos os terminais mapeados pelo que EndpointMapping
. Então, se você quer algumas Endpoints para obter um conjunto diferente de interceptores para outros parâmetros, então sim, você precisa de duas feijão EndpointMapping
diferentes, um com o interceptor seguro e mapeamento para os pontos finais seguras, e outro sem interceptores e mapeamento de pontos de extremidade não garantidos .
Quais implementações EndpointMapping
você uso é dependente da aplicação e que tipos de Endpoints utiliza.
Outras dicas
Você também pode usar os sws:. Elemento interceptores em seu contexto de aplicação para especificar interceptores particulares com endpoints particulares, filtradas por sua soapAction ou payloadRoot atributos
<sws:interceptors>
<bean class="samples.MyGlobalInterceptor"/>
<sws:payloadRoot namespaceUri="http://www.example.com">
<bean class="samples.MyPayloadRootInterceptor"/>
</sws:payloadRoot>
<sws:soapAction value="http://www.example.com/SoapAction">
<bean class="samples.MySoapActionInterceptor1"/>
<ref bean="mySoapActionInterceptor2"/>
</sws:soapAction>
</sws:interceptors>
<bean id="mySoapActionInterceptor2" class="samples.MySoapActionInterceptor2"/>