CXF / JAXB Code-first service: изменить XMLSchemaType входных данных - PullRequest
2 голосов
/ 09 ноября 2011

Я работаю над CXF / JAXB веб-сервисом с первым кодом.Я хотел бы иметь возможность изменять определения WSDL некоторых входных данных.

Например, учитывая следующий фрагмент интерфейса:

@WebMethod
public void Something(@WebParam(name="date") Date date);

WSDL сгенерирует XMLSchema для ввода«date» будет элементом «datetime» xml.Вместо этого я хотел бы, чтобы это был просто элемент "date".

Было бы также неплохо иметь возможность указать некоторые другие входные атрибуты, такие как minOccurs и т. Д.

Для пользовательского объекта подэлементы могут определять все эти вещи с помощью аннотаций, таких как XmlElement и XmlSchemaType.Однако эти аннотации недопустимы для входного параметра.

Я знаю, что более ранние версии CXF не справлялись с этим, но я не уверен насчет более поздних версий.В настоящее время я использую CXF 2.3.5.

1 Ответ

2 голосов
/ 29 ноября 2011

Вот ответ, который я получил из списка пользователей cxf:

1) Подтвердите Jar API JAXB 2.2 с помощью одного из механизмов одобрения JDK.Тогда для параметра можно использовать аннотации XmlElement и XmlSchemaType.

(Это не совсем правильно - одобренный мною jaxb 2.2 разрешил аннотацию @XmlElement для параметра, но не разрешил @Аннотация XmlSchemaType)

2) Создайте bean-компоненты типа оболочки (вы можете использовать java2ws -warpperBeans в качестве отправной точки) и добавьте аннотации @ RequestWrapper / @ ResponseWrapper в метод, чтобы указывать на них.Вы можете точно контролировать внешний вид схемы оболочки с помощью аннотаций в bean-компонентах.

3) Вы МОЖЕТЕ настроить дополнительные подклассы AbstractServiceConfiguration на фабрики, где вы переопределяете некоторые из методов, чтобы установить различные вещи типа minOccurs / maxOccurs / etc ...ОЧЕНЬ хороший уровень контроля, но очень сложный для выполнения.

...