Xml 如何在Spring批处理作业中跳过jaxb集合中包含的单个jaxb元素验证?
客户端以xml文件的形式发送50k个客户。我使用Spring批处理作业并在其中运行 Spring批处理作业获取文件、处理和写入 问题是,这是jaxb的全部或全部验证。如果我有50k个对象,而其中只有2个未通过验证,那么我仍然需要49998个对象由业务处理 有一个类,javax.xml.bind.ValidationEventHandler;您可以将其设置为JaxBMarshaller,但它只返回true或false,并且不提供对正在封送的对象的访问 我还添加了块读取器;错误仍然抛出 示例架构:Xml 如何在Spring批处理作业中跳过jaxb集合中包含的单个jaxb元素验证?,xml,jaxb,spring-batch,Xml,Jaxb,Spring Batch,客户端以xml文件的形式发送50k个客户。我使用Spring批处理作业并在其中运行 Spring批处理作业获取文件、处理和写入 问题是,这是jaxb的全部或全部验证。如果我有50k个对象,而其中只有2个未通过验证,那么我仍然需要49998个对象由业务处理 有一个类,javax.xml.bind.ValidationEventHandler;您可以将其设置为JaxBMarshaller,但它只返回true或false,并且不提供对正在封送的对象的访问 我还添加了块读取器;错误仍然抛出 示例架构:
<xs:element name="CustomerLists">
<xs:complexType>
<xs:sequence>
<xs:element name="Customer" maxOccurs="unbounded" type="Customer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
示例Xml:
<a:CustomerLists xmlns:a="http://foo.com">
<a:Customer>
...
...
...
</a:Customer>
<a:Customer>
...
...
...
</a:Customer>
<a:Customer>
...
...
...
</a:Customer>
</a:CustomerLists>
...
...
...
...
...
...
...
...
...
建议?javax.xml.bind.ValidationEventHandler是用于JAXB的正确机制。您可以通过
ValidationEvent
访问有问题的对象以进行解组操作:
package blog.jaxb.validation;
import javax.xml.bind.ValidationEvent;
import javax.xml.bind.ValidationEventHandler;
public class MyValidationEventHandler implements ValidationEventHandler {
public boolean handleEvent(ValidationEvent event) {
System.out.println("\nEVENT");
System.out.println("SEVERITY: " + event.getSeverity());
System.out.println("MESSAGE: " + event.getMessage());
System.out.println("LINKED EXCEPTION: " + event.getLinkedException());
System.out.println("LOCATOR");
System.out.println(" OBJECT: " + event.getLocator().getObject());
return true;
}
}
了解更多信息