2012-11-27 14 views
9

Ho un'implementazione di servizio Web generata utilizzando wsimport da un WSDL. Questo servizio è distribuito in un server Tomcat in una webapp di Spring. Il file di configurazione di primavera (solo la parte webservice) è come questoCome modificare il sapone generato automaticamente: indirizzo da un WSDL Webservice JAX-WS distribuito con Spring

<wss:binding url="/fooService"> 
    <wss:service> 
     <ws:service bean="#fooService"> 
    </wss:service> 
</wss:binding> 

Quando schiero questo webapp in Tomcat, posso ottenere il WSDL se vado a

http://localhost:8080/foo/fooService?wsdl 

e il sapone wsdl: indirizzo proprietà è così:

<service name="FooService"> 
    <port name="FooService" binding="tns:FooServiceBinding"> 
     <soap:address location="http://localhost:8080/foo/fooService"/> 
    </port> 
</service> 

E per ora, va tutto bene.

Il problema è che in produzione, disponiamo di un server Web Apache e questo server reindirizza le richieste a Tomcat. Funziona anche, ma quando otteniamo il WSDL, il soap: address è ancora localhost: 8080 e abbiamo bisogno che questo sia l'url pubblico al webservice.

Qualche idea?

Grazie mille.

+0

favore, può farmi sapere che cosa la vostra primavera xml intestazioni dello schema sono stati in grado di soddisfare la primavera vincolante per la porta e sapone nel frammento di codice qui sopra per registrare l'indirizzo endpoint personalizzato e porto. Ho provato http://jax-ws.dev.java.net/spring/core, servlet e local-transport, ma non vedo nessuno di questi riferimenti. Di conseguenza, ricevo sassofrassozioni. Non riesci a trovare una risposta facile. Grazie in anticipo per qualsiasi assistenza. – arcseldon

+0

doh! ok, stai facendo riferimento al file wsdl qui. mi scuso, sto cercando come sovrascrivere l'indirizzo endpoint in configurazione. – arcseldon

risposta

8

Beh, ho trovato una soluzione:

Sembra che JAX-WS genera automaticamente questa proprietà. Ho trovato che altre implementazioni di framework webservice, permettono all'utente di cambiare questo hardcoding l'url in una proprietà, ma sembra che JAX-WS non lo faccia. Qualcuno sa se c'è un modo?

In ogni caso, ho trovato una soluzione alternativa: utilizzando le proprietà proxyName e proxyPort nella configurazione di Tomcat Connector, è possibile indicare a Tomcat che si trova dietro un proxy (nel nostro caso, server Apache) e che la porta "reale" per i client è 80.

Effettuando questa modifica, il sapone generato automaticamente: l'indirizzo contiene il valore corretto.

Riferimenti:

+0

qualcuno sa come farlo in wildfly? – Smalcat

+1

anche il nostro server si trovava dietro un loadbalancer e avevo anche problemi nel cambiare l'http in https. Dopotutto l'ho risolto aggiungendo i tre valori 'scheme =" https "proxyName =" host.com "proxyPort =" 443 "' al mio server.xml di Tomcat. – Steve

+0

Hey @Smalcat Hai scoperto come risolvere su WildFly. Affrontare un problema simile qui. Per favore, condividi se lo hai fatto. Grazie! – Enoobong

Problemi correlati