Проверить сообщение WebService на Schematron

Я создал клиент веб-службы, используя JAX-WS и wsimport.

Это мой клиентский код:

URL url = new URL("http://localhost:9999/ws/processstuff?wsdl");
QName qname = new QName("namespace", "ProcessStuffImplService");
Service service = Service.create(url, qname);
ProcessStuffInterface processStuffInterface = service.getPort(ProcessStuffInterface.class);

ProcessStuffObject processStuffObject = new ProcessStuffObject();
//Web service call
processStuffInterface.processStuff(processStuffObject);

Мне нужно проверить processStuffObject на соответствие заданным правилам Schematron, прежде чем вызывать веб-службу выше. Я просмотрел такие библиотеки, как ph-schematron, но похоже, что проверка может выполняться только для таких объектов, как File или подобных. Кто-нибудь знает способ проверить объект, сгенерированный с помощью JAX-WS, например мой ProcessStuffObject, на соответствие правилам Schematron?

Обновление:
Теперь я упорядочил ProcessStuffObject объект File, который можно проверить с помощью ph-schematron, но это кажется действительно глупым решением.


person user1766169    schedule 17.05.2017    source источник


Ответы (1)


JAX-WS обычно использует JAXB для маршалинга объектов в XML для отправки по сети и демаршалирования полученного XML в объекты. JAXB API предлагает некоторые полезные вещи для прозрачной обработки объекта, такого как XML, без необходимости явно сначала маршалировать его в файл, строку, массив байтов или другое промежуточное представление.

Вам нужен класс JAXBSource. Он реализует файл javax.xml.transform.Source. интерфейс и позволяет предоставить объект и JAXBContext или Marshaller. Затем вы можете предоставить его в качестве источника для преобразований или других методов, которые принимают такой экземпляр. Некоторые методы ph-schematron принимают источник в качестве входных данных, такой как этот.

Если вы предварительно скомпилируете файлы Schematron в XSLT, вы можете просто использовать API преобразования Java XML и передать исходный код преобразователю.

person G_H    schedule 18.05.2017