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