gpt4 book ai didi

java - 如果字段名称包含一个大写字母后跟下划线,则从 JAXB 带注释的类生成模式会失败

转载 作者:行者123 更新时间:2023-11-30 04:41:01 29 4
gpt4 key购买 nike

这是我在现实世界中遇到的问题。

我有一个类,如下所示。字段名称的选择不是我的,而是由数据库中的实际字段名称决定(名称已更改)。

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;
}
}

我认为日期适配器类与该问题无关。

我正在使用 Eclipse Indigo Service Release Version 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

另一个有趣的观察是,如果我有像下面这样的字段名称,一切都会正常!下面的情况唯一的区别是字段名称在下划线之前有两个大写字母而不是一个。

@XmlRootElement(name = "JAXBAnnotatedClass2")
@XmlType(propOrder = { "AX_DT", "BX_DT" })
public class JAXBAnnotatedClass2
{
private Date AX_DT;
private Date BX_DT;

// similar code...

是什么导致了这个问题?有办法解决这个问题吗?

最佳答案

首先要注意的是,默认情况下你的JAXB (JSR-222)实现正在处理公共(public)属性而不是私有(private)字段。这意味着您如何称呼字段并不重要,因为 JAXB 将查看属性名称(请参阅下面的代码示例)。 JAXB 将小写属性名称中的第一个字母(getA_DT 对应于属性 a_DT),除非连续有两个大写字母(getAX_DT) code> 对应于属性 AX_DT)。

package forum12304863;

import javax.xml.bind.annotation.XmlType;

@XmlType(propOrder={"a_DT", "b_DT", "AX_DT", "BX_DT"})
public class Root {

private String field1;
private String field2;
private String field3;
private String field4;

public String getA_DT() {
return field1;
}

public void setA_DT(String a_DT) {
field1 = a_DT;
}

public String getB_DT() {
return field2;
}

public void setB_DT(String b_DT) {
field2 = b_DT;
}

public String getAX_DT() {
return field3;
}

public void setAX_DT(String aX_DT) {
field3 = aX_DT;
}

public String getBX_DT() {
return field4;
}

public void setBX_DT(String bX_DT) {
field4 = bX_DT;
}

}

了解更多信息

关于java - 如果字段名称包含一个大写字母后跟下划线,则从 JAXB 带注释的类生成模式会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12304863/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com