Module  java.xml.bind

Annotation Type XmlElementDecl



  • @Retention(RUNTIME)
    @Target(METHOD)
    public @interface XmlElementDecl
    将工厂方法映射到XML元素。

    用法

    注释创建XML模式元素声明和返回表示元素声明的JAXBElement实例的元素工厂方法之间的映射。 通常,元素工厂方法从模式生成(和注释)到Java包中的ObjectFactory类,该包表示元素声明的目标命名空间的绑定。 因此,虽然注释语法允许在任何方法上使用@XmlElementDecl,但语法上它的使用仅限于元素工厂方法的注释。 用法受以下限制:
    • 包含使用@XmlElementDecl注释的元素工厂方法的类必须标记为XmlRegistry
    • 元件出厂方法必须将一个参数分配给Object

    示例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<String> createPeaFoo(String s);
    
             @XmlElementDecl(scope=Pea.class,name="bar")
             JAXBElement<String> createPeaBar(String s);
    
             @XmlElementDecl(name="foo")
             JAXBElement<Integer> createFoo(Integer i);
         } 
    没有范围createFoo和createPeaFoo将变得模糊,因为它们都映射到具有相同本地名称“foo”的XML模式元素。
    从以下版本开始:
    1.6,JAXB 2.0
    另请参见:
    XmlRegistry
    • Element Detail

      • name

        String name
        XML元素的本地名称。

        评论者注意事项:没有默认名称; 由于注释是在工厂方法上,因此方法名称可以从工厂方法名称派生而不清楚。

        另请参见:
        namespace()
      • scope

        Class scope
        映射范围。

        如果这不是XmlElementDecl.GLOBAL ,则此元素声明映射仅在指定的类中有效。

        Default:
        javax.xml.bind.annotation.XmlElementDecl.GLOBAL.class
      • namespace

        String namespace
        XML元素的命名空间名称。

        如果值为“## default”,则该值是包含此工厂方法的类的包的名称空间名称。

        另请参见:
        name()
        Default:
        “##默认”
      • substitutionHeadNamespace

        String substitutionHeadNamespace
        替换组的头部XML元素的命名空间名称。

        这指定了本地名称由substitutionHeadName()指定的XML元素的命名空间名称。

        如果susbtitutionHeadName()为“”,则此值只能为“## default”。 但是值被忽略,因为这个元素不是susbtitution组的一部分,当值为susbstitutionHeadName()是“”时。

        如果susbtitutionHeadName()不是“”,并且值为“## default”,则命名空间名称是映射包含类的包的标记为XmlRegistry的命名空间名称。

        如果susbtitutionHeadName()不是“”,并且该值不是“## default”,则该值是命名空间名称。

        另请参见:
        substitutionHeadName()
        Default:
        “##默认”
      • substitutionHeadName

        String substitutionHeadName
        替换组头元素的XML本地名称。

        如果值为“”,则该元素不是任何替换组的一部分。

        另请参见:
        substitutionHeadNamespace()
        Default:
        “”
      • defaultValue

        String defaultValue
        该元素的默认值。

          '' 
        被指定为该注释元素的默认值的值被用作穷人替代null以允许实现识别“无默认值”状态。
        Default:
        “\ u0000的”