2012-05-03 11 views
7

Ho un caso d'uso che ha richiesto tutte le chiamate a NewWebService vengono instradate al OldWebService, se la richiesta SOAP non convalida contro XSD e WSDL di NewWebService. NewWebService si trova su ServerA e OldWebService si trova su ServerB.Redirect/Forward SOAP Web Service richieste a un altro servizio Web

In astratto, so che ho bisogno di un meccanismo che mi consenta di prendere una richiesta SOAP che colpisce NewWebService, inviarlo a OldWebService, quindi restituire il risultato SOAP al client. La mia limitata esperienza con Spring-ws sta rendendo difficile decidere come ottenerlo.

Il mio primo pensiero è stato quello di creare un client SOAP nel NewWebService che chiama OldWebService ogni volta che il payload non può essere convalidato. È questa la soluzione migliore oppure esiste un modo migliore per consentire a NewWebService di agire come pass-through per determinate richieste?

+0

C'è un'opzione per instradare le richieste con WS-Addressing.Refer a [http://static.springsource.org/spring-ws/sites/2.0/reference/html/server.html#server -ws-addressing –

risposta

5

La mia soluzione era scrivere un SoapRequestFilter personalizzato che implementa un javax.servlet.Filter e una nuova classe che estende HttpServletRequestWrapper. Poiché HttpServletRequestWrapper implementa l'interfaccia HttpServletRequest, l'estensione del wrapper consente di copiare HttpRequest e agire sullo stream senza consumare l'oggetto e causare problemi a valle.

Una volta avuti il ​​filtro e il wrapper, sono stato in grado di analizzare l'endpoint e il payload da HttpRequest. Se è stato necessario reindirizzare la richiesta, ho creato una nuova HttpUrlConnection sul vecchio SOAP WebService e ho impostato InputStream da quella risposta a OutputStream di HttpResponse.

+6

Hai condiviso questo codice ovunque? Sarei interessato a vedere la tua implementazione. – youdonotexist

Problemi correlati