2009-02-03 58 views
2

问题是一个专业化:使用Axis 2的Web Service:复杂类型还是简单类型参数?

OO style parameters vs type parameters

如果要定义Web Service操作?已参数beeing复杂类型通过这样

public String insertPerson(Person person); 

因为你是能够改变人的定义,不改变接口的定义似乎很酷。但是如果以C/C++实现的另一个WS客户端(例如gsoap或axis2c)使用了这个定义呢?访问在Java中使用Axis2实现的Web服务会不会是一个问题?使用简单的参数化方法可能会更安全:

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

我对此不太确定。你怎么看?

Fred

回答

0

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

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

3

我非常喜欢第一种方法。

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

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

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