2016-03-01 3 views
1

Итак, у меня есть веб-сервис в NetBeans 8.1, для которого я написал wsdl со встроенным XSD (и внешним ref также). Теперь мне нужно позвонить в службу SOAP на другие экземпляры приложения: i.e иметь экземпляр X вызвать метод в экземпляре Y, как вторичную цель приложения. Я не люблю использовать чистых клиентов NetBeans с автоматическим SOAP-клиентом, поскольку я хотел бы указать на тот самый сервис, который я создаю, - это потенциально будет курица и тип яйца во время строительства. Во-вторых, у меня уже есть все необходимые типы JAXB, используемые веб-службой, поэтому было бы легко создать право клиента?Java.xml.validation.Schema от wsdl

Ну, моя проблема начинается, когда я хочу использовать JAXB для маршалирования моего объекта запроса в javax.xml.soap.SOAPBodyElement (моя текущая стратегия - использовать SAAJ для клиентской части), но как добавить схему к маршаллеру? схема встроена в wsdl, и я не могу понять, как ее ссылать. Я понял, что могу разделить часть схемы на отдельный файл XSD, но у меня отсутствует опция аннотации для @WebService, где я могу предоставить файл XSD, точно так же, как я могу предоставить файл wsdl (в настоящее время это 'wsdlLocation' указывает на wsdl & xsd, поскольку он встроен).

Возможно, мне придется жить с тем, чтобы не выполнять проверку XSD на стороне клиента (он включен на стороне сервера), так как кажется сложным получить объект Schema из wsdl - возможно ли это как-то?

+0

Я никогда не решал этого, а предпочел использовать выделенный интерфейс для конкретного случая использования, который выгружал подзадачи в другие экземпляры приложения (это был мир перед облаком/докером). Вместо этого я просто отправляю объекты как application/x-java-serialized-object, обрабатываю их и возвращать. Общая задача также доступна с помощью мыла ws, но менее эффективна. –

ответ

0

Вы можете прочитать .wsdl как InputStream и преобразовать его в DOMResult. Затем вы можете получить узел «schema» из DOMResult и превратить его в DOMSource. При этом вы можете создать объект Schema с помощью конструктора Source [].

У меня не получилось работать сам, у меня было слишком много импорта, и для управления пространствами имен стало адским. Единственный код, который я нашел на этом, был в «SOA, используя веб-службы Java» Марка Хансена, глава 7.5.1: Проверка. Я не думаю, что могу поместить этот код здесь, но весь код, который вам нужен для этого варианта использования, находится там.

+0

Спасибо за подсказку - я согласен с ответом, но тем временем у меня был другой маршрут - поскольку это только внутренние вызовы, я только что реализовал сервлет для получения ObjectStreams - он намного лучше работает, а производительность чтобы иметь решающее значение здесь. –

 Смежные вопросы

  • Нет связанных вопросов^_^