1

のアンマーシャリングを比較しています

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>

セッターが呼び出されるかどうかを観察しています。入力 2 で。無効な値 - セッターは呼び出されません。入力 1 で。空のタグ - longSetter は呼び出されず、bigDecimalSetter は呼び出されます。なぜ?

そしてもちろん入力時

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

両方のセッターが呼び出されます。これが必要です。

したがって、問題は次のとおりです。bigDecimalSetter が呼び出されたときに、理由がxsi:nil="true"なのか、タグの値が無効なのか (BigDecimal ではない) はわかりません。そのための回避策はありますか?

4

0 に答える 0