我正在向web服务发送一个xml数据包.xml通过jaxb转换为object,我想对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>
}
但是,我在这种情况下没有收到任何错误。 可以在此处找到jsb生成的xsd文件和NSDGMessage类 xsd NSDGMessage
我尝试的一件事是将邮件对象转换为字符串并找到
<NSDGDetails>abcd<NSDGDetails> is changed to <NSDGDetails><NSDGDetails>我相信这就是验证器因为无效数据被删除而无法捕获错误的原因。
... Helpp
答案 0 :(得分:0)
当你从XML转换为Java对象时,你需要使用Unmarshaller。
举一个简单的例子,请参阅How to validate an XML against schema using JAXB?
中的类似问题