3

私は属性を持っています:

生成された JAXB オブジェクトに関連付けられた getter メソッドは次のようになります。

public String getUnits(){
    if(units == null) return "metric";
    else return units;
}

getUnits() は、マーシャリング時に JAXB Marshaller によって呼び出されず、値が設定されていません。なぜこれが呼び出されないのですか?

4

1 に答える 1

4

スキーマ.xsd

以下は、Java クラスの生成に使用した XML スキーマの簡易バージョンです。

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/schema" xmlns:tns="http://www.example.org/schema" elementFormDefault="qualified">
    <element name="root">
        <complexType>
            <attribute name="units" fixed="metric"/>
        </complexType>
    </element>
</schema>

これにより、次のようなクラスが生成されます。が指定されているため@XmlAccessorType(XmlAccessType.FIELD)、JAXB (JSR-222) 実装はメソッドにアクセスする代わりにフィールドから値を取得しますgetUnits()

package org.example.schema;

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "root")
public class Root {

    @XmlAttribute(name = "units")
    @XmlSchemaType(name = "anySimpleType")
    protected String units;


    public String getUnits() {
        if (units == null) {
            return "metric";
        } else {
            return units;
        }
    }

    public void setUnits(String value) {
        this.units = value;
    }

}

詳細については

于 2012-10-17T19:07:48.340 に答える