我使用JAX和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生成的对象,比如我的ProcessStuffObject吗?
更新:
现在,我已经将ProcessStuffObject编组到一个可以使用ph-schematron验证的File对象,但这似乎是一个非常愚蠢的解决方案。
发布于 2017-05-18 07:01:00
JAXB通常会使用JAXB将对象封送到XML,以便将接收到的XML发送到线路上,并将接收到的XML解封为对象。JAXB提供了一些有用的东西,可以透明地处理像XML这样的对象,而不必首先显式地将其封送到文件、字符串、字节数组或其他中间表示形式。
您需要的类是JAXBSource。它实现了javax.xml.transform.Source接口,并允许您提供对象和JAXBContext或Marshaller。然后,您可以将其作为转换或其他采用此类实例的方法的源。一些ph-schematron方法接受源作为输入,就像这个。
如果将Schematron文件预编译到XSLT中,则只需使用Java转换API并向转换器提供Source。
https://stackoverflow.com/questions/44027644
复制相似问题