JAX-WS и Enunciate - как изменить соглашение по именованию XSD по умолчанию для Enunciate - PullRequest
1 голос
/ 09 октября 2010

Я использую Enunciate для создания конечной точки SOAP для веб-приложения Wicket, над которым я работаю, и у меня есть пара вопросов, решение которых я еще не нашел.

1 Как изменить имя файла xsd? Я просмотрел FAQ, и он говорит мне сделать что-то похожее на это:

<xml>
    <schema namespace="http://api.example.com/data" file="data.xsd"/>
</xml>

Однако я не совсем понял, как установить targetNamespace для моих объектов данных. Я сделал это для своего сервиса через @WebService (targetNamespace = "blah"), но как мне аннотировать мои объекты данных, чтобы сообщить Enunciate, к какому пространству имен они должны принадлежать?

2 Enunciate прекрасно генерирует мои XSD, но мне не особо нравятся имена элементов, которые он использует. У меня есть объект ServiceRequest и ServiceResponse. Объект ServiceRequest имеет список объектов User. ServiceResponse имеет список объектов группы. Enunciate предполагает, что каждый объект «Пользователь» в ServiceRequest должен использовать тег «». Я чувствую, что было бы более разумно использовать единственную форму, "", так как на самом деле тег содержит только одного пользователя. Можно ли изменить это поведение, и если да, то как?

Заранее спасибо.

1 Ответ

2 голосов
/ 11 октября 2010

Так что, для ясности, за исключением вопроса о присвоении имен файлам схемы, ваши вопросы действительно больше касаются JAXB, чем вопроса Enunciate. JAXB - это спецификация, которая определяет, как ваши Java-объекты (де) сериализуются в / из XML, и Enunciate соответствует этой спецификации.

В любом случае, самый простой способ применить пространство имен к вашим объектам Java - использовать файл package-info.java в пакете ваших классов Java. Аннотируйте ваш пакет с помощью @XmlSchema и установите желаемое значение в пространстве имен.

Настройка того, как ваши методы доступа сериализуются в / из XML, может быть выполнена с помощью аннотации @XmlElement, например ::

public class MyClass {
  ...
  @XmlElement (name="user")
  List<User> users;
  ...
}

Вот javadocs JAXB

https://jaxb.dev.java.net/nonav/2.1.9/docs/api/

Или Google для хорошего учебника JAXB.

...