JavaTM 2 Platform
Standard Ed. 6

javax.xml.bind.annotation
註釋型別 XmlElementDecl


@Retention(value=RUNTIME)
@Target(value=METHOD)
public @interface XmlElementDecl

將處理器方法映射到 XML 元素。

用法

該註釋在 XML 網要元素宣告與元素處理器方法之間創建了映射關係,元素處理器方法返回表示元素宣告的 JAXBElement 實例。通常,元素處理器方法是根據 Java 套件的 ObjectFactory 類別中的網要產生(並註解)的,它表示元素宣告的目標名稱空間的綁定。因此,當註釋語法允許在任何方法上使用 @XmlElementDecl 時,從語義上說,它的使用受限於元素處理器方法的註釋。 用法受到以下約束的限制:

範例 1:處理器方法上的註釋

     // Example: code fragment
     @XmlRegistry
     class ObjectFactory {
         @XmlElementDecl(name="foo")
         JAXBElement<String> createFoo(String s) { ... }
     }
 
 
     <!-- XML input -->
       <foo>string</foo>

     // Example: code fragment corresponding to XML input
     JAXBElement<String> o =
     (JAXBElement<String>)unmarshaller.unmarshal(aboveDocument);
     // print JAXBElement instance to show values
     System.out.println(o.getName());   // prints  "{}foo"
     System.out.println(o.getValue());  // prints  "string"
     System.out.println(o.getValue().getClass()); // prints "java.lang.String"

     <!-- Example: XML schema definition -->
     <xs:element name="foo" type="xs:string"/>
 

範例 2:具有非本地作用域的元素宣告

以下範例演示了如何在網要派生程式碼的元素宣告綁定中使用作用域註釋參數。

在此 javadoc 以後的版本中可能會替換以下範例。


     <!-- Example: XML schema definition -->
     <xs:schema>
       <xs:complexType name="pea">
         <xs:choice maxOccurs="unbounded">
           <xs:element name="foo" type="xs:string"/>
           <xs:element name="bar" type="xs:string"/>
         </xs:choice>
       </xs:complexType> 
       <xs:element name="foo" type="xs:int"/>
     </xs:schema>
 
     // Example: expected default binding
     class Pea {
         @XmlElementRefs({
             @XmlElementRef(name="foo",type=JAXBElement.class)
             @XmlElementRef(name="bar",type=JAXBElement.class)
         })
         List<JAXBElement<String>> fooOrBar;
     }
 
     @XmlRegistry
     class ObjectFactory {
         @XmlElementDecl(scope=Pea.class,name="foo")
         JAXBElement createPeaFoo(String s);
 
         @XmlElementDecl(scope=Pea.class,name="bar")
         JAXBElement createPeaBar(String s);
 
         @XmlElementDecl(name="foo")
         JAXBElement createFoo(Integer i);
     }
 
 
沒有作用域,createFoo 和 createPeaFoo 將變得不明確,因為它們兩個都使用相同的本地名稱 "foo" 映射到 XML 網要元素。

從以下版本開始:
JAXB 2.0
另請參見:
XmlRegistry

必需元素摘要
 String name
          XML 元素的本地名稱。
 
可選元素摘要
 String defaultValue
          此元素的預設值。
 String namespace
          XML 元素的名稱空間名。
 Class scope
          映射的作用域。
 String substitutionHeadName
          替換組的頭元素的 XML 本地名稱。
 String substitutionHeadNamespace
          替換組的頭 XML 元素的名稱空間名。
 

元素詳細資訊

name

public abstract String name
XML 元素的本地名稱。

審閱者的註釋:沒有預設名稱;因為註釋是在處理器方法上,所以能否從處理器方法名稱派生方法名稱不是很清楚。

另請參見:
namespace()

scope

public abstract Class scope
映射的作用域。

如果此值不是 XmlElementDecl.GLOBAL,那麼此元素宣告映射只有在指定類別中才是活動的。

預設值:
javax.xml.bind.annotation.XmlElementDecl.GLOBAL.class

namespace

public abstract String namespace
XML 元素的名稱空間名。

如果值是 "##default",那麼該值是實作包含此處理器方法類別的套件的名稱空間名。

另請參見:
name()
預設值:
"##default"

substitutionHeadNamespace

public abstract String substitutionHeadNamespace
替換組的頭 XML 元素的名稱空間名。

此值指定本地名稱由 substitutionHeadName() 指定的 XML 元素的名稱空間名。

如果 susbtitutionHeadName() 為 "",則此值只能是 "##default"。但該值被忽略,因為在 susbstitutionHeadName() 的值是 "" 時,此元素不是替換組的一部分。

如果 susbtitutionHeadName() 不是 "",並且值為 "##default",那麼名稱空間名是包含用 XmlRegistry 標記的類別的套件所映射到的名稱空間名。

如果 susbtitutionHeadName() 不是 "" 並且值不是 "##default",那麼該值是名稱空間名。

另請參見:
substitutionHeadName()
預設值:
"##default"

substitutionHeadName

public abstract String substitutionHeadName
替換組的頭元素的 XML 本地名稱。

如果值是 "",那麼此元素不是任何替換組的一部分。

另請參見:
substitutionHeadNamespace()
預設值:
""

defaultValue

public abstract String defaultValue
此元素的預設值。

作為此註釋元素的預設值指定的 '' 值被用作 null 的替代,從而允許識別 'no default value' 狀態。

預設值:
"\u0000"

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only