【发布时间】:2018-01-25 18:05:39
【问题描述】:
我正在向 web 服务发送一个 xml 数据包。xml 被 jaxb 转换为对象,我想针对 xsd 进行验证。xml 数据包有一个名为 NSDG 详细信息的标签。
<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”之类的内容时
abcd
那么在针对 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
我尝试的一件事是将消息对象转换为字符串,发现
我相信这就是验证器无法捕获错误的原因,因为无效数据已被删除。abcd 改为
帮助...
【问题讨论】:
-
您找到解决方案了吗。我面临着类似的问题,但仍然找不到解决方案。这是我的查询。 stackoverflow.com/questions/65256644/…
标签: java xml xsd xml-parsing jaxb