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




web-services jaxb jax-ws java-metro-framework (4)

Мы используем подход «начать с 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?


Answers

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

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

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

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

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


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

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

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


Я проверил, что 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, больше не указывает, что параметр является необязательным.


Вы можете сделать это с помощью дженериков:

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
    Map.Entry<Integer, Integer> entry = entries.next();
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}




java web-services jaxb jax-ws java-metro-framework