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


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


@Retention(value=RUNTIME)
@Target(value={FIELD,METHOD})
public @interface XmlElementRef

Отображает свойство JavaBean на элемент XML, полученный из типа свойства.

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

Аннотация @XmlElementRef может использоваться со свойством JavaBean или изнутри XmlElementRefs

Эта аннотация динамически связывает имя элемента XML со свойством JavaBean. Когда свойство JavaBean аннотируется XmlElement, имя элемента XML статически получается из имени свойства JavaBean. Однако, когда эта аннотация используется, имя элемента XML получается из экземпляра типа свойства JavaBean во времени выполнения.

Групповая поддержка замены XML-схемы

XML-схема позволяет автору XML-документа использовать имена элементов XML, которые не были статически определены в модели контента схемы, используя группы замены. Схема полученный код оказывает поддержку для групп замены, использующих свойство элемента, (раздел 5.5.5, "Свойство Элемента" JAXB 2.0 спецификации). Сигнатура метода свойства элемента имеет форму:

     public void setTerm(JAXBElement<? extends Operator>);
     public JAXBElement<? extends Operator> getTerm();
 

Метод фабрики элемента, аннотируемый XmlElementDecl используется, чтобы создать экземпляр JAXBElement, содержа имя элемента XML. Присутствие @XmlElementRef аннотации на свойство элемента указывает, что имя элемента от экземпляра JAXBElement используется вместо того, чтобы произойти, имя элемента XML от свойства JavaBean называют.

Использование подвергается следующим ограничениям:

См. "Спецификацию Пакета" в javax.xml.bind.package javadoc для дополнительной общей информации.

Пример 1: Пример Задачи Муравья

Следующий Java иерархия class моделирует Муравья, создает сценарий. Задача Муравья соответствует class в иерархии class. Имя элемента XML задачи Муравья обозначается @XmlRootElement аннотацией на ее соответствующий class.
     @XmlRootElement(name="target")
     class Target {
         // The presence of @XmlElementRef indicates that the XML
         // element name will be derived from the @XmlRootElement 
         // annotation on the type (for e.g. "jar" for JarTask). 
         @XmlElementRef
         List<Task> tasks;
     }

     abstract class Task {
     }

     @XmlRootElement(name="jar")
     class JarTask extends Task {
         ...
     }

     @XmlRootElement(name="javac")
     class JavacTask extends Task {
         ...
     }

     <!-- XML Schema fragment -->
     <xs:element name="target" type="Target">
     <xs:complexType name="Target">
       <xs:sequence>
         <xs:choice maxOccurs="unbounded">
           <xs:element ref="jar">
           <xs:element ref="javac">
         </xs:choice>
       </xs:sequence>
     </xs:complexType>

 

Таким образом следующий фрагмент кода:

     Target target = new Target();
     target.tasks.add(new JarTask());
     target.tasks.add(new JavacTask());
     marshal(target);
 
произведет следующий вывод XML:

     <target>
       <jar>
         ....
       </jar>
       <javac>
         ....
       </javac>
     </target>
 

Это не ошибка иметь class, который расширяет Task, который не имеет XmlRootElement. Но они не могут обнаружиться в экземпляре XML (потому что у них нет имен элементов XML).

Пример 2: XML-схема групповая поддержка Susbstitution

Следующий пример показывает аннотации для групп замены XML-схемы. Аннотации и ObjectFactory получаются из схемы.

     @XmlElement
     class Math {
         //  The value of type()is 
         //  JAXBElement.class , which indicates the XML
         //  element name ObjectFactory - in general a class marked
         //  with @XmlRegistry. (See ObjectFactory below)
         //  
         //  The name() is "operator", a pointer to a
         // factory method annotated with a
         //  XmlElementDecl with the name "operator". Since
         //  "operator" is the head of a substitution group that
         //  contains elements "add" and "sub" elements, "operator"
         //  element can be substituted in an instance document by
         //  elements "add" or "sub". At runtime, JAXBElement
         //  instance contains the element name that has been
         //  substituted in the XML document.
         // 
         @XmlElementRef(type=JAXBElement.class,name="operator")
         JAXBElement<? extends Operator> term;
     }

     @XmlRegistry
     class ObjectFactory {
         @XmlElementDecl(name="operator")
         JAXBElement<Operator> createOperator(Operator o) {...}
         @XmlElementDecl(name="add",substitutionHeadName="operator")
         JAXBElement<Operator> createAdd(Operator o) {...}
         @XmlElementDecl(name="sub",substitutionHeadName="operator")
         JAXBElement<Operator> createSub(Operator o) {...}
     }

     class Operator {
         ...
     }
 

Таким образом, следующий фрагмент кода

     Math m = new Math();
     m.term = new ObjectFactory().createAdd(new Operator());
     marshal(m);
 
произведет следующий вывод XML:
     <math>
       <add>...</add>
     </math>
 

С тех пор:
JAXB2.0
Автор:
См. Также:
XmlElementRefs

Дополнительная Сводка Элемента
 java.lang.String имя
           
 java.lang.String пространство имен
          Этот параметр и name() используются, чтобы определить элемент XML для свойства JavaBean.
 boolean необходимый
          Настройте объявление элемента, которое будет требоваться.
 java.lang.Class ввести
          Ссылаемый тип Java.
 

ввести

public abstract java.lang.Class type
Ссылаемый тип Java.

Если значением является Значение по умолчанию class, тип выводится из тип свойства JavaBean.

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

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

public abstract java.lang.String namespace
Этот параметр и name() используются, чтобы определить элемент XML для свойства JavaBean.

Если type() является JAXBElement.class, то namespace() и name() указывают на метод фабрики с XmlElementDecl. Имя элемента XML является именем элемента от метода фабрики XmlElementDecl аннотация или если элементом от его группы замены (из которых это - главный элемент) заменили в XML-документе, тогда имя элемента, от XmlElementDecl на элементе, которым заменяют.

Если type() не JAXBElement.class, тогда имя элемента XML является именем элемента XML, статически связанным с типом, используя аннотацию XmlRootElement на типе. Если тип не аннотируется XmlElementDecl, тогда это - ошибка.

Если type() не является JAXBElement.class, то это значение должно быть "".

Значение по умолчанию:
""

имя

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

необходимый

public abstract boolean required
Настройте объявление элемента, которое будет требоваться.

Если требующийся () истина, то свойство Javabean отображается на объявление элемента XML-схемы с minOccurs = "1". maxOccurs "1" для единственного свойства, передаваемого по значению, и "неограничен" для многозначного свойства.

Если требующийся () ложь, то свойство Javabean отображается на объявление элемента XML-схемы с minOccurs = "0". maxOccurs "1" для единственного свойства, передаваемого по значению, и "неограничен" для многозначного свойства.

Для совместимости с JAXB 2.1, это свойство значения по умолчанию к true, несмотря на то, что XmlElement#required() значения по умолчанию ко лжи.

С тех пор:
2.2
Значение по умолчанию:
истина


Представьте ошибку или функцию

Авторское право © 2009-2011, Oracle Corporation и/или его филиалы. Все права защищены. Использование подвергается срокам действия лицензии.

Сгенерированный на 10-February-2011 12:41

free hit counter