我有一个对象的xml表示,比如orderlist(has list of)orders,每个order都有一个商品列表。
我想验证我的商品,如果无效,我想把他们从订单上删除。如果所有商品都是无效的,那么我将从订单列表中删除订单。
我已经能够验证订单列表
JAXBContext jaxbContext = JAXBContext.newInstance("com.jaxb");
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File(XSD));
JAXBSource source = new JAXBSource(jaxbContext, orderList);
Validator validator = schema.newValidator();
DataFeedErrorHandler handler = new DataFeedErrorHandler();
validator.setErrorHandler(handler);
validator.validate(source);
我找不到验证商品的方法。
像这样的
for(Order order: orderList){
for(Commodity commodity: order.getCommodity()){
if(!isCommodityValid(commodity)){
// mark for removal
}
}
}
任何帮助都将不胜感激。
1条答案
按热度按时间2w3kk1z51#
热释光;博士
您可以执行虚拟封送并利用jaxb验证机制,而不是使用
javax.xml.validation
直接的机制。利用
Marshaller.Listener
&ValidationEventHandler
(商品验证人)对于这个例子,我们将利用
Marshaller.Listener
以及ValidationEventHandler
完成用例。Marshal.Listener
-这将为要编组的每个对象调用。我们可以用它来缓存Order
我们可能需要删除Commodity
从。ValidationEventHandler
这将使我们能够访问验证过程中出现的每个问题marshal
操作。每个问题都会通过ValidationEvent
. 这个ValidationEvent
将举行ValidationEventLocator
我们可以从中得到处理问题的对象。演示代码
可以运行以下代码来证明一切正常。
输出
下面是运行演示代码的输出。节点在封送处理操作之后如何删除无效商品。
xml架构(schema.xsd)
下面是用于此示例的xml模式。
java模型
下面是我在这个例子中使用的对象模型。
订单
秩序
商品