使用Axis 2的Web服务:复杂类型还是简单类型参数?

时间:2009-02-03 12:17:24

标签: java service axis2 axis2c

问题是:

的专业化

OO style parameters vs type parameters

如果要定义Web服务操作,该怎么办?将参数作为复杂类型传递给像

public String insertPerson(Person person);

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

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

我不太确定。你觉得怎么样?

佛瑞德

2 个答案:

答案 0 :(得分:3)

我非常喜欢第一种方法。

但请注意,更改人员类型更改界面。 Webservice的接口(调用约定,...)由WSDL及其包含的XML Schema(或引用)定义。如果您更改其中任何一项,则表示您正在更改Web服务的界面。

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

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

答案 1 :(得分:0)

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

我通常更喜欢参数化方法,特别是如果参数计数很小(不超过4)。它的优点是WSDL文件和生成的SOAP消息更易于编写和读取。这对测试和调试非常有用。