簡體   English   中英

JAXB模式驗證無法正常工作

[英]JAXB schema validation not working properly

我正在將xml數據包發送到Web服務.jaxb將xml轉換為對象,我想針對xsd對此進行驗證.xml數據包具有一個稱為NSDG details的標簽。

<NSDGDetails>
<Keys>
<Key Type="sapconnector" />
</Keys>
<TargetDetails>
<Organisation>Gateway</Organisation>
</TargetDetails>
<NSDGValidation>
<Processed>no</Processed>
<Result>pass</Result>
</NSDGValidation>
<ChannelRouting>
<Channel>
<URI>e:channeluri</URI>
<Product>e:channelproduct</Product>
<Version>e:channelverion</Version>
</Channel>
<ID Type="">id</ID>
<Timestamp>2015-01-12T17:24:05.835+05:30</Timestamp>
</ChannelRouting>
</NSDGDetails>

現在我期望當我在NSDGDetails標簽中傳遞類似“ abcd”的內容時

<NSDGDetails>abcd<NSDGDetails>

那么我應該在針對xsd驗證請求時收到錯誤消息。

下面是我用於模式驗證的代碼

    JAXBContext sdjaxbContext = 
    JAXBContext.newInstance(SubmitDocument.class);
    JAXBContext NsdgMsgJaxbContext = 
    JAXBContext.newInstance(NSDGMessage.class);
    SchemaFactory   sf = 
    SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
    Schema schema = sf.newSchema(new File("xsd0.xsd")); 

    Marshaller marshaller = NsdgMsgJaxbContext.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.setSchema(schema);
    ValidationEventCollector validationCollector = new 
    EsangamValidationEventHandler();
    marshaller.setEventHandler(validationCollector);
    marshaller.marshal(message, System.out); // where message is the object of NSDGMessage class
   if(validationCollector.hasEvents())
   { throw some errror. I am expecting an error in case of <NSDGDetails>random value </NSDGetails>
   }

但是,在這種情況下,我沒有任何錯誤。 由JAXB生成的XSD文件和NSDGMessage類可以在這里找到XSD NSDGMessage

我嘗試的一件事是將消息對象轉換為字符串,發現

<NSDGDetails>abcd<NSDGDetails> is changed to <NSDGDetails><NSDGDetails>
我相信這就是為什么驗證器由於刪除了無效數據而無法捕獲錯誤的原因。

Helpp ...

從XML到Java對象時,您需要使用Unmarshaller。

對於一個簡單的示例,請參見如何使用JAXB針對模式驗證XML中的類似問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM