JAXB如何在解组

时间:2016-04-27 10:09:50

标签: java xml jaxb

如何忽略因无效值而导致异常的节点 假设我在xml属性中放入字符串值而不是int,如下面的xml

所示
<customer id="1002re">
    <name>NameTestContact</name>
    <contact>902323232</contact>
</customer>

程序将以例外

终止
  

线程“main”中的异常java.lang.NumberFormatException:不是   号码:1002re

Jaxb 中是否有任何方法可以忽略无效值,或者只是跳过该节点并继续解析其他xml节点。

1 个答案:

答案 0 :(得分:0)

我认为你可以用XmlAdapter做到这一点。有关介绍,请参阅MOXy首席开发人员Blaise Doughan的this博客文章。

所以你有这样的适配器实现:

public final class NumberFormatIgnoringAdapter extends XmlAdapter<String, Integer> {
   @Override
   public String marshal(Integer arg0) throws Exception {
      return arg0.toString();
   }

   @Override
   public Integer unmarshal(String arg0) throws Exception {
      try {
         return Integer.parseInt(arg0);
      }
      catch (NumberFormatException e) {
         return -1; // or whatever you'd like to set invalid input to
      }
   }
}

并将适配器注释添加到id字段:

@XmlJavaTypeAdapter(NumberFormatIgnoringAdapter.class)
private Integer id;