<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>Unmarshaller</title>
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>

<link rel="shortcut icon" href="/img/jakarta-favicon.ico">
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="Unmarshaller";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?jakarta/xml/bind/Unmarshaller.html" target="_top">Frames</a></li>
<li><a href="Unmarshaller.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">jakarta.xml.bind</div>
<h2 title="Interface Unmarshaller" class="title">Interface Unmarshaller</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../jakarta/xml/bind/helpers/AbstractUnmarshallerImpl.html" title="class in jakarta.xml.bind.helpers">AbstractUnmarshallerImpl</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">Unmarshaller</span></pre>
<div class="block">The <code>Unmarshaller</code> class governs the process of deserializing XML
 data into newly created Java content trees, optionally validating the XML
 data as it is unmarshalled.  It provides an overloading of unmarshal methods
 for many different input kinds.

 <p>
 Unmarshalling from a File:
 <blockquote>
    <pre>
       JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" );
       Unmarshaller u = jc.createUnmarshaller();
       Object o = u.unmarshal( new File( "nosferatu.xml" ) );
    </pre>
 </blockquote>


 <p>
 Unmarshalling from an InputStream:
 <blockquote>
    <pre>
       InputStream is = new FileInputStream( "nosferatu.xml" );
       JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" );
       Unmarshaller u = jc.createUnmarshaller();
       Object o = u.unmarshal( is );
    </pre>
 </blockquote>

 <p>
 Unmarshalling from a URL:
 <blockquote>
    <pre>
       JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" );
       Unmarshaller u = jc.createUnmarshaller();
       URL url = new URL( "http://beaker.east/nosferatu.xml" );
       Object o = u.unmarshal( url );
    </pre>
 </blockquote>

 <p>
 Unmarshalling from a StringBuffer using a
 <code>javax.xml.transform.stream.StreamSource</code>:
 <blockquote>
    <pre><code>
       JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" );
       Unmarshaller u = jc.createUnmarshaller();
       StringBuffer xmlStr = new StringBuffer( "&lt;?xml version="1.0"?&gt;..." );
       Object o = u.unmarshal( new StreamSource( new StringReader( xmlStr.toString() ) ) );
    </code></pre>
 </blockquote>

 <p>
 Unmarshalling from a <code>org.w3c.dom.Node</code>:
 <blockquote>
    <pre>
       JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" );
       Unmarshaller u = jc.createUnmarshaller();

       DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
       dbf.setNamespaceAware(true);
       DocumentBuilder db = dbf.newDocumentBuilder();
       Document doc = db.parse(new File( "nosferatu.xml"));

       Object o = u.unmarshal( doc );
    </pre>
 </blockquote>

 <p>
 Unmarshalling from a <code>javax.xml.transform.sax.SAXSource</code> using a
 client specified validating SAX2.0 parser:
 <blockquote>
    <pre>
       // configure a validating SAX2.0 parser (Xerces2)
       static final String JAXP_SCHEMA_LANGUAGE =
           "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
       static final String JAXP_SCHEMA_LOCATION =
           "http://java.sun.com/xml/jaxp/properties/schemaSource";
       static final String W3C_XML_SCHEMA =
           "http://www.w3.org/2001/XMLSchema";

       System.setProperty( "javax.xml.parsers.SAXParserFactory",
                           "org.apache.xerces.jaxp.SAXParserFactoryImpl" );

       SAXParserFactory spf = SAXParserFactory.newInstance();
       spf.setNamespaceAware(true);
       spf.setValidating(true);
       SAXParser saxParser = spf.newSAXParser();

       try {
           saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
           saxParser.setProperty(JAXP_SCHEMA_LOCATION, "http://....");
       } catch (SAXNotRecognizedException x) {
           // exception handling omitted
       }

       XMLReader xmlReader = saxParser.getXMLReader();
       SAXSource source =
           new SAXSource( xmlReader, new InputSource( "http://..." ) );

       // Setup Jakarta XML Binding to unmarshal
       JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" );
       Unmarshaller u = jc.createUnmarshaller();
       ValidationEventCollector vec = new ValidationEventCollector();
       u.setEventHandler( vec );

       // turn off the Jakarta XML Binding provider's default validation mechanism to
       // avoid duplicate validation
       u.setValidating( false )

       // unmarshal
       Object o = u.unmarshal( source );

       // check for events
       if( vec.hasEvents() ) {
          // iterate over events
       }
    </pre>
 </blockquote>

 <p>
 Unmarshalling from a StAX XMLStreamReader:
 <blockquote>
    <pre>
       JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" );
       Unmarshaller u = jc.createUnmarshaller();

       javax.xml.stream.XMLStreamReader xmlStreamReader =
           javax.xml.stream.XMLInputFactory().newInstance().createXMLStreamReader( ... );

       Object o = u.unmarshal( xmlStreamReader );
    </pre>
 </blockquote>

 <p>
 Unmarshalling from a StAX XMLEventReader:
 <blockquote>
    <pre>
       JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" );
       Unmarshaller u = jc.createUnmarshaller();

       javax.xml.stream.XMLEventReader xmlEventReader =
           javax.xml.stream.XMLInputFactory().newInstance().createXMLEventReader( ... );

       Object o = u.unmarshal( xmlEventReader );
    </pre>
 </blockquote>

 <p>
 <a id="unmarshalEx"></a>
 <b>Unmarshalling XML Data</b><br>
 <blockquote>
 Unmarshalling can deserialize XML data that represents either an entire XML document
 or a subtree of an XML document. Typically, it is sufficient to use the
 unmarshalling methods described by
 <a href="#unmarshalGlobal">Unmarshal root element that is declared globally</a>.
 These unmarshal methods utilize <a href="../../../jakarta/xml/bind/JAXBContext.html" title="class in jakarta.xml.bind"><code>JAXBContext</code></a>'s mapping of global XML element
 declarations and type definitions to Jakarta XML Binding mapped classes to initiate the
 unmarshalling of the root element of  XML data.  When the <a href="../../../jakarta/xml/bind/JAXBContext.html" title="class in jakarta.xml.bind"><code>JAXBContext</code></a>'s
 mappings are not sufficient to unmarshal the root element of XML data,
 the application can assist the unmarshalling process by using the
 <a href="#unmarshalByDeclaredType">unmarshal by declaredType methods</a>.
 These methods are useful for unmarshalling XML data where
 the root element corresponds to a local element declaration in the schema.
 </blockquote>

 <blockquote>
 An unmarshal method never returns null. If the unmarshal process is unable to unmarshal
 the root of XML content to a Jakarta XML Binding mapped object, a fatal error is reported that
 terminates processing by throwing JAXBException.
 </blockquote>

 <p>
 <a id="unmarshalGlobal"></a>
 <b>Unmarshal a root element that is globally declared</b><br>
 <blockquote>
 The unmarshal methods that do not have an <code>declaredType</code> parameter use
 <a href="../../../jakarta/xml/bind/JAXBContext.html" title="class in jakarta.xml.bind"><code>JAXBContext</code></a> to unmarshal the root element of an XML data. The <a href="../../../jakarta/xml/bind/JAXBContext.html" title="class in jakarta.xml.bind"><code>JAXBContext</code></a>
 instance is the one that was used to create this <code>Unmarshaller</code>. The <a href="../../../jakarta/xml/bind/JAXBContext.html" title="class in jakarta.xml.bind"><code>JAXBContext</code></a>
 instance maintains a mapping of globally declared XML element and type definition names to
 Jakarta XML Binding mapped classes. The unmarshal method checks if <a href="../../../jakarta/xml/bind/JAXBContext.html" title="class in jakarta.xml.bind"><code>JAXBContext</code></a> has a mapping
 from the root element's XML name and/or <code>@xsi:type</code> to a Jakarta XML Binding mapped class.  If it does, it umarshalls the
 XML data using the appropriate Jakarta XML Binding mapped class. Note that when the root element name is unknown and the root
 element has an <code>@xsi:type</code>, the XML data is unmarshalled
 using that Jakarta XML Binding mapped class as the value of a <a href="../../../jakarta/xml/bind/JAXBElement.html" title="class in jakarta.xml.bind"><code>JAXBElement</code></a>.
 When the <a href="../../../jakarta/xml/bind/JAXBContext.html" title="class in jakarta.xml.bind"><code>JAXBContext</code></a> object does not have a mapping for the root element's name
 nor its <code>@xsi:type</code>, if it exists,
 then the unmarshal operation will abort immediately by throwing a <a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind"><code>UnmarshalException</code></a>. This exception scenario can be worked around by using the unmarshal by
 declaredType methods described in the next subsection.
 </blockquote>

 <p>
 <a id="unmarshalByDeclaredType"></a>
 <b>Unmarshal by Declared Type</b><br>
 <blockquote>
 The unmarshal methods with a <code>declaredType</code> parameter enable an
 application to deserialize a root element of XML data, even when
 there is no mapping in <a href="../../../jakarta/xml/bind/JAXBContext.html" title="class in jakarta.xml.bind"><code>JAXBContext</code></a> of the root element's XML name.
 The unmarshaller unmarshals the root element using the application provided
 mapping specified as the <code>declaredType</code> parameter.
 Note that even when the root element's element name is mapped by <a href="../../../jakarta/xml/bind/JAXBContext.html" title="class in jakarta.xml.bind"><code>JAXBContext</code></a>,
 the <code>declaredType</code> parameter overrides that mapping for
 deserializing the root element when using these unmarshal methods.
 Additionally, when the root element of XML data has an <code>xsi:type</code> attribute and
 that attribute's value references a type definition that is mapped
 to a Jakarta XML Binding mapped class by <a href="../../../jakarta/xml/bind/JAXBContext.html" title="class in jakarta.xml.bind"><code>JAXBContext</code></a>, that the root
 element's <code>xsi:type</code> attribute takes
 precedence over the unmarshal methods <code>declaredType</code> parameter.
 These methods always return a <code>JAXBElement&lt;declaredType&gt;</code>
 instance. The table below shows how the properties of the returned JAXBElement
 instance are set.

 <a id="unmarshalDeclaredTypeReturn"></a>
   <table class="striped">
   <caption>Unmarshal By Declared Type returned JAXBElement</caption>
   <thead>
     <tr>
       <th scope="col">JAXBElement Property</th>
       <th scope="col">Value</th>
       </tr>
     <tr>
       <th scope="col">name</th>
       <th scope="col"><code>xml element name</code></th>
     </tr>
   </thead>
   <tbody>
     <tr>
       <th scope="row">value</th>
       <td><code>instanceof declaredType</code></td>
     </tr>
     <tr>
       <th scope="row">declaredType</th>
       <td>unmarshal method <code>declaredType</code> parameter</td>
     </tr>
     <tr>
       <th scope="row">scope</th>
       <td><code>null</code> <i>(actual scope is unknown)</i></td>
     </tr>
   </tbody>
  </table>
 </blockquote>

 <p>
 The following is an example of
 <a href="#unmarshalByDeclaredType">unmarshal by declaredType method</a>.
 <p>
 Unmarshal by declaredType from a <code>org.w3c.dom.Node</code>:
 <blockquote>
    <pre><code>
       Schema fragment for example
       &lt;xs:schema&gt;
          &lt;xs:complexType name="FooType"&gt;...&lt;\xs:complexType&gt;
          &lt;!-- global element declaration "PurchaseOrder" --&gt;
          &lt;xs:element name="PurchaseOrder"&gt;
              &lt;xs:complexType&gt;
                 &lt;xs:sequence&gt;
                    &lt;!-- local element declaration "foo" --&gt;
                    &lt;xs:element name="foo" type="FooType"/&gt;
                    ...
                 &lt;/xs:sequence&gt;
              &lt;/xs:complexType&gt;
          &lt;/xs:element&gt;
       &lt;/xs:schema&gt;

       JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" );
       Unmarshaller u = jc.createUnmarshaller();

       DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
       dbf.setNamespaceAware(true);
       DocumentBuilder db = dbf.newDocumentBuilder();
       Document doc = db.parse(new File( "nosferatu.xml"));
       Element  fooSubtree = ...; // traverse DOM till reach xml element foo, constrained by a
                                  // local element declaration in schema.

       // FooType is the Jakarta XML Binding mapping of the type of local element declaration foo.
       JAXBElement&lt;FooType&gt; foo = u.unmarshal( fooSubtree, FooType.class);
    </code></pre>
 </blockquote>

 <p>
 <b>Support for SAX2.0 Compliant Parsers</b><br>
 <blockquote>
 A client application has the ability to select the SAX2.0 compliant parser
 of their choice.  If a SAX parser is not selected, then the Jakarta XML Binding Provider's
 default parser will be used.  Even though the Jakarta XML Binding Provider's default parser
 is not required to be SAX2.0 compliant, all providers are required to allow
 a client application to specify their own SAX2.0 parser.  Some providers may
 require the client application to specify the SAX2.0 parser at schema compile
 time. See <a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-javax.xml.transform.Source-"><code>unmarshal(Source)</code></a>
 for more detail.
 </blockquote>

 <p>
 <b>Validation and Well-Formedness</b><br>
 <blockquote>
 <p>
 A client application can enable or disable JAXP validation
 mechanism via the <code>setSchema(javax.xml.validation.Schema)</code> API.
 Sophisticated clients can specify their own validating SAX 2.0 compliant
 parser and bypass the JAXP validation mechanism using the
 <a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-javax.xml.transform.Source-"><code>unmarshal(Source)</code></a>  API.

 <p>
 Since unmarshalling invalid XML content is defined in Jakarta XML Binding,
 the Unmarshaller default validation event handler was made more lenient
 than in JAXB 1.0.  When schema-derived code generated
 by JAXB 1.0 binding compiler is registered with <a href="../../../jakarta/xml/bind/JAXBContext.html" title="class in jakarta.xml.bind"><code>JAXBContext</code></a>,
 the default unmarshal validation handler is
 <a href="../../../jakarta/xml/bind/helpers/DefaultValidationEventHandler.html" title="class in jakarta.xml.bind.helpers"><code>DefaultValidationEventHandler</code></a> and it
 terminates the marshal  operation after encountering either a fatal error or an error.
 For a Jakarta XML Binding client application, there is no explicitly defined default
 validation handler and the default event handling only
 terminates the unmarshal operation after encountering a fatal error.

 </blockquote>

 <p>
 <a id="supportedProps"></a>
 <b>Supported Properties</b><br>
 <blockquote>
 <p>
 There currently are not any properties required to be supported by all
 Jakarta XML Binding Providers on Unmarshaller.  However, some providers may support
 their own set of provider specific properties.
 </blockquote>

 <p>
 <a id="unmarshalEventCallback"></a>
 <b>Unmarshal Event Callbacks</b><br>
 <blockquote>
 The <a href="../../../jakarta/xml/bind/Unmarshaller.html" title="interface in jakarta.xml.bind"><code>Unmarshaller</code></a> provides two styles of callback mechanisms
 that allow application specific processing during key points in the
 unmarshalling process.  In 'class defined' event callbacks, application
 specific code placed in Jakarta XML Binding mapped classes is triggered during
 unmarshalling.  'External listeners' allow for centralized processing
 of unmarshal events in one callback method rather than by type event callbacks.
 <p>
 'Class defined' event callback methods allow any Jakarta XML Binding mapped class to specify
 its own specific callback methods by defining methods with the following method signature:
 <blockquote>
 <pre>
   // This method is called immediately after the object is created and before the unmarshalling of this
   // object begins. The callback provides an opportunity to initialize JavaBean properties prior to unmarshalling.
   void beforeUnmarshal(Unmarshaller, Object parent);

   //This method is called after all the properties (except IDREF) are unmarshalled for this object,
   //but before this object is set to the parent object.
   void afterUnmarshal(Unmarshaller, Object parent);
 </pre>
 </blockquote>
 The class defined callback methods should be used when the callback method requires
 access to non-public methods and/or fields of the class.
 <p>
 The external listener callback mechanism enables the registration of a <a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind"><code>Unmarshaller.Listener</code></a>
 instance with an <a href="../../../jakarta/xml/bind/Unmarshaller.html#setListener-jakarta.xml.bind.Unmarshaller.Listener-"><code>setListener(Listener)</code></a>. The external listener receives all callback events,
 allowing for more centralized processing than per class defined callback methods.  The external listener
 receives events when unmarshalling process is marshalling to a Jakarta XML Binding element or to Jakarta XML Binding mapped class.
 <p>
 The 'class defined' and external listener event callback methods are independent of each other,
 both can be called for one event.  The invocation ordering when both listener callback methods exist is
 defined in <a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html#beforeUnmarshal-java.lang.Object-java.lang.Object-"><code>Unmarshaller.Listener.beforeUnmarshal(Object, Object)</code></a> and <a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html#afterUnmarshal-java.lang.Object-java.lang.Object-"><code>Unmarshaller.Listener.afterUnmarshal(Object, Object)</code></a>.
 <p>
 An event callback method throwing an exception terminates the current unmarshal process.

 </blockquote></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 1.0</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../jakarta/xml/bind/JAXBContext.html" title="class in jakarta.xml.bind"><code>JAXBContext</code></a>, 
