私はそのような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
java.lang.annotation API と java.lang.reflect API を使用してクラスを解析するメソッド setDefaultValues(MyPojo loMyPojo) をプログラムで使用しようとしていますが、私のコードは見苦しく、独自の列挙型の既定値では機能しません。
元のクラス MyPojo は、それ自体が JAXB を介した XSD 解析によって生成されるため、変更できないことに言及する必要があります。
何か案が?