Spec-Zone .ru
спецификации, руководства, описания, API


javax.xml.bind.annotation
Тип аннотации XmlElementDecl


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

Отображает метод фабрики на элемент XML.

Использование

Аннотация создает отображение между объявлением элемента XML-схемы и методом фабрики элемента, который возвращает экземпляр JAXBElement, представляющий объявление элемента. Как правило, метод фабрики элемента сгенерирован (и аннотирован) из схемы в ObjectFactory class в пакете Java, который представляет привязку целевого пространства имен объявления элемента. Таким образом, в то время как синтаксис аннотации позволяет @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  &quot;{}foo&quot;
     System.out.println(o.getValue());  // prints  &quot;string&quot;
     System.out.println(o.getValue().getClass()); // prints &quot;java.lang.String&quot;

     <!-- 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 стал бы неоднозначным, так как они оба отображаются на элемент XML-схемы с тем же самым локальным именем "foo".

С тех пор:
JAXB 2.0
См. Также:
XmlRegistry

Необходимая Сводка Элемента
 java.lang.String имя
          локальное имя элемента XML.
 
Дополнительная Сводка Элемента
 java.lang.String defaultValue
          Значение по умолчанию этого элемента.
 java.lang.String пространство имен
          имя пространства имен элемента XML.
 java.lang.Class контекст
          контекст отображения.
 java.lang.String substitutionHeadName
          XML локальное имя главного элемента группы замены.
 java.lang.String substitutionHeadNamespace
          имя пространства имен главного элемента XML группы замены.
 

Деталь элемента

имя

public abstract java.lang.String name
локальное имя элемента XML.

Отметьте рецензентам: нет никакого имени по умолчанию; так как аннотация находится на методе фабрики, это не является четким, что имя метода может быть получено из имени метода фабрики.

См. Также:
namespace()

контекст

public abstract java.lang.Class scope
контекст отображения.

Если это не XmlElementDecl.GLOBAL, тогда это отображение объявления элемента является только активным в пределах указанного class.

Значение по умолчанию:
javax.xml.bind.annotation.XmlElementDecl.GLOBAL.class

пространство имен

public abstract java.lang.String namespace
имя пространства имен элемента XML.

Если значение "##default", то значение является именем пространства имен для пакета class, содержащего этот метод фабрики.

См. Также:
name()
Значение по умолчанию:
"##default"

substitutionHeadNamespace

public abstract java.lang.String substitutionHeadNamespace
имя пространства имен главного элемента XML группы замены.

Это определяет имя пространства имен элемента XML, локальное имя которого определяется substitutionHeadName().

Если susbtitutionHeadName()"", тогда это значение может только быть "##default". Но значение игнорируется, так как так как этого элемента не часть susbtitution группы, когда значение susbstitutionHeadName() "".

Если susbtitutionHeadName() не, "" и значение "##default", то имя пространства имен является именем пространства имен к который пакет содержания class, отмеченного с XmlRegistry, отображается.

Если susbtitutionHeadName() не, "" и значение не "##default", то значение является именем пространства имен.

См. Также:
substitutionHeadName()
Значение по умолчанию:
"##default"

substitutionHeadName

public abstract java.lang.String substitutionHeadName
XML локальное имя главного элемента группы замены.

Если значение"", тогда этот элемент не является частью любой группы замены.

См. Также:
substitutionHeadNamespace()
Значение по умолчанию:
""

defaultValue

public abstract java.lang.String defaultValue
Значение по умолчанию этого элемента.

'