<a href="../../../jakarta/xml/bind/Marshaller.html" title="interface in jakarta.xml.bind"><code>Marshaller</code></a></dd>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
<dd><a href="../../../../../../tomee-9.0/examples/rest-on-ejb.html">rest-on-ejb</a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!--   -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Interface and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind">Unmarshaller.Listener</a></span></code>
<div class="block">
 Register an instance of an implementation of this class with <a href="../../../jakarta/xml/bind/Unmarshaller.html" title="interface in jakarta.xml.bind"><code>Unmarshaller</code></a> to externally listen
 for unmarshal events.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>&lt;A extends <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters">XmlAdapter</a>&lt;?,?&gt;&gt;<br>A</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#getAdapter-java.lang.Class-">getAdapter</a></span>(java.lang.Class&lt;A&gt;&nbsp;type)</code>
<div class="block">Gets the adapter associated with the specified type.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../jakarta/xml/bind/attachment/AttachmentUnmarshaller.html" title="class in jakarta.xml.bind.attachment">AttachmentUnmarshaller</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#getAttachmentUnmarshaller--">getAttachmentUnmarshaller</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind">ValidationEventHandler</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#getEventHandler--">getEventHandler</a></span>()</code>
<div class="block">Return the current event handler or the default event handler if one
 hasn't been set.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind">Unmarshaller.Listener</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#getListener--">getListener</a></span>()</code>
