Java 定义web服务接口(继承/重载)的最佳/标准方法是什么?

Java 定义web服务接口(继承/重载)的最佳/标准方法是什么?,java,web-services,axis,Java,Web Services,Axis,定义web服务接口的最佳/标准方法是什么 比如说, 我有两级轿车和公共汽车,它们都是汽车 如果我想为Car和Bus公开一个create方法,我有以下选项- 公共空间创建(车辆v) 创建公共空隙(字符串类型,车辆v) 公共空间创建(c车);和公共空间创建(总线b) 公共车辆(v车);及公共巴士(v车); 公共车辆(c车);及公共巴士(b巴士); 编辑--------------------------------- 我主要关心的是上述5个选项,web服务API的标准方式是什么。java编码的标准可

定义web服务接口的最佳/标准方法是什么

比如说,

我有两级轿车和公共汽车,它们都是汽车

如果我想为Car和Bus公开一个create方法,我有以下选项-

  • 公共空间创建(车辆v)
  • 创建公共空隙(字符串类型,车辆v)
  • 公共空间创建(c车);和公共空间创建(总线b)
  • 公共车辆(v车);及公共巴士(v车);
  • 公共车辆(c车);及公共巴士(b巴士); 编辑---------------------------------


    我主要关心的是上述5个选项,web服务API的标准方式是什么。java编码的标准可能不是Web服务的标准。

    第一个似乎是您可以使用的最通用的,您只需在您的
    汽车或
    总线
    类中重写它即可。

    第一个似乎是您可以使用的最通用的,你只需在你的
    汽车
    公交车
    类中覆盖它

    如果你对标准方式感兴趣,那么这些都不是。
    Web服务不支持操作重载,在WS-BP配置文件中是禁止的

    这实际上是有意义的,因为消息模式(doc/lit)希望操作名称作为消息有效负载的根来执行调度。
    此外,您谈论的是OO概念,但web服务标准是一种集成技术(不绑定到特定的语言或平台)。

    在任何情况下,如果您希望这样做,您可以通过tweeking在注释处实现重载,在您的情况下,我认为最好的选择是
    2
    ,以便消费者知道如何对其进行降级

    如果您对标准方式感兴趣,那么这些都不是。
    Web服务不支持操作重载,在WS-BP配置文件中是禁止的

    这实际上是有意义的,因为消息模式(doc/lit)希望操作名称作为消息有效负载的根来执行调度。
    此外,您谈论的是OO概念,但web服务标准是一种集成技术(不绑定到特定的语言或平台)。

    在任何情况下,如果您希望这样做,您可以通过tweeking在注释处实现重载,在您的情况下,我认为最好的选择是
    2
    ,以便消费者知道如何对其进行降级

    首先,您的方法被称为
    create
    ,因此按照惯例应该是一种工厂方法,因此应该返回车辆实例。您的方法看起来更像
    init
    ,因为它们接收Vehicle、Car、Bus的实例

    所以,我建议你修改你的签名

    Vehicle create(*一些参数*)

    现在谈谈鲁恩式。我建议您使用基于泛型的定义,如

    V create()

    可以调用此方法,而无需强制转换到特定的车辆子类

    关于争论。我相信你可以用

  • 字符串类型(如您所建议的)
  • 类类型
  • 定义特殊枚举车辆{汽车、公共汽车、自行车}并使用它

  • 或者你可以(按照你的建议)为每种类型的车辆创建几种工厂方法,如
    createCar
    createBus
    ,但我不喜欢这种方法,因为每次添加新类型的车辆时,都必须添加这种方法。

    首先,您的方法称为
    create
    ,因此按照惯例应该是一种工厂方法,因此应返回车辆实例。您的方法看起来更像
    init
    ,因为它们接收Vehicle、Car、Bus的实例

    所以,我建议你修改你的签名

    Vehicle create(*一些参数*)

    现在谈谈鲁恩式。我建议您使用基于泛型的定义,如

    V create()

    可以调用此方法,而无需强制转换到特定的车辆子类

    关于争论。我相信你可以用

  • 字符串类型(如您所建议的)
  • 类类型
  • 定义特殊枚举车辆{汽车、公共汽车、自行车}并使用它

  • 或者,您可以(如您所建议的)为每种类型的车辆创建几种工厂方法,如
    createCar
    createBus
    ,但我不喜欢这种方法,因为每次添加新类型的车辆时,您都必须添加这种方法。

    您能详细说明您的问题吗?他想知道应该使用哪种方法。(我想)你能详细谈谈你的问题吗?他想知道他应该使用哪个选项。(我想)谢谢你的回答。代码遵循OO概念,我觉得它可能对webservice不正确,这就是为什么提出质疑的原因。这意味着我编写了一个包装器webservice并公开了option 2方法。@Sharad:你是说使用哪个选项?正如前面所说的,你可以使用(2)并根据类型创建相应的对象。或者你也可以使用(5)@user384706。很抱歉,这个问题问得不准确。在您的回答中,您提到我提到的选项中没有一个是标准方式,那么什么是标准方式?Web服务是集成的手段,而不是实现技术。它们充当两个不同进程(任何平台)之间的通信通道。因此OO概念不适用;根据定义,使用任何语言编写的任何客户端(不包括OO)应该能够与WS进行通信。最好的方法是使服务仅传输数据,而不是尝试重用业务类并公开它们。我不确定是否允许您这样做,例如,公开一个服务,该服务接受某个数据对象传递给一个模块,该模块将决定它是汽车还是公共汽车。数据对象不会是一辆汽车或一辆汽车
    4.5.3 Distinctive Operations
    
    Operation name overloading in a wsdl:portType is disallowed by the Profile.