Java 定义web服务接口(继承/重载)的最佳/标准方法是什么?
定义web服务接口的最佳/标准方法是什么 比如说, 我有两级轿车和公共汽车,它们都是汽车 如果我想为Car和Bus公开一个create方法,我有以下选项-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编码的标准可
我主要关心的是上述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.