<div class="block">Return <a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind"><code>Unmarshaller.Listener</code></a> registered with this <a href="../../../jakarta/xml/bind/Unmarshaller.html" title="interface in jakarta.xml.bind"><code>Unmarshaller</code></a>.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#getProperty-java.lang.String-">getProperty</a></span>(java.lang.String&nbsp;name)</code>
<div class="block">Get the particular property in the underlying implementation of
 <code>Unmarshaller</code>.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>javax.xml.validation.Schema</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#getSchema--">getSchema</a></span>()</code>
<div class="block">Get the JAXP <code>Schema</code> object
 being used to perform unmarshal-time validation.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code><a href="../../../jakarta/xml/bind/UnmarshallerHandler.html" title="interface in jakarta.xml.bind">UnmarshallerHandler</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#getUnmarshallerHandler--">getUnmarshallerHandler</a></span>()</code>
<div class="block">Get an unmarshaller handler object that can be used as a component in
 an XML pipeline.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>&lt;A extends <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters">XmlAdapter</a>&lt;?,?&gt;&gt;<br>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#setAdapter-A-">setAdapter</a></span>(A&nbsp;adapter)</code>
<div class="block">Associates a configured instance of <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters"><code>XmlAdapter</code></a> with this unmarshaller.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>&lt;A extends <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters">XmlAdapter</a>&lt;?,?&gt;&gt;<br>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#setAdapter-java.lang.Class-A-">setAdapter</a></span>(java.lang.Class&lt;A&gt;&nbsp;type,
          A&nbsp;adapter)</code>
