7

私はそのような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 解析によって生成されるため、変更できないことに言及する必要があります。

何か案が?

4

1 に答える 1