Xml 如何在Spring批处理作业中跳过jaxb集合中包含的单个jaxb元素验证?

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,并且不提供对正在封送的对象的访问 我还添加了块读取器;错误仍然抛出 示例架构:

客户端以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;
    }


}
了解更多信息


event.getLocator().getObject()返回NULL@pritam-在封送或解封操作中?这实际上并不能回答问题。如何跳过无效元素以继续处理XML的其余部分?我也有同样的问题。看起来JAXB不允许我们这样做。