2017-05-17 89 views
0

我已經使用JAX-WS和wsimport生成了Web服務客戶端。驗證Schematron的WebService消息

這是我的客戶端代碼:

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服務調用之前驗證processStuffObject針對給定的Schematron規則。我已經看過像ph-schematron這樣的庫,但似乎只能對像File或類似的對象進行驗證。有沒有人知道用Schematron規則來驗證使用JAX-WS生成的對象,如我的ProcessStuffObject

更新:
現在我已經整理ProcessStuffObject到可以用PH-的Schematron驗證一個File對象,但是這似乎是一個很愚蠢的解決方案。

回答

0

JAX-WS通常會使用JAXB將對象編組爲XML,以便通過線路發送並將收到的XML解組爲對象。 JAXB API提供了一些有用的東西,用於透明地處理像XML這樣的對象,而不必首先將其封裝到文件,字符串,字節數組或其他中間表示中。

您需要的課程是JAXBSource。它實現了the javax.xml.transform.Source interface並允許您提供一個對象和一個JAXBContext或Marshaller。然後,您可以將其作爲轉換源或其他採用此類實例的方法提供。一些ph-schematron方法接受一個來源作爲輸入,such as this one

如果您將Schematron文件預編譯爲XSLT,則可以使用Java XML轉換API並將Source提供給變換器。