Как я могу сделать параметр 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?
Ответы
Ответ 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񞈝
Metro 2.0 был выпущен 10 декабря 2009 года, так что его больше нет в EA. Я попробую и посмотрю, работает ли это.