【问题标题】:Can we implement method overloading in web service class?我们可以在 Web 服务类中实现方法重载吗?
【发布时间】:2012-04-25 16:37:38
【问题描述】:

我想在Java web service类中实现方法重载,如下:

public String myMethod(User user)
{
    // My code
} 

public String myMethod(User[] user)
{
    for(int i=0; i<user.length; i++)
    {
        myMethod(user[i]);
    }
}

如果我将单个User 对象转发到myMethod(),它应该触发第一个方法,如果我发送一个Users 数组,它应该触发第二个方法。

在 WSDL 文件中它只显示一个方法。但是,如果我尝试为这两个调用调用 @WebMethod(operationName=""),我将无法生成 WSDL 文件。

【问题讨论】:

  • 我认为 Web 服务不可能超载,即使是这样,这也肯定不是好习惯

标签: java wsdl jax-ws axis2


【解决方案1】:

网络服务不允许操作重载。
WS-BPWSDL 1.2 中明确禁止它。
即使您找到了对此有一定支持的堆栈,我也建议不要遵循这种方法。
重载是OO 的概念。不要试图将它们应用于Service Oriented 范式

【讨论】:

  • 重载不是面向对象的概念,它与面向对象没有任何关系,例如,C语言是一种过程/结构化语言,它提供函数重载。
【解决方案2】:

重载 Web 服务方法并不困难。至少使用 Axis 1.4,它相当简单。如果服务中有两个重载方法,如下所示:

public String myMethod(String firstName, String lastName) throws RemoteException
public String myMethod(String name) throws RemoteException

然后是这样的请求:

http://localhost:8080/services/testService?method=myMethod&name=<name> 

将调用第二种方法。

还有这样一个请求:

http://localhost:8080//services/testService?method=myMethod&firstName=<first_name>&lastName=<last_name>

将调用第一个方法。

分辨率由轴完成。

【讨论】:

  • +1,很好的信息。尽管我与 Axis 合作了很长时间,但我不知道 Axis 可以做到这一点。我永远不会这样做,因为它不是“犹太”网络服务设计,但很高兴知道我是否遇到过必须实现这样的事情的极端情况。
猜你喜欢
  • 2011-07-08
  • 2010-12-04
  • 1970-01-01
  • 2020-09-13
  • 2019-11-27
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
相关资源
最近更新 更多