1

プロパティ名、電話、住所を持つJAXB生成クラスPersonTypeがあります。XSD で、「電話」minoccurs="1" を定義します。XSDでプロパティ「電話」が必​​要かどうかにかかわらず、Javaコードでプログラム的に(つまり、リフレクションなどを介して)テストするにはどうすればよいですか?

その後の編集: JAXB ジェネレーターは、「必須」などの属性を持たないクラスを作成します。そのため、クラスに注釈はなく、必須かどうかを示すフィールドもありません。ただし、XSD に相当する要素を指定するフィールドには @XmlElement アノテーションがあります。したがって、唯一の解決策は、この注釈を調べてから、XSD に対して XPath などを作成することだと思いますか?

ありがとうございました!

4

1 に答える 1

1

@XmlElement注釈には、 XML 要素が必要であること ( > 0)requiredを示すために使用されるプロパティ (デフォルトでは false) があります。minOccursAPI を使用してjava.lang.reflect、クラスからこの値を取得できます。

XML スキーマ

以下の XML スキーマでは、foo要素は必須ですが、要素は必須でbarはありません。

<?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">

    <complexType name="root">
        <sequence>
            <element name="foo" type="string"/>
            <element name="bar" type="string" minOccurs="0"/>
        </sequence>
    </complexType>

</schema>

生成されたクラス

以下は、XML スキーマから生成されたクラスです。fooフィールドには注釈が付けられており@XmlElement(required=true)、フィールドには注釈が付けられていないことがわかりbarます。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "root", propOrder = {
    "foo",
    "bar"
})
public class Root {

    @XmlElement(required = true)
    protected String foo;

    protected String bar;

}
于 2013-02-27T11:29:17.680 に答える