<div class="block">Associates a configured instance of <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters"><code>XmlAdapter</code></a> with this unmarshaller.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#setAttachmentUnmarshaller-jakarta.xml.bind.attachment.AttachmentUnmarshaller-">setAttachmentUnmarshaller</a></span>(<a href="../../../jakarta/xml/bind/attachment/AttachmentUnmarshaller.html" title="class in jakarta.xml.bind.attachment">AttachmentUnmarshaller</a>&nbsp;au)</code>
<div class="block">Associate a context that resolves cid's, content-id URIs, to
 binary data passed as attachments.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#setEventHandler-jakarta.xml.bind.ValidationEventHandler-">setEventHandler</a></span>(<a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind">ValidationEventHandler</a>&nbsp;handler)</code>
<div class="block">Allow an application to register a <code>ValidationEventHandler</code>.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#setListener-jakarta.xml.bind.Unmarshaller.Listener-">setListener</a></span>(<a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind">Unmarshaller.Listener</a>&nbsp;listener)</code>
<div class="block">
 Register unmarshal event callback <a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind"><code>Unmarshaller.Listener</code></a> with this <a href="../../../jakarta/xml/bind/Unmarshaller.html" title="interface in jakarta.xml.bind"><code>Unmarshaller</code></a>.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#setProperty-java.lang.String-java.lang.Object-">setProperty</a></span>(java.lang.String&nbsp;name,
           java.lang.Object&nbsp;value)</code>
<div class="block">Set the particular property in the underlying implementation of
 <code>Unmarshaller</code>.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#setSchema-javax.xml.validation.Schema-">setSchema</a></span>(javax.xml.validation.Schema&nbsp;schema)</code>
<div class="block">Specify the JAXP <code>Schema</code>
 object that should be used to validate subsequent unmarshal operations
 against.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-java.io.File-">unmarshal</a></span>(java.io.File&nbsp;f)</code>
<div class="block">Unmarshal XML data from the specified file and return the resulting
 content tree.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-org.xml.sax.InputSource-">unmarshal</a></span>(org.xml.sax.InputSource&nbsp;source)</code>
<div class="block">Unmarshal XML data from the specified SAX InputSource and return the
 resulting content tree.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-java.io.InputStream-">unmarshal</a></span>(java.io.InputStream&nbsp;is)</code>
<div class="block">Unmarshal XML data from the specified InputStream and return the
 resulting content tree.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-org.w3c.dom.Node-">unmarshal</a></span>(org.w3c.dom.Node&nbsp;node)</code>
<div class="block">Unmarshal global XML data from the specified DOM tree and return the resulting
 content tree.</div>
</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>&lt;T&gt;&nbsp;<a href="../../../jakarta/xml/bind/JAXBElement.html" title="class in jakarta.xml.bind">JAXBElement</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-org.w3c.dom.Node-java.lang.Class-">unmarshal</a></span>(org.w3c.dom.Node&nbsp;node,
         java.lang.Class&lt;T&gt;&nbsp;declaredType)</code>
<div class="block">Unmarshal XML data by Jakarta XML Binding mapped <code>declaredType</code>
 and return the resulting content tree.</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-java.io.Reader-">unmarshal</a></span>(java.io.Reader&nbsp;reader)</code>
<div class="block">Unmarshal XML data from the specified Reader and return the
 resulting content tree.</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-javax.xml.transform.Source-">unmarshal</a></span>(javax.xml.transform.Source&nbsp;source)</code>
<div class="block">Unmarshal XML data from the specified XML Source and return the
 resulting content tree.</div>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>&lt;T&gt;&nbsp;<a href="../../../jakarta/xml/bind/JAXBElement.html" title="class in jakarta.xml.bind">JAXBElement</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-javax.xml.transform.Source-java.lang.Class-">unmarshal</a></span>(javax.xml.transform.Source&nbsp;source,
         java.lang.Class&lt;T&gt;&nbsp;declaredType)</code>
<div class="block">Unmarshal XML data from the specified XML Source by <code>declaredType</code> and return the
 resulting content tree.</div>
</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-java.net.URL-">unmarshal</a></span>(java.net.URL&nbsp;url)</code>
<div class="block">Unmarshal XML data from the specified URL and return the resulting
 content tree.</div>
</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-javax.xml.stream.XMLEventReader-">unmarshal</a></span>(javax.xml.stream.XMLEventReader&nbsp;reader)</code>
<div class="block">Unmarshal XML data from the specified pull parser and return the
 resulting content tree.</div>
</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code>&lt;T&gt;&nbsp;<a href="../../../jakarta/xml/bind/JAXBElement.html" title="class in jakarta.xml.bind">JAXBElement</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-javax.xml.stream.XMLEventReader-java.lang.Class-">unmarshal</a></span>(javax.xml.stream.XMLEventReader&nbsp;reader,
         java.lang.Class&lt;T&gt;&nbsp;declaredType)</code>
<div class="block">Unmarshal root element to Jakarta XML Binding mapped <code>declaredType</code>
 and return the resulting content tree.</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-javax.xml.stream.XMLStreamReader-">unmarshal</a></span>(javax.xml.stream.XMLStreamReader&nbsp;reader)</code>
<div class="block">Unmarshal XML data from the specified pull parser and return the
 resulting content tree.</div>
</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code>&lt;T&gt;&nbsp;<a href="../../../jakarta/xml/bind/JAXBElement.html" title="class in jakarta.xml.bind">JAXBElement</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-javax.xml.stream.XMLStreamReader-java.lang.Class-">unmarshal</a></span>(javax.xml.stream.XMLStreamReader&nbsp;reader,
         java.lang.Class&lt;T&gt;&nbsp;declaredType)</code>
<div class="block">Unmarshal root element to Jakarta XML Binding mapped <code>declaredType</code>
 and return the resulting content tree.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="unmarshal-java.io.File-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>java.lang.Object&nbsp;unmarshal(java.io.File&nbsp;f)
                    throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal XML data from the specified file and return the resulting
 content tree.

 <p>
 Implements <a href="#unmarshalGlobal">Unmarshal Global Root Element</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>f</code> - the file to unmarshal XML data from</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created root object of the java content tree</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If the file parameter is null</dd>
