Jax-ws wsgen для генерации wsdl, который ссылается на общую схему - PullRequest
5 голосов
/ 30 декабря 2011

Мы разрабатываем довольно большое приложение с несколькими десятками сервисных интерфейсов.Для каждого сервиса генерируется wsdl с помощью wsgen (используя плагин jaxws-maven-plugin maven).Для каждого сервиса в wsdl используется отдельное пространство имен.

Интерфейсы сервисов, совместно использующие набор общих компонентов (в основном DTO).Так как теперь определения для этих общих классов определены в XSD каждого wsdl, дублирующих много информации, и это вызывает у нас проблемы на стороне клиента (огромное время компиляции, несовместимость классов).

Сначала я попытался создать схему дляобщие классы со schemagen, но не могут передать его в wsgen.Есть ли способ передать один (или несколько) общих XSD (s) в wsgen и сгенерировать wsdl (s), ссылающиеся на них?

Я также попытался аннотировать общие классы с помощью @XmlRootElement, указав пользовательское пространство имен: thistime wsgen распознал пользовательское пространство имен и сгенерировал еще один XSD для каждого wsdl, но нигде не включал один (общий) xsd.

Может кто-нибудь подсказать мне решение этой проблемы?

Ответы [ 2 ]

0 голосов
/ 07 апреля 2016

У меня была похожая проблема.

Я добавил примечание ниже к общим классам, чтобы они не генерировались несколько раз для каждого wsgen.

@XmlType(namespace = "http://mypackage.mycompany.com/")
public MyClass implements Serializable {
// ... class contents
}
0 голосов
/ 30 декабря 2011

У нас с тобой много общего. :)

Мы делаем много похожих вещей: у нас есть первые WSDL-веб-сервисы и DTO, используемые в нашем приложении. Тем не менее, мы определяем наши DTO с помощью XML-схем, чтобы мы могли добавлять к ним метаданные, которые добавляют код в сгенерированную Java с помощью плагинов JAXB. Мы намеревались использовать эти DTO на основе XSD в наших веб-службах, но по корпоративному стандарту мы были вынуждены использовать некоторые общие корпоративные XSD в наших веб-службах. Это не имело бы никакого значения - мы могли бы так же легко использовать наши DTO XSD.

Что касается вашей проблемы, у нас есть XSD для наших DTO, которых у вас нет. Если вы это сделали, то единственное, что вам нужно - предполагать, что многомодульный проект Maven - это как разрешать схемы между модулями. Мы сделали это, разветвив плагин jaxws maven и добавив в него преобразователь схемы каталога на основе CLASSPATH.

Полагаю, о том, чтобы вы создавали схемы для своих DTO, не может быть и речи? Больше я ничего не могу поделать, поскольку никогда не использовал аннотации jaxb. К сожалению.

...