定义Web服务接口的最佳/标准方法是什么?
例如,
我有两个级别的Car和Bus,它们都扩展了Vehicle。
如果我想公开汽车和公共汽车的创建方法,我有以下选项 -
EDIT ---------------------------------
我主要关注的是上述5个选项,Web服务API的标准方式是什么。 java编码的标准可能不是Web服务的标准。
答案 0 :(得分:2)
第一个似乎是您可以使用的最通用的一个,您只需在Car
或Bus
类
答案 1 :(得分:2)
如果您对标准方式感兴趣,那么这些都不是。
Web服务不支持操作重载,并且在WS BP配置文件中禁止使用
WS BP
4.5.3 Distinctive Operations
Operation name overloading in a wsdl:portType is disallowed by the Profile.
这实际上是有意义的,因为消息模式(doc / lit)期望操作名称作为消息有效负载的根来进行调度。
此外,您正在谈论OO概念,但Web服务标准是指集成技术(不绑定到特定语言或平台)。
在任何情况下,如果你希望这样做,你可以通过注释和你的情况下的tweeking实现重载,恕我直言,我认为最好的选择是2
,以便消费者知道如何转发它。
答案 2 :(得分:1)
首先,您的方法称为create
,因此按照惯例应该是一种工厂方法,因此shouild 返回实例的Vehicle。您的方法看起来更像init
,因为它们接收车辆,汽车,公共汽车的实例。
所以,我建议你修改你的签名,如
Vehicle create(*some arguments*)
现在关于reurn类型。我建议你使用基于泛型的定义,如
<V extends Vehicle> V create()
可以在不转换为特定Vehicle子类的情况下调用此方法。
关于arguemtns。我相信你可以使用
或者你可以(如你的建议)为每种类型的车辆创建几种工厂方法,例如createCar
和createBus
,但我不喜欢这种方法,因为每次添加新类型的车辆时都需要添加这种方法。