针对 Schematron 验证 WebService 消息

Validate WebService message against 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 或类似的对象进行验证。有谁知道根据 Schematron 规则验证使用 JAX-WS 生成的对象的方法,例如我的 ProcessStuffObject

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

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

您需要的class是JAXBSource. It implements the javax.xml.transform.Source interface and lets you provide an object and a JAXBContext or a Marshaller. You can then supply it as a source for transformations or other methods that take such an instance. Some of the ph-schematron methods accept a Source as input, such as this one

如果您将 Schematron 文件预编译为 XSLT,您只需使用 Java XML 转换 API 并将源代码提供给转换器。