2010-10-18 14 views
6

Supponiamo che io abbia i seguenti metodi dichiarati nel mio servizio web:Come posso sovraccaricare il metodo nel servizio web Java?

@WebMethod() 
public Long addNewApplication(String applicationName) throws ServiceManagerException { 
    // implementation 
} 

@WebMethod() 
public Long addNewApplication(String applicationName, ApplicationState status) throws ServiceManagerException { 
    // implementation 
} 

Il problema è che al di sopra non funziona, ottengo la seguente eccezione:

org.springframework.remoting.jaxws.JaxWsSoapFaultException: Cannot find dispatch method for Request=[SOAPAction="",Payload={http://example.org/applicationManager}addNewApplication]; nested exception is javax.xml.ws.soap.SOAPFaultException: Cannot find dispatch method for Request=[SOAPAction="",Payload={http://example.org/applicationManager}addNewApplication] 
at org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.doInvoke(JaxWsPortClientInterceptor.java:503) 
at org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.invoke(JaxWsPortClientInterceptor.java:487) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
at $Proxy123.addNewApplication(Unknown Source) 

Se rinominare i metodi in modo da avrà nomi diversi, tutto funziona. È possibile avere metodi sovraccaricati nel servizio Web? Se sì, allora come?

risposta

4

Per quanto ricordo, c'erano alcuni trucchi SOAP che abilitano qualcosa come l'overloading, ma non è come dovrebbe essere - non utilizzare l'overloading per i servizi web.

+0

Heh ... Attualmente ho dovuto rinominare i metodi per rimuovere l'overload. Ma non è una soluzione molto elegante. – uthark

+2

@uthark: nel contesto di WSDL, che non supporta il sovraccarico, si potrebbe obiettare che in realtà è la soluzione più elegante. –

+0

@Fabian Sì, in realtà prima di pubblicare una domanda ho rimosso il sovraccarico. Ma volevo sapere se è possibile sovraccaricare. – uthark

2

questo può essere fatto fornendo un diverso (unico) MessageName proprietà come sotto per entrambe le funzioni di cui sopra

[WebMethod (MessageName="ABC")] 
+2

Sto usando Java, non .net. – uthark

6

Cercare di utilizzare il nome di funzionamento e questo dovrebbe funzionare correttamente in Java:

@WebMethod(operationName="newName") 
+1

Non funziona con JAX WS RI. – uthark

+0

Funziona usando 'jaxws-rt-2.2.10'. –

Problemi correlati