2

问题是以下专业:

OO 样式参数与类型参数

如果要定义 Web 服务操作怎么办?让参数像这样的复杂类型传递

public String insertPerson(Person person);

看起来很酷,因为您可以在不更改接口定义的情况下更改 Person 的定义。但是,如果另一个用 C/C++ 实现的 WS 客户端(例如使用 gsoap 或axis2c)使用这个定义会怎样。访问在 Java 中使用 Axis2 实现的 Web 服务会不会有问题?使用简单的参数化方法可能更安全:

public String insertPerson(long id, String name, String personalId);

我不太确定。你怎么看?

弗雷德

4

2 回答 2

3

我非常喜欢第一种方法。

但请注意,更改 Person 类型确实会更改界面。Web 服务的接口(调用约定,...)由 WSDL 和它包含(或引用)的 XML Schema 定义。如果您更改其中任何一个,您将更改 Web 服务的界面。

如果您纯粹从 Java 的角度来看它,那么您应该将其视为 Person 类(以及它引用的任何其他类!)是 Web 服务接口的一部分!

好处是您可以对 Person 类(或者更准确地说:由 Person 类表示的复杂类型/元素)进行兼容更改,而不会破坏旧客户端。添加可选元素或属性就是一个很好的例子。新客户端可以使用它,而旧客户端不会知道它,但不会中断(因为服务器不会强制它的存在)。

于 2009-02-03T12:47:55.740 回答
0

一个好的 Web Services 框架将能够理解复杂的类型。可能需要进行一些调整。Axis2 可以应付。

我通常更喜欢参数化方法,尤其是在参数数量很少(不超过 4 个)的情况下。它的优点是 WSDL 文件和生成的 SOAP 消息更易于编写和阅读。这对于测试和调试非常有帮助。

于 2009-02-03T12:29:43.903 回答