针对Schematron

时间:2017-05-17 14:26:06

标签: java web-services validation schematron

我使用JAX-WS和wsimport生成了一个Web服务客户端。

这是我的客户代码:

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);

在进行上述Web服务调用之前,我需要针对给定的Schematron规则验证processStuffObject。我看过像ph-schematron这样的库,但似乎验证只能在像File这样的对象上进行验证。有没有人知道一种方法来验证使用JAX-WS生成的对象,比如我的ProcessStuffObject,反对Schematron规则?

更新
现在我已经将ProcessStuffObject编组到File对象上,该对象可以使用ph-schematron进行验证,但这似乎是一个非常愚蠢的解决方案。

1 个答案:

答案 0 :(得分:0)

JAX-WS通常会使用JAXB将对象编组为XML,以便通过线路发送并将收到的XML解组到对象中。 JAXB API提供了一些有用的东西,用于透明地处理像XML这样的对象,而不必显式地将它封送到文件,字符串,字节数组或其他中间表示。

您需要的课程是JAXBSource。它实现the javax.xml.transform.Source interface并允许您提供对象和JAXBContext或Marshaller。然后,您可以将其作为转换源或采用此类实例的其他方法提供。一些ph-schematron方法接受Source作为输入,such as this one

如果您将Schematron文件预编译为XSLT,您可以使用Java XML转换API并将Source提供给转换器。