これは私が現実世界の問題として遭遇したものです。
以下のような授業があります。フィールド名の選択は私のものではありませんが、データベース内の実際のフィールド名によって決定されます(名前が変更されました)。
import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement(name = "JAXBAnnotatedClass1")
@XmlType(propOrder = { "A_DT", "B_DT" })
public class JAXBAnnotatedClass1
{
private Date A_DT;
private Date B_DT;
@XmlJavaTypeAdapter(JaxbDateAdapter.class)
public Date getA_DT()
{
return A_DT;
}
public void setA_DT(Date a_DT)
{
A_DT = a_DT;
}
@XmlJavaTypeAdapter(JaxbDateAdapter.class)
public Date getB_DT()
{
return B_DT;
}
public void setB_DT(Date b_DT)
{
B_DT = b_DT;
}
}
DateAdapterクラスはこの問題に関連しているとは思いません。
Eclipse Indigo Serviceリリースバージョン1を使用しています。このクラスからスキーマを生成しようとしましたが、次のエラーが発生しました-
Property a_DT is present but not specified in @XmlType.propOrder
this problem is related to the following location:
....JAXBAnnotatedClass1.getA_DT()
at com.cigna.framework.testing.JAXBAnnotatedClass1
Property b_DT is present but not specified in @XmlType.propOrder
this problem is related to the following location:
....JAXBAnnotatedClass1.getB_DT()
ここでの奇妙なことは、次の変更を加えると、すべてが機能することです-
@XmlType(propOrder = { "a_DT", "b_DT" }) // changed first uppercase letter
//to lowercase without changing field name
もう1つの興味深い観察は、代わりにこれらのようなフィールド名(以下)があれば、すべてが機能することです!以下の場合の唯一の違いは、フィールド名のアンダースコアの前に、1文字ではなく2文字の大文字が含まれていることです。
@XmlRootElement(name = "JAXBAnnotatedClass2")
@XmlType(propOrder = { "AX_DT", "BX_DT" })
public class JAXBAnnotatedClass2
{
private Date AX_DT;
private Date BX_DT;
// similar code...
この問題の原因は何ですか?これを解決する方法はありますか?