Подтвердить что ты не робот

Как я могу сделать параметр WebMethod

Мы используем подход "начать с Java" для создания веб-сервисов JAX-WS 2.0 с использованием стека Metro 1.5. Когда мы укажем стандартный инструмент, например SoapUI, на одну из наших веб-служб, это указывает, что параметры для WebMethods являются необязательными. Сгенерированный xsd показывает minOccurs = 0.

Мне нужен способ сделать необходимые параметры WebMethod (возможно, minOccurs = 1 в xsd) в подходе "начать с Java". Я думаю, что для этого есть аннотация Java, но я не смог ее найти. Аннотации XmlElement имеют обязательный атрибут, но XmlElement не может применяться к параметрам WebMethod.

Есть ли способ сделать мои параметры WebMethod необходимыми, за исключением ручного редактирования xsd и установки minOccurs на 1?

4b9b3361

Ответ 1

Я проверил, что Metro 2.0 позволяет вам установить @XmlElement(required=true) по параметру. Сгенерированный xsd не имеет minOccurs=0. Он оставляет minOccurs из сгенерированного xsd, поэтому он принимает значение по умолчанию 1.

Вам также необходимо обновить JDK, поместив JAX-WS 2.2 webservices-api.jar в каталог endorsed/.

Я разместил тот же вопрос на форумах Java.

Спасибо jitu за ответ и указав, что minOccurs по умолчанию 1, поэтому его выход из .xsd имеет желаемый эффект.

Когда @XmlElement (required = true) устанавливается в параметр SoapUI, больше не указывает, что параметр как необязательный.

Ответ 2

Сгенерированный xsd показывает minOccurs = 0.

Это в спецификации: любые непримитивы являются необязательными, необходимы только примитивы.

Мне нужен способ сделать требуемые параметры WebMethod (возможно, minOccurs = 1 в xsd) в подходе "начать с Java".

Это невозможно, если вы не используете примитивы, как ранее упоминалось.

И на самом деле это одна из причин, почему Java-первая отстой (да, разработчикам нравится, но он просто не работает): его хрупкость, контракт может измениться (!), его не дает вам весь необходимый вам контроль, он не хорошо вписывается в WS-Security и т.д. Так что, действительно, contract-first не нравится, но, по крайней мере, он работает.

Ответ 3

Вот еще одно обсуждение этого же вопроса. Согласно ответу Metro 2.0 поддерживает размещение @XmlElement в параметре метода, который должен решить мою проблему.

http://forums.java.net/jive/thread.jspa?messageID=385565&#385565

Metro 2.0 был выпущен 10 декабря 2009 года, так что его больше нет в EA. Я попробую и посмотрю, работает ли это.