Как я могу перегрузить метод в веб-сервисе Java? - PullRequest
6 голосов
/ 18 октября 2010

Предположим, у меня есть следующие методы, объявленные в моем веб-сервисе:

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

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

Проблема в том, что выше не работает, я получаю следующее исключение:

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)

Я переименовываю методы, чтобы они имели разные имена, все работает.Возможно ли иметь перегруженные методы в веб-сервисе?Если да, то как?

Ответы [ 3 ]

7 голосов
/ 03 февраля 2011

Попробуйте использовать Имя операции, и это должно работать правильно в Java:

@WebMethod(operationName="newName")
4 голосов
/ 18 октября 2010

Насколько я помню, были некоторые приемы SOAP, которые допускают что-то вроде перегрузки, но это не так, как должно быть - не используйте перегрузку для веб-сервисов.

2 голосов
/ 18 октября 2010

Это можно сделать, предоставив другое (уникальное) свойство MessageName, как показано ниже для обеих вышеуказанных функций

[WebMethod (MessageName="ABC")]
...