如何在Java Web服务中重载方法?

uth*_*ark 6 java spring web-services jax-ws

假设我在我的Web服务中声明了以下方法:

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

@WebMethod()
public Long addNewApplication(String applicationName, ApplicationState status) throws ServiceManagerException {
    // implementation
}
Run Code Online (Sandbox Code Playgroud)

问题是上面不起作用,我得到以下异常:

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)
Run Code Online (Sandbox Code Playgroud)

如果我重命名方法以便它们具有不同的名称,那么一切都有效.是否可以在Web Service中使用重载方法?如果是,那怎么样?

小智 7

尝试使用操作名称,这应该在Java中正常工作:

@WebMethod(operationName="newName")
Run Code Online (Sandbox Code Playgroud)


Boz*_*zho 4

据我记得,有一些 SOAP 技巧可以实现诸如重载之类的功能,但事实并非如此——不要对 Web 服务使用重载。

  • @uthark:在不支持重载的 WSDL 上下文中,人们可能会说它实际上是最优雅的解决方案。 (2认同)