jaxb unmarshalls java.lang.Long和java.math.BigDecimal以不同的方式

时间:2013-11-21 15:22:47

标签: java jaxb bigdecimal unmarshalling xml-nil

我正在比较

的解组
private Long longVar
private boolean isLongSetterCalled;

private BigDecimal bigDecVar
private boolean isBigDecimalSetterCalled;

@XmlElement(nillable = true)
public Long getLongVar() {
  return this.longVar;
}
public void setLongVar(final Long longVar) {
  this.longVar = longVar;
  this.longSetterCalled = true;
}

@XmlElement(nillable = true)
public BigDecimal getBigDecVar() {
  return this.bigDecVar;
}
public void setBigDecVar(final BigDecimal bigDecVar) {
  this.bigDecVar = bigDecVar;
  this.bigDecimalSetterCalled = true;
}

给出这些意见:

1. empty tag
<longVar></longVar>
<bigDecVar></bigDecVar>

2. invalid input
<longVar>looooong</longVar>
<bigDecVar>biiiiiig</bigDecVar>

我正在观察是否调用了setter。 输入2.无效值 - 不调用setter。 在输入1.空标记 - 不调用longSetter,bigDecimalSetter是CALLED。为什么?

当然还有输入

3. nil
<longVar xsi:nil="true"></longVar>
<bigDecVar xsi:nil="true"></bigDecVar>

调用两个setter,这就是我需要的。

所以,问题是:当调用bigDecimalSetter时,我无法判断原因是xsi:nil="true",还是标签的值无效(不是BigDecimal)。有解决办法吗?

0 个答案:

没有答案