</dl>
</li>
</ul>
<a name="unmarshal-java.io.InputStream-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>java.lang.Object&nbsp;unmarshal(java.io.InputStream&nbsp;is)
                    throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal XML data from the specified InputStream and return the
 resulting content tree.  Validation event location information may
 be incomplete when using this form of the unmarshal API.

 <p>
 Implements <a href="#unmarshalGlobal">Unmarshal Global Root Element</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>is</code> - the InputStream to unmarshal XML data from</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created root object of the java content tree</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If the InputStream parameter is null</dd>
</dl>
</li>
</ul>
<a name="unmarshal-java.io.Reader-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>java.lang.Object&nbsp;unmarshal(java.io.Reader&nbsp;reader)
                    throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal XML data from the specified Reader and return the
 resulting content tree.  Validation event location information may
 be incomplete when using this form of the unmarshal API,
 because a Reader does not provide the system ID.

 <p>
 Implements <a href="#unmarshalGlobal">Unmarshal Global Root Element</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>reader</code> - the Reader to unmarshal XML data from</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created root object of the java content tree</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If the InputStream parameter is null</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
</dl>
</li>
</ul>
<a name="unmarshal-java.net.URL-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>java.lang.Object&nbsp;unmarshal(java.net.URL&nbsp;url)
                    throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal XML data from the specified URL and return the resulting
 content tree.

 <p>
 Implements <a href="#unmarshalGlobal">Unmarshal Global Root Element</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>url</code> - the url to unmarshal XML data from</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created root object of the java content tree</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If the URL parameter is null</dd>
</dl>
</li>
</ul>
<a name="unmarshal-org.xml.sax.InputSource-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>java.lang.Object&nbsp;unmarshal(org.xml.sax.InputSource&nbsp;source)
                    throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal XML data from the specified SAX InputSource and return the
 resulting content tree.

 <p>
 Implements <a href="#unmarshalGlobal">Unmarshal Global Root Element</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>source</code> - the input source to unmarshal XML data from</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created root object of the java content tree</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If the InputSource parameter is null</dd>
</dl>
</li>
</ul>
<a name="unmarshal-org.w3c.dom.Node-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>java.lang.Object&nbsp;unmarshal(org.w3c.dom.Node&nbsp;node)
                    throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal global XML data from the specified DOM tree and return the resulting
 content tree.

 <p>
 Implements <a href="#unmarshalGlobal">Unmarshal Global Root Element</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>node</code> - the document/element to unmarshal XML data from.
      The caller must support at least Document and Element.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created root object of the java content tree</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If the Node parameter is null</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-org.w3c.dom.Node-java.lang.Class-"><code>unmarshal(org.w3c.dom.Node, Class)</code></a></dd>
</dl>
</li>
</ul>
<a name="unmarshal-org.w3c.dom.Node-java.lang.Class-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>&lt;T&gt;&nbsp;<a href="../../../jakarta/xml/bind/JAXBElement.html" title="class in jakarta.xml.bind">JAXBElement</a>&lt;T&gt;&nbsp;unmarshal(org.w3c.dom.Node&nbsp;node,
                             java.lang.Class&lt;T&gt;&nbsp;declaredType)
                      throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal XML data by Jakarta XML Binding mapped <code>declaredType</code>
 and return the resulting content tree.

 <p>
 Implements <a href="#unmarshalByDeclaredType">Unmarshal by Declared Type</a></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - the XML Binding mapped class</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>node</code> - the document/element to unmarshal XML data from.
      The caller must support at least Document and Element.</dd>
<dd><code>declaredType</code> - appropriate Jakarta XML Binding mapped class to hold <code>node</code>'s XML data.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><a href="#unmarshalDeclaredTypeReturn">JAXBElement</a> representation of <code>node</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If any parameter is null</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
</dl>
</li>
</ul>
<a name="unmarshal-javax.xml.transform.Source-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>java.lang.Object&nbsp;unmarshal(javax.xml.transform.Source&nbsp;source)
                    throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal XML data from the specified XML Source and return the
 resulting content tree.

 <p>
 Implements <a href="#unmarshalGlobal">Unmarshal Global Root Element</a>.

 <p>
 <a id="saxParserPlugable"></a>
 <b>SAX 2.0 Parser Pluggability</b>
 <p>
 A client application can choose not to use the default parser mechanism
 supplied with their Jakarta XML Binding provider.  Any SAX 2.0 compliant parser can be
 substituted for the Jakarta XML Binding provider's default mechanism.  To do so, the
 client application must properly configure a <code>SAXSource</code> containing
 an <code>XMLReader</code> implemented by the SAX 2.0 parser provider.  If the
 <code>XMLReader</code> has an <code>org.xml.sax.ErrorHandler</code> registered
 on it, it will be replaced by the Jakarta XML Binding Provider so that validation errors
 can be reported via the <code>ValidationEventHandler</code> mechanism of
 Jakarta XML Binding.  If the <code>SAXSource</code> does not contain an <code>XMLReader</code>,
 then the Jakarta XML Binding provider's default parser mechanism will be used.
 <p>
 This parser replacement mechanism can also be used to replace the Jakarta XML Binding
 provider's unmarshal-time validation engine.  The client application
 must properly configure their SAX 2.0 compliant parser to perform
 validation (as shown in the example above).  Any <code>SAXParserExceptions</code>
 encountered by the parser during the unmarshal operation will be
 processed by the Jakarta XML Binding provider and converted into Jakarta XML Binding
 <code>ValidationEvent</code> objects which will be reported back to the
 client via the <code>ValidationEventHandler</code> registered with the
 <code>Unmarshaller</code>.  <i>Note:</i> specifying a substitute validating
 SAX 2.0 parser for unmarshalling does not necessarily replace the
 validation engine used by the Jakarta XML Binding provider for performing on-demand
 validation.
 <p>
 The only way for a client application to specify an alternate parser
 mechanism to be used during unmarshal is via the
 <code>unmarshal(SAXSource)</code> API.  All other forms of the unmarshal
 method (File, URL, Node, etc) will use the Jakarta XML Binding provider's default
 parser and validator mechanisms.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>source</code> - the XML Source to unmarshal XML data from (providers are
        only required to support SAXSource, DOMSource, and StreamSource)</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created root object of the java content tree</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If the Source parameter is null</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-javax.xml.transform.Source-java.lang.Class-"><code>unmarshal(javax.xml.transform.Source, Class)</code></a></dd>
