如何在JavaWeb服务中重载方法?
假设我在web服务中声明了以下方法:如何在JavaWeb服务中重载方法?,java,web-services,spring,jax-ws,Java,Web Services,Spring,Jax Ws,假设我在web服务中声明了以下方法: @WebMethod() public Long addNewApplication(String applicationName) throws ServiceManagerException { // implementation } @WebMethod() public Long addNewApplication(String applicationName, ApplicationState status) throws Service
@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)
如果我重命名方法,使它们具有不同的名称,那么一切都会正常工作。Web服务中是否可能存在重载方法?如果是,那么怎么做?据我所知,有一些SOAP技巧可以启用重载之类的功能,但事实并非如此——不要对web服务使用重载。这可以通过为上述两个函数提供不同的(唯一的)MessageName属性来实现,如下所示
[WebMethod (MessageName="ABC")]
尝试使用操作名称,这在Java中应该可以正常工作:
@WebMethod(operationName="newName")
嘿。。。目前,我被迫重命名这些方法以消除重载。但这不是一个非常优雅的解决方案。@uthark:在不支持重载的WSDL环境中,有人可能会说它实际上是最优雅的解决方案。@Fabian Yep,实际上在发布问题之前,我已经删除了重载。但我想知道是否有可能超载。