01: /*
02: * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
03: * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
04: */
05:
06: package javax.xml.bind;
07:
08: import javax.xml.namespace.QName;
09:
10: /**
11: * Provide access to JAXB xml binding data for a JAXB object.
12: *
13: * <p>
14: * Intially, the intent of this class is to just conceptualize how
15: * a JAXB application developer can access xml binding information,
16: * independent if binding model is java to schema or schema to java.
17: * Since accessing the XML element name related to a JAXB element is
18: * a highly requested feature, demonstrate access to this
19: * binding information.
20: *
21: * The factory method to get a <code>JAXBIntrospector</code> instance is
22: * {@link JAXBContext#createJAXBIntrospector()}.
23: *
24: * @see JAXBContext#createJAXBIntrospector()
25: * @since JAXB2.0
26: */
27: public abstract class JAXBIntrospector {
28:
29: /**
30: * <p>Return true iff <code>object</code> represents a JAXB element.</p>
31: * <p>Parameter <code>object</code> is a JAXB element for following cases:
32: * <ol>
33: * <li>It is an instance of <code>javax.xml.bind.JAXBElement</code>.</li>
34: * <li>The class of <code>object</code> is annotated with
35: * <code>@XmlRootElement</code>.
36: * </li>
37: * </ol>
38: *
39: * @see #getElementName(Object)
40: */
41: public abstract boolean isElement(Object object);
42:
43: /**
44: * <p>Get xml element qname for <code>jaxbElement</code>.</p>
45: *
46: * @param jaxbElement is an object that {@link #isElement(Object)} returned true.
47: *
48: * @return xml element qname associated with jaxbElement;
49: * null if <code>jaxbElement</code> is not a JAXB Element.
50: */
51: public abstract QName getElementName(Object jaxbElement);
52:
53: /**
54: * <p>Get the element value of a JAXB element.</p>
55: *
56: * <p>Convenience method to abstract whether working with either
57: * a javax.xml.bind.JAXBElement instance or an instance of
58: * <tt>@XmlRootElement</tt> annotated Java class.</p>
59: *
60: * @param jaxbElement object that #isElement(Object) returns true.
61: *
62: * @return The element value of the <code>jaxbElement</code>.
63: */
64: public static Object getValue(Object jaxbElement) {
65: if (jaxbElement instanceof JAXBElement) {
66: return ((JAXBElement) jaxbElement).getValue();
67: } else {
68: // assume that class of this instance is
69: // annotated with @XmlRootElement.
70: return jaxbElement;
71: }
72: }
73: }
|