2009-02-03 6 views
2

вопрос является конкретизацией:Веб-сервис с использованием Axis 2: параметры сложного типа или простого типа?

OO style parameters vs type parameters

Что делать, если вы хотите, чтобы определить операцию веб-службы? Для того, чтобы иметь параметры неоспоримые передаются как сложные типы, как этого

public String insertPerson(Person person); 

кажется довольно прохладно, так как вы можете изменить определение лица без изменения определения интерфейса. Но что, если другой WS Client, реализованный в C/C++ (например, с gsoap или axis2c), использует это определение. Может возникнуть проблема с доступом к веб-службе, реализованной с использованием Axis2 в Java? Может быть, более безопасно использовать простой параметризованный подход:

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

Я не совсем уверен в этом. Как вы думаете?

Фред

ответ

0

Хорошая структура Web Services будут иметь возможность понять сложный тип. Может потребоваться некоторая настройка. Axis2 может справиться с этим.

Обычно я предпочитаю параметризованный подход, особенно если количество параметров невелико (не более 4). Это имеет то преимущество, что файл WSDL и сформированное сообщение SOAP легче писать и читать. Это очень полезно для тестирования и отладки.

3

Я предпочитаю первый подход.

Но имейте в виду, что изменение типа Person делает изменить интерфейс. Интерфейс (вызов конвенции, ...) веб-сервиса определяется WSDL и XML-схемой, в которую он включает (или ссылки). Если вы измените какой-либо из них, вы измените интерфейс своего веб-сервиса.

Если вы посмотрите на него исключительно с точки зрения Java, тогда вы должны рассматривать его так, как если бы класс Person (и любой другой класс, который он ссылается!) Является частью интерфейса веб-сервиса!

Хорошо, что вы можете выполнять совместимые изменения в классе Person (а точнее: сложный тип/элемент, представленный классом Person), не нарушая старых клиентов. Хорошим примером является добавление необязательного элемента или атрибута. Новые клиенты могут использовать его, и старые клиенты не будут знать об этом, но не будут ломаться (поскольку сервер не обеспечивает его существования).