2010-10-18 18 views
6

Supongamos que tengo los siguientes métodos declarados en mi servicio web:¿Cómo puedo sobrecargar el método en el servicio web Java?

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

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

El problema es que esta solución no funciona, me sale el siguiente excepción:

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) 

Si cambiar el nombre de los métodos para que tendrá diferentes nombres, todo funciona. ¿Es posible tener métodos sobrecargados en el servicio web? ¿Si es así, entonces cómo?

Respuesta

4

Por lo que recuerdo, hubo algunos trucos de SOAP que permiten algo así como la sobrecarga, pero no es así como debería ser: no utilice la sobrecarga para servicios web.

+0

Heh ... Actualmente me veo obligado a cambiar el nombre de los métodos para eliminar la sobrecarga. Pero no es una solución muy elegante. – uthark

+2

@uthark: en el contexto de WSDL, que no admite la sobrecarga, se podría argumentar que en realidad es la solución más elegante. –

+0

@Fabian Sí, en realidad antes de publicar la pregunta, he eliminado la sobrecarga. Pero quería saber si es posible sobrecargar. – uthark

2

Esto puede hacerse proporcionando una diferente (única) MessageName propiedad como abajo para las dos funciones anteriores

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

Estoy usando Java, no .net. – uthark

6

Trate de utilizar el nombre de Operación y esto debería funcionar correctamente en Java:

@WebMethod(operationName="newName") 
+1

No funciona con JAX WS RI. – uthark

+0

Funciona usando 'jaxws-rt-2.2.10'. –

Cuestiones relacionadas