</dl>
</li>
</ul>
<a name="unmarshal-javax.xml.transform.Source-java.lang.Class-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>&lt;T&gt;&nbsp;<a href="../../../jakarta/xml/bind/JAXBElement.html" title="class in jakarta.xml.bind">JAXBElement</a>&lt;T&gt;&nbsp;unmarshal(javax.xml.transform.Source&nbsp;source,
                             java.lang.Class&lt;T&gt;&nbsp;declaredType)
                      throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal XML data from the specified XML Source by <code>declaredType</code> and return the
 resulting content tree.

 <p>
 Implements <a href="#unmarshalByDeclaredType">Unmarshal by Declared Type</a>

 <p>
 See <a href="#saxParserPlugable">SAX 2.0 Parser Pluggability</a></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - the XML Binding mapped class</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>source</code> - the XML Source to unmarshal XML data from (providers are
        only required to support SAXSource, DOMSource, and StreamSource)</dd>
<dd><code>declaredType</code> - appropriate Jakarta XML Binding mapped class to hold <code>source</code>'s xml root element</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Java content rooted by <a href="#unmarshalDeclaredTypeReturn">JAXBElement</a></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If any parameter is null</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
</dl>
</li>
</ul>
<a name="unmarshal-javax.xml.stream.XMLStreamReader-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>java.lang.Object&nbsp;unmarshal(javax.xml.stream.XMLStreamReader&nbsp;reader)
                    throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal XML data from the specified pull parser and return the
 resulting content tree.

 <p>
 Implements <a href="#unmarshalGlobal">Unmarshal Global Root Element</a>.

 <p>
 This method assumes that the parser is on a START_DOCUMENT or
 START_ELEMENT event.  Unmarshalling will be done from this
 start event to the corresponding end event.  If this method
 returns successfully, the <code>reader</code> will be pointing at
 the token right after the end event.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>reader</code> - The parser to be read.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created root object of the java content tree.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If the <code>reader</code> parameter is null</dd>
<dd><code>java.lang.IllegalStateException</code> - If <code>reader</code> is not pointing to a START_DOCUMENT or
      START_ELEMENT  event.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-javax.xml.stream.XMLStreamReader-java.lang.Class-"><code>unmarshal(javax.xml.stream.XMLStreamReader, Class)</code></a></dd>
</dl>
</li>
</ul>
<a name="unmarshal-javax.xml.stream.XMLStreamReader-java.lang.Class-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>&lt;T&gt;&nbsp;<a href="../../../jakarta/xml/bind/JAXBElement.html" title="class in jakarta.xml.bind">JAXBElement</a>&lt;T&gt;&nbsp;unmarshal(javax.xml.stream.XMLStreamReader&nbsp;reader,
                             java.lang.Class&lt;T&gt;&nbsp;declaredType)
                      throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal root element to Jakarta XML Binding mapped <code>declaredType</code>
 and return the resulting content tree.

 <p>
 This method implements <a href="#unmarshalByDeclaredType">unmarshal by declaredType</a>.
 <p>
 This method assumes that the parser is on a START_DOCUMENT or
 START_ELEMENT event. Unmarshalling will be done from this
 start event to the corresponding end event.  If this method
 returns successfully, the <code>reader</code> will be pointing at
 the token right after the end event.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - the XML Binding mapped class</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>reader</code> - The parser to be read.</dd>
<dd><code>declaredType</code> - appropriate Jakarta XML Binding mapped class to hold <code>reader</code>'s START_ELEMENT XML data.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>content tree rooted by <a href="#unmarshalDeclaredTypeReturn">JAXBElement</a> representation</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If any parameter is null</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
</dl>
</li>
</ul>
<a name="unmarshal-javax.xml.stream.XMLEventReader-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>java.lang.Object&nbsp;unmarshal(javax.xml.stream.XMLEventReader&nbsp;reader)
                    throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal XML data from the specified pull parser and return the
 resulting content tree.

 <p>
 This method is an <a href="#unmarshalGlobal">Unmarshal Global Root method</a>.

 <p>
 This method assumes that the parser is on a START_DOCUMENT or
 START_ELEMENT event.  Unmarshalling will be done from this
 start event to the corresponding end event.  If this method
 returns successfully, the <code>reader</code> will be pointing at
 the token right after the end event.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>reader</code> - The parser to be read.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the newly created root object of the java content tree.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If the <code>reader</code> parameter is null</dd>
<dd><code>java.lang.IllegalStateException</code> - If <code>reader</code> is not pointing to a START_DOCUMENT or
      START_ELEMENT event.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../jakarta/xml/bind/Unmarshaller.html#unmarshal-javax.xml.stream.XMLEventReader-java.lang.Class-"><code>unmarshal(javax.xml.stream.XMLEventReader, Class)</code></a></dd>
</dl>
</li>
</ul>
<a name="unmarshal-javax.xml.stream.XMLEventReader-java.lang.Class-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unmarshal</h4>
<pre>&lt;T&gt;&nbsp;<a href="../../../jakarta/xml/bind/JAXBElement.html" title="class in jakarta.xml.bind">JAXBElement</a>&lt;T&gt;&nbsp;unmarshal(javax.xml.stream.XMLEventReader&nbsp;reader,
                             java.lang.Class&lt;T&gt;&nbsp;declaredType)
                      throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Unmarshal root element to Jakarta XML Binding mapped <code>declaredType</code>
 and return the resulting content tree.

 <p>
 This method implements <a href="#unmarshalByDeclaredType">unmarshal by declaredType</a>.

 <p>
 This method assumes that the parser is on a START_DOCUMENT or
 START_ELEMENT event. Unmarshalling will be done from this
 start event to the corresponding end event.  If this method
 returns successfully, the <code>reader</code> will be pointing at
 the token right after the end event.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - the XML Binding mapped class</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>reader</code> - The parser to be read.</dd>
<dd><code>declaredType</code> - appropriate Jakarta XML Binding mapped class to hold <code>reader</code>'s START_ELEMENT XML data.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>content tree rooted by <a href="#unmarshalDeclaredTypeReturn">JAXBElement</a> representation</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - If any unexpected errors occur while unmarshalling</dd>
<dd><code><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind">UnmarshalException</a></code> - If the <a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind"><code>ValidationEventHandler</code></a>
     returns false from its <code>handleEvent</code> method or the
     <code>Unmarshaller</code> is unable to perform the XML to Java
     binding.  See <a href="#unmarshalEx">Unmarshalling XML Data</a></dd>
