Eccezione configurazione dell'asse Apache
Domanda
Sto utilizzando Apache Axis per connettere la mia app Java a un server web.Ho utilizzato wsdl2java per creare gli stub per me, ma quando provo a utilizzare gli stub, ottengo la seguente eccezione:
org.apache.axis.ConfigurationException:Nessun servizio nominato
<web service name>
è disponibile
qualche idea?
Soluzione
È solo un'ipotesi, ma sembra che il messaggio di errore riporti che hai lasciato vuoto il nome del servizio.Immagino che il codice che genera quel messaggio di errore sia simile a questo:
throw new ConfigurationException("No service named" + serviceName + " is available");
Altri suggerimenti
Secondo il documentazione collegato da @arnonym, questa eccezione è alquanto fuorviante.Nel primo tentativo di trovare il servizio viene lanciata e catturata una ConfigurationException.Viene registrato a livello DEBUG dalla classe ConfigurationException.Quindi viene effettuato un altro tentativo utilizzando un metodo diverso per trovare il servizio che potrebbe quindi avere esito positivo.La soluzione alternativa a questo problema è semplicemente modificare il livello di registro sulla classe ConfigurationException in INFO nel file log4j.properties:
log4j.logger.org.apache.axis.ConfigurationException = INFO
È un'eccezione utilizzata dal flusso di controllo di Axis.
http://wiki.apache.org/ws/FrontPage/Axis/DealingWithCommonExceptions--> org.apache.axis.ConfigurationException:Nessun servizio denominato XXX è disponibile
Questo è come appare il mio codice.Sembra che funzioni bene.Stai utilizzando un localizzatore di servizi o stai semplicemente creando il tuo servizio?
SomeServiceLocator locator = new SomeServiceLocator();
SomeService service = null;
try
{
service = locator.getSomeServiceImplPort();
}
catch (ServiceException e)
{
e.printStackTrace();
}
Non so quale versione di Axis stai utilizzando, ma sto utilizzando Axis2 sia per il server che per il client e Java2WSDL crea un endpoint predefinito per il servizio su localhost.Se crei lo stub del client con WSDL2Java, il costruttore predefinito dello stub punterà quindi a localhost.Se il servizio si trova su un altro endpoint è necessario utilizzare il costruttore con l'endpoint come parametro...Forse il problema non è affatto questo ma, come detto in altre risposte, senza il WSDL che stai utilizzando come input WSDL2Java è difficile dirlo.