CXF - Как объявить атрибут обязательным и не примитивным? - PullRequest
5 голосов
/ 14 сентября 2011

У меня есть метод веб-службы, который получает объект.Одним из атрибутов является «интервал», который является целым числом.

Я хотел бы сделать этот атрибут обязательным, но без указания значения по умолчанию - я хочу, чтобы пользователь был обязан явно установить значение.

Если я использую int interval - атрибут выставляется как int, и если пользователь не устанавливает атрибут явно, будет отправлен ноль (Java по умолчанию для примитива int).

Если я использую Integer interval - атрибут представлен как Integer и объявлен необязательным в WSDL, поэтому пользователь не может увидеть, что он требуется перед отправкой запроса.

Если я использую Integer interval с @XmlElement(required = true) или @XmlElement(nillable = false) - атрибут представлен как int.

Атрибут может иметь любое целое число - отрицательное, нулевое и положительное, поэтому я не могу использовать значение по умолчанию, чтобы указать, что атрибут не был установлен явно.

Я могу использовать BigInteger interval с @XmlElement(required = true), но мы упускаем преимущества использования типа ядра Integer.

Я хотел бы выставить атрибут как Integer, поэтому я получу ноль, если мыэ-э, атрибут не установлен, и в то же время я хотел бы, чтобы WSDL показал, что атрибут является обязательным, чтобы пользователи знали, что он требуется, просто взглянув на WSDL.

1 Ответ

3 голосов
/ 06 октября 2011

С @XmlElement(required = true) WSDL был правильным, но проблема была в том, что при использовании инструмента org.apache.cxf.tools.wsdlto.WSDLToJava на моем WSDL клиент генерировался с int interval вместо Integer interval.

Решение состоит в том, чтобы передать параметр "-b" в инструмент wsdl2java с путем к файлу привязки jaxb, который отображает xsd: int в java.lang.Integer:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
           xmlns:xsd="http://www.w3.org/2001/XMLSchema"
           jaxb:version="2.0">
  <jaxb:globalBindings>
    <jaxb:javaType name="java.lang.Integer"
                   xmlType="xsd:int" />
  </jaxb:globalBindings>
</jaxb:bindings>

, используя @XmlElement(required = true) иопция "-b" сохранила требуемый элемент (minOccurs = "1") и представила его как целое число клиенту Java.

Дополнительная информация: http://cxf.547215.n5.nabble.com/How-to-declare-an-attribute-required-and-non-primitive-td4815370.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...