java – 使用xmlelement defaultvalue注释指定默认值的简单方法
发布时间:2020-05-24 22:55:55 所属栏目:Java 来源:互联网
导读:我通过JAXB有一个简单的pojo注释类: public class MyPojo implements Serializable{ private final static long serialVersionUID = 1234L; @XmlElement(name = Type, required = true, defaultValue = none)
|
我通过JAXB有一个简单的pojo注释类: public class MyPojo
implements Serializable
{
private final static long serialVersionUID = 1234L;
@XmlElement(name = "Type",required = true,defaultValue = "none")
@NotNull
protected SeismicDataAcquisitionSystemType type;
@XmlElement(name = "IpAddress",required = true)
@NotNull
@Pattern(regexp = "((1?[0-9]?[0-9]|2[0-4]|[0-9]|25[0-5]).){3}(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])")
protected String ipAddress;
@XmlElement(name = "SealServerTcpPort",defaultValue = "1477")
@NotNull
protected int sealServerTcpPort;
@XmlElement(name = "PamServerTcpPort",defaultValue = "1485")
@NotNull
protected int pamServerTcpPort;
/**
* Obtient la valeur de la propriété type.
*
* @return
* possible object is
* {@link SeismicDataAcquisitionSystemType }
*
*/
public SeismicDataAcquisitionSystemType getType() {
return type;
}
/**
* Définit la valeur de la propriété type.
*
* @param value
* allowed object is
* {@link SeismicDataAcquisitionSystemType }
*
*/
public void setType(SeismicDataAcquisitionSystemType value) {
this.type = value;
}
public boolean isSetType() {
return (this.type!= null);
}
/**
* Obtient la valeur de la propriété ipAddress.
*
* @return
* possible object is
* {@link String }
*
*/
public String getIpAddress() {
return ipAddress;
}
/**
* Définit la valeur de la propriété ipAddress.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setIpAddress(String value) {
this.ipAddress = value;
}
public boolean isSetIpAddress() {
return (this.ipAddress!= null);
}
/**
* Obtient la valeur de la propriété sealServerTcpPort.
*
*/
public int getSealServerTcpPort() {
return sealServerTcpPort;
}
/**
* Définit la valeur de la propriété sealServerTcpPort.
*
*/
public void setSealServerTcpPort(int value) {
this.sealServerTcpPort = value;
}
public boolean isSetSealServerTcpPort() {
return true;
}
/**
* Obtient la valeur de la propriété pamServerTcpPort.
*
*/
public int getPamServerTcpPort() {
return pamServerTcpPort;
}
/**
* Définit la valeur de la propriété pamServerTcpPort.
*
*/
public void setPamServerTcpPort(int value) {
this.pamServerTcpPort = value;
}
}
我尝试用默认值初始化我的pojo MyPojo myPojo = new MyPojo(); myPojo.getPamServerTcpPort(); // return 0 setDefaultValues(myPojo); // assign attributes with annotated default values myPojo.getPamServerTcpPort(); // return 1485 我正在使用方法setDefaultValues(MyPojo loMyPojo)尝试programmaticaly,该方法使用java.lang.annotation API和java.lang.reflect API解析类,但我的代码很难看,并且不能使用我自己的枚举默认值 我不得不提到我无法修改原始类MyPojo,因为它本身是通过JAX解析XSD而生成的 任何的想法? 解决方法快速实现缺少的功能可能如下所示:public static void setDefaultValues(Object o) throws Exception {
if (o == null)
return;
for (Class<?> clazz = o.getClass(); clazz != Object.class; clazz = clazz.getSuperclass()) {
for (final Field f : clazz.getDeclaredFields()) {
final XmlElement xe = f.getAnnotation(XmlElement.class);
if (xe != null && xe.defaultValue() != null) {
final Class<?> t = f.getType();
if (t.isAssignableFrom(String.class)) {
f.setAccessible(true);
f.set(o,xe.defaultValue());
} else if (t.isAssignableFrom(Integer.class) || clazz.getSimpleName().equals("int")) {
f.setAccessible(true);
f.set(o,Integer.parseInt(xe.defaultValue()));
} else if (t.isAssignableFrom(Long.class) || clazz.getSimpleName().equals("long")) {
f.setAccessible(true);
f.set(o,Long.parseLong(xe.defaultValue()));
}
// else {
// TODO: add futher conversions
// }
}
}
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
