如何跳过未使用JAXB进行验证的节点

时间:2018-10-03 21:13:47

标签: java xml java-ee jaxb unmarshalling

我的xml文件具有以下外观:

<Custommers>
    <Custommer>
        <name>foo</name>
        <age>18</age>
        <sexe>Male</sexe>
    <Custommer>

    <Custommer>
         <name>foo1</name>
         <age>25</age>
         <sexe>Female</sexe>
    <Custommer>
        .
        .
        .
        .
        .
        .
</Custommers>

这是一个巨大的XML文件(成千上万的客户),我需要解组然后将其放入数据库中,这是每月的工作。

我需要对其进行一些验证,然后如果定制器正确,则将其保存到数据库中,如果定制器的任何数据不正确,请记录错误并跳过此定制器。

我当时正在考虑将验证规则写入xsd,然后在使用 ValidationEventHandler 进行编组时忽略整个定制器。

有人知道我该怎么做吗?或其他解决方案?

我已经在网上搜索了几个小时,却找不到任何答案。

1 个答案:

答案 0 :(得分:0)

变体1-XML方法

常见的XML处理方法是将验证解析分开。验证步骤通常是针对XML模式进行的。

  1. XML验证始终应用于文档级别。也许之前将文档拆分(例如,每条记录一个DOM)可以帮助解决您的问题。请参阅:how to split an XML file into multiple XML files using java
  2. 验证-您可以使用tools like trang to create basic XSD
  3. 从源文档中排序有问题的条目(手动任务-归咎于数据提供者
  4. 仅反序列化好的代码

变体2-纯Java

还可以使用Jackson FasterXML之类的库来创建XML数据到Java类的相当宽松的映射。 Find here an example,了解如何仅读取列表中每个条目的某些属性。

  1. 将所有数据松散反序列化为标准POJO
  2. 在附加的Java后处理步骤中验证每个POJO。

变体3-有所不同

查找每个客户的字节偏移量,并将每个客户读取到准备充分的POJO。记录异常并继续下一个。 Find complete approach described here

  1. 创建字节偏移列表
  2. 严格反序列化您的POJO