根据 Schematron 验证 Web 服务消息



我使用 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编组到一个可以用 ph-schematron 验证的File对象,但这似乎是一个非常愚蠢的解决方案。

JAX-WS 通常使用 JAXB 将对象封送到 XML 以便通过网络发送,并将收到的 XML 取消封送到对象中。JAXB API 提供了一些有用的东西,用于透明地处理像 XML 这样的对象,而无需首先显式地将其封送到文件、字符串、字节数组或其他中间表示形式。

你需要的类是JAXBSource。它实现了javax.xml.transform.Source接口,并允许您提供对象和JAXBContext或Marshaller。然后,您可以将其作为采用此类实例的转换或其他方法的源。一些 ph-schematron 方法接受 Source 作为输入,例如这个。

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

相关内容

  • 没有找到相关文章

最新更新