问题是:
的专业化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);
我不太确定。你觉得怎么样?
佛瑞德
答案 0 :(得分:3)
我非常喜欢第一种方法。
但请注意,更改人员类型会更改界面。 Webservice的接口(调用约定,...)由WSDL及其包含的XML Schema(或引用)定义。如果您更改其中任何一项,则表示您正在更改Web服务的界面。
如果你纯粹从Java的角度来看它,那么你应该把它看作是Person类(以及它引用的任何其他类!)是Web服务接口的一部分!
好处是你可以对Person类进行兼容的更改(或更准确地说:Person类所代表的复杂类型/元素),而不会破坏旧的客户端。添加可选元素或属性就是一个很好的例子。新客户可以使用它,旧客户端不会知道它,但不会破坏(因为服务器不会强制执行它)。
答案 1 :(得分:0)
一个好的Web服务框架将能够理解复杂类型。可能需要进行一些调整。 Axis2可以应对它。
我通常更喜欢参数化方法,特别是如果参数计数很小(不超过4)。它的优点是WSDL文件和生成的SOAP消息更易于编写和读取。这对测试和调试非常有用。