<dd><code>java.lang.IllegalArgumentException</code> - If any parameter is null</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
</dl>
</li>
</ul>
<a name="getUnmarshallerHandler--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getUnmarshallerHandler</h4>
<pre><a href="../../../jakarta/xml/bind/UnmarshallerHandler.html" title="interface in jakarta.xml.bind">UnmarshallerHandler</a>&nbsp;getUnmarshallerHandler()</pre>
<div class="block">Get an unmarshaller handler object that can be used as a component in
 an XML pipeline.

 <p>
 The Jakarta XML Binding Provider can return the same handler object for multiple
 invocations of this method. In other words, this method does not
 necessarily create a new instance of <code>UnmarshallerHandler</code>. If the
 application needs to use more than one <code>UnmarshallerHandler</code>, it
 should create more than one <code>Unmarshaller</code>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the unmarshaller handler object</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../jakarta/xml/bind/UnmarshallerHandler.html" title="interface in jakarta.xml.bind"><code>UnmarshallerHandler</code></a></dd>
</dl>
</li>
</ul>
<a name="setEventHandler-jakarta.xml.bind.ValidationEventHandler-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setEventHandler</h4>
<pre>void&nbsp;setEventHandler(<a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind">ValidationEventHandler</a>&nbsp;handler)
              throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Allow an application to register a <code>ValidationEventHandler</code>.
 <p>
 The <code>ValidationEventHandler</code> will be called by the Jakarta XML Binding Provider
 if any validation errors are encountered during calls to any of the
 unmarshal methods.  If the client application does not register a
 <code>ValidationEventHandler</code> before invoking the unmarshal methods,
 then <code>ValidationEvents</code> will be handled by the default event
 handler which will terminate the unmarshal operation after the first
 error or fatal error is encountered.
 <p>
 Calling this method with a null parameter will cause the Unmarshaller
 to revert back to the default event handler.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>handler</code> - the validation event handler</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - if an error was encountered while setting the
         event handler</dd>
</dl>
</li>
</ul>
<a name="getEventHandler--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getEventHandler</h4>
<pre><a href="../../../jakarta/xml/bind/ValidationEventHandler.html" title="interface in jakarta.xml.bind">ValidationEventHandler</a>&nbsp;getEventHandler()
                                throws <a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></pre>
<div class="block">Return the current event handler or the default event handler if one
 hasn't been set.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the current ValidationEventHandler or the default event handler
         if it hasn't been set</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/JAXBException.html" title="class in jakarta.xml.bind">JAXBException</a></code> - if an error was encountered while getting the
         current event handler</dd>
</dl>
</li>
</ul>
<a name="setProperty-java.lang.String-java.lang.Object-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setProperty</h4>
<pre>void&nbsp;setProperty(java.lang.String&nbsp;name,
                 java.lang.Object&nbsp;value)
          throws <a href="../../../jakarta/xml/bind/PropertyException.html" title="class in jakarta.xml.bind">PropertyException</a></pre>
<div class="block">Set the particular property in the underlying implementation of
 <code>Unmarshaller</code>.  This method can only be used to set one of
 the standard Jakarta XML Binding defined properties above or a provider specific
 property.  Attempting to set an undefined property will result in
 a PropertyException being thrown.  See <a href="#supportedProps">
 Supported Properties</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>name</code> - the name of the property to be set. This value can either
              be specified using one of the constant fields or a user
              supplied string.</dd>
<dd><code>value</code> - the value of the property to be set</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/PropertyException.html" title="class in jakarta.xml.bind">PropertyException</a></code> - when there is an error processing the given
                            property or value</dd>
<dd><code>java.lang.IllegalArgumentException</code> - If the name parameter is null</dd>
</dl>
</li>
</ul>
<a name="getProperty-java.lang.String-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getProperty</h4>
<pre>java.lang.Object&nbsp;getProperty(java.lang.String&nbsp;name)
                      throws <a href="../../../jakarta/xml/bind/PropertyException.html" title="class in jakarta.xml.bind">PropertyException</a></pre>
<div class="block">Get the particular property in the underlying implementation of
 <code>Unmarshaller</code>.  This method can only be used to get one of
 the standard Jakarta XML Binding defined properties above or a provider specific
 property.  Attempting to get an undefined property will result in
 a PropertyException being thrown.  See <a href="#supportedProps">
 Supported Properties</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>name</code> - the name of the property to retrieve</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the value of the requested property</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../jakarta/xml/bind/PropertyException.html" title="class in jakarta.xml.bind">PropertyException</a></code> - when there is an error retrieving the given property or value
      property name</dd>
<dd><code>java.lang.IllegalArgumentException</code> - If the name parameter is null</dd>
</dl>
</li>
</ul>
<a name="setSchema-javax.xml.validation.Schema-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setSchema</h4>
<pre>void&nbsp;setSchema(javax.xml.validation.Schema&nbsp;schema)</pre>
<div class="block">Specify the JAXP <code>Schema</code>
 object that should be used to validate subsequent unmarshal operations
 against.  Passing null into this method will disable validation.

 <p>
 Initially this property is set to <code>null</code>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>schema</code> - Schema object to validate unmarshal operations against or null to disable validation</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.UnsupportedOperationException</code> - could be thrown if this method is
         invoked on an Unmarshaller created from a JAXBContext referencing
         JAXB 1.0 mapped classes</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
</dl>
</li>
</ul>
<a name="getSchema--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSchema</h4>
<pre>javax.xml.validation.Schema&nbsp;getSchema()</pre>
<div class="block">Get the JAXP <code>Schema</code> object
 being used to perform unmarshal-time validation.  If there is no
 Schema set on the unmarshaller, then this method will return null
 indicating that unmarshal-time validation will not be performed.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the Schema object being used to perform unmarshal-time
      validation or null if not present</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.UnsupportedOperationException</code> - could be thrown if this method is
         invoked on an Unmarshaller created from a JAXBContext referencing
         JAXB 1.0 mapped classes</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
</dl>
</li>
</ul>
<a name="setAdapter-jakarta.xml.bind.annotation.adapters.XmlAdapter-">
<!--   -->
</a><a name="setAdapter-A-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setAdapter</h4>
<pre>&lt;A extends <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters">XmlAdapter</a>&lt;?,?&gt;&gt;&nbsp;void&nbsp;setAdapter(A&nbsp;adapter)</pre>
<div class="block">Associates a configured instance of <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters"><code>XmlAdapter</code></a> with this unmarshaller.

 <p>
 This is a convenience method that invokes <code>setAdapter(adapter.getClass(),adapter);</code>.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>A</code> - the type of <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters"><code>XmlAdapter</code></a></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>adapter</code> - the configured instance of <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters"><code>XmlAdapter</code></a></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalArgumentException</code> - if the adapter parameter is null.</dd>
<dd><code>java.lang.UnsupportedOperationException</code> - if invoked agains a JAXB 1.0 implementation.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../jakarta/xml/bind/Unmarshaller.html#setAdapter-java.lang.Class-A-"><code>setAdapter(Class,XmlAdapter)</code></a></dd>
</dl>
</li>
</ul>
<a name="setAdapter-java.lang.Class-jakarta.xml.bind.annotation.adapters.XmlAdapter-">
<!--   -->
</a><a name="setAdapter-java.lang.Class-A-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setAdapter</h4>
<pre>&lt;A extends <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters">XmlAdapter</a>&lt;?,?&gt;&gt;&nbsp;void&nbsp;setAdapter(java.lang.Class&lt;A&gt;&nbsp;type,
                                            A&nbsp;adapter)</pre>
<div class="block">Associates a configured instance of <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters"><code>XmlAdapter</code></a> with this unmarshaller.

 <p>
 Every unmarshaller internally maintains a
 <code>Map</code>&lt;<code>Class</code>,<a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters"><code>XmlAdapter</code></a>&gt;,
 which it uses for unmarshalling classes whose fields/methods are annotated
 with <a href="../../../jakarta/xml/bind/annotation/adapters/XmlJavaTypeAdapter.html" title="annotation in jakarta.xml.bind.annotation.adapters"><code>XmlJavaTypeAdapter</code></a>.

 <p>
 This method allows applications to use a configured instance of <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters"><code>XmlAdapter</code></a>.
 When an instance of an adapter is not given, an unmarshaller will create
 one by invoking its default constructor.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>A</code> - the type of the adapter</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>type</code> - The type of the adapter. The specified instance will be used when
      <a href="../../../jakarta/xml/bind/annotation/adapters/XmlJavaTypeAdapter.html#value--"><code>XmlJavaTypeAdapter.value()</code></a>
      refers to this type.</dd>
<dd><code>adapter</code> - The instance of the adapter to be used. If null, it will un-register
      the current adapter set for this type.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalArgumentException</code> - if the type parameter is null.</dd>
<dd><code>java.lang.UnsupportedOperationException</code> - if invoked agains a JAXB 1.0 implementation.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
</dl>
</li>
</ul>
<a name="getAdapter-java.lang.Class-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getAdapter</h4>
<pre>&lt;A extends <a href="../../../jakarta/xml/bind/annotation/adapters/XmlAdapter.html" title="class in jakarta.xml.bind.annotation.adapters">XmlAdapter</a>&lt;?,?&gt;&gt;&nbsp;A&nbsp;getAdapter(java.lang.Class&lt;A&gt;&nbsp;type)</pre>
<div class="block">Gets the adapter associated with the specified type.
 This is the reverse operation of the <a href="../../../jakarta/xml/bind/Unmarshaller.html#setAdapter-A-"><code>setAdapter(A)</code></a> method.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>A</code> - the type of the adapter</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>type</code> - The type of the adapter. The specified instance will be used when
      <a href="../../../jakarta/xml/bind/annotation/adapters/XmlJavaTypeAdapter.html#value--"><code>XmlJavaTypeAdapter.value()</code></a>
      refers to this type.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The adapter associated with the specified type.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalArgumentException</code> - if the type parameter is null.</dd>
<dd><code>java.lang.UnsupportedOperationException</code> - if invoked agains a JAXB 1.0 implementation.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
</dl>
</li>
</ul>
<a name="setAttachmentUnmarshaller-jakarta.xml.bind.attachment.AttachmentUnmarshaller-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setAttachmentUnmarshaller</h4>
<pre>void&nbsp;setAttachmentUnmarshaller(<a href="../../../jakarta/xml/bind/attachment/AttachmentUnmarshaller.html" title="class in jakarta.xml.bind.attachment">AttachmentUnmarshaller</a>&nbsp;au)</pre>
<div class="block">Associate a context that resolves cid's, content-id URIs, to
 binary data passed as attachments.
 Unmarshal time validation, enabled via <a href="../../../jakarta/xml/bind/Unmarshaller.html#setSchema-javax.xml.validation.Schema-"><code>setSchema(Schema)</code></a>,
 must be supported even when unmarshaller is performing XOP processing.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>au</code> - the attachment unmarshaller to be set</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalStateException</code> - if attempt to concurrently call this
                               method during a unmarshal operation.</dd>
</dl>
</li>
</ul>
<a name="getAttachmentUnmarshaller--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getAttachmentUnmarshaller</h4>
<pre><a href="../../../jakarta/xml/bind/attachment/AttachmentUnmarshaller.html" title="class in jakarta.xml.bind.attachment">AttachmentUnmarshaller</a>&nbsp;getAttachmentUnmarshaller()</pre>
</li>
</ul>
<a name="setListener-jakarta.xml.bind.Unmarshaller.Listener-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setListener</h4>
<pre>void&nbsp;setListener(<a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind">Unmarshaller.Listener</a>&nbsp;listener)</pre>
<div class="block"><p>
 Register unmarshal event callback <a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind"><code>Unmarshaller.Listener</code></a> with this <a href="../../../jakarta/xml/bind/Unmarshaller.html" title="interface in jakarta.xml.bind"><code>Unmarshaller</code></a>.

 <p>
 There is only one Listener per Unmarshaller. Setting a Listener replaces the previous set Listener.
 One can unregister current Listener by setting listener to <code>null</code>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>listener</code> - provides unmarshal event callbacks for this <a href="../../../jakarta/xml/bind/Unmarshaller.html" title="interface in jakarta.xml.bind"><code>Unmarshaller</code></a></dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
</dl>
</li>
</ul>
<a name="getListener--">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getListener</h4>
<pre><a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind">Unmarshaller.Listener</a>&nbsp;getListener()</pre>
<div class="block"><p>Return <a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind"><code>Unmarshaller.Listener</code></a> registered with this <a href="../../../jakarta/xml/bind/Unmarshaller.html" title="interface in jakarta.xml.bind"><code>Unmarshaller</code></a>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>registered <a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind"><code>Unmarshaller.Listener</code></a> or <code>null</code>
         if no Listener is registered with this Unmarshaller.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, JAXB 2.0</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../jakarta/xml/bind/UnmarshalException.html" title="class in jakarta.xml.bind"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../jakarta/xml/bind/Unmarshaller.Listener.html" title="class in jakarta.xml.bind"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?jakarta/xml/bind/Unmarshaller.html" target="_top">Frames</a></li>
<li><a href="Unmarshaller.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
