Class UnmarshallingContext

    • Field Detail

      • classResolver

        @Nullable
        public ClassResolver classResolver
        Used to discover additional classes when we hit unknown elements/types.
      • classLoader

        @Nullable
        public ClassLoader classLoader
        User-supplied ClassLoader for converting name to Class. For backward compatibility, when null, use thread context classloader.
    • Constructor Detail

      • UnmarshallingContext

        public UnmarshallingContext​(UnmarshallerImpl _parent,
                                    AssociationMap assoc)
        Creates a new unmarshaller.
        Parameters:
        assoc - Must be both non-null when the unmarshaller does the in-place unmarshalling. Otherwise must be both null.
    • Method Detail

      • clearStates

        public void clearStates()
      • setFactories

        public void setFactories​(Object factoryInstances)
      • startDocument

        public void startDocument​(LocatorEx locator,
                                  NamespaceContext nsContext)
                           throws SAXException
        Description copied from interface: XmlVisitor
        Notifies a start of the document.
        Specified by:
        startDocument in interface XmlVisitor
        Parameters:
        locator - This live object returns the location information as the parsing progresses. must not be null.
        nsContext - Some broken XML APIs can't iterate all the in-scope namespace bindings, which makes it impossible to emulate XmlVisitor.startPrefixMapping(String, String) correctly when unmarshalling a subtree. Connectors that use such an API can pass in additional NamespaceContext object that knows about the in-scope namespace bindings. Otherwise (and normally) it is null.

        Ideally this object should be immutable and only represent the namespace URI bindings in the context (those done above the element that JAXB started unmarshalling), but it can also work even if it changes as the parsing progress (to include namespaces declared on the current element being parsed.)

        Throws:
        SAXException
      • text

        public void text​(CharSequence pcdata)
                  throws SAXException
        Description copied from interface: XmlVisitor
        Text events.

        The caller should consult XmlVisitor.TextPredictor to see if the unmarshaller is expecting any PCDATA. If the above is returning false, the caller is OK to skip any text in XML. The net effect is that we can ignore whitespaces quickly.

        Specified by:
        text in interface XmlVisitor
        Parameters:
        pcdata - represents character data. This object can be mutable (such as StringBuilder); it only needs to be fixed while this method is executing.
        Throws:
        SAXException
      • createInstance

        public Object createInstance​(Class<?> clazz)
                              throws SAXException
        Creates a new instance of the specified class. In the unmarshaller, we need to check the user-specified factory class.
        Throws:
        SAXException
      • createInstance

        public Object createInstance​(JaxBeanInfo beanInfo)
                              throws SAXException
        Creates a new instance of the specified class. In the unmarshaller, we need to check the user-specified factory class.
        Throws:
        SAXException
      • handleEvent

        public void handleEvent​(ValidationEvent event,
                                boolean canRecover)
                         throws SAXException
        Reports an error to the user, and asks if s/he wants to recover. If the canRecover flag is false, regardless of the client instruction, an exception will be thrown. Only if the flag is true and the user wants to recover from an error, the method returns normally. The thrown exception will be catched by the unmarshaller.
        Throws:
        SAXException
      • handleError

        public void handleError​(String msg)
      • getLocator

        public LocatorEx getLocator()
        Gets the current source location information in SAX Locator.

        Sometimes the unmarshaller works against a different kind of XML source, making this information meaningless.

      • addPatcher

        public void addPatcher​(Patcher job)
        Adds a job that will be executed at the last of the unmarshalling. This method is used to support ID/IDREF feature, but it can be used for other purposes as well.
        Parameters:
        job - The run method of this object is called.
      • addToIdTable

        public String addToIdTable​(String id)
                            throws SAXException
        Adds the object which is currently being unmarshalled to the ID table.
        Returns:
        Returns the value passed as the parameter. This is a hack, but this makes it easier for ID transducer to do its job.
        Throws:
        SAXException
      • getNewlyDeclaredPrefixes

        public String[] getNewlyDeclaredPrefixes()
        Returns a list of prefixes newly declared on the current element.
        Returns:
        A possible zero-length array of prefixes. The default prefix is represented by the empty string.
      • getAllDeclaredPrefixes

        public String[] getAllDeclaredPrefixes()
        Returns a list of all in-scope prefixes.
        Returns:
        A possible zero-length array of prefixes. The default prefix is represented by the empty string.
      • startScope

        public void startScope​(int frameSize)
        Starts a new packing scope.

        This method allocates a specified number of fresh Scope objects. They can be accessed by the getScope(int) method until the corresponding endScope(int) method is invoked.

        A new scope will mask the currently active scope. Only one frame of Scopes can be accessed at any given time.

        Parameters:
        frameSize - The # of slots to be allocated.
      • endScope

        public void endScope​(int frameSize)
                      throws SAXException
        Ends the current packing scope.

        If any packing in progress will be finalized by this method.

        Parameters:
        frameSize - The same size that gets passed to the startScope(int) method.
        Throws:
        SAXException
      • getScope

        public Scope getScope​(int offset)
        Gets the currently active Scope.
        Parameters:
        offset - a number between [0,frameSize)
        Returns:
        always a valid Scope object.
      • recordInnerPeer

        public void recordInnerPeer​(Object innerPeer)
        Notifies the context about the inner peer of the current element.

        If the unmarshalling is building the association, the context will use this information. Otherwise it will be just ignored.

      • getInnerPeer

        public Object getInnerPeer()
        Gets the inner peer JAXB object associated with the current element.
        Returns:
        null if the current element doesn't have an inner peer, or if we are not doing the in-place unmarshalling.
      • recordOuterPeer

        public void recordOuterPeer​(Object outerPeer)
        Notifies the context about the outer peer of the current element.

        If the unmarshalling is building the association, the context will use this information. Otherwise it will be just ignored.

      • getOuterPeer

        public Object getOuterPeer()
        Gets the outer peer JAXB object associated with the current element.
        Returns:
        null if the current element doesn't have an inner peer, or if we are not doing the in-place unmarshalling.
      • getCurrentExpectedElements

        public Collection<QName> getCurrentExpectedElements()
        Allows to access elements which are expected in current state. Useful for getting elements for current parent.
        Returns:
      • getCurrentExpectedAttributes

        public Collection<QName> getCurrentExpectedAttributes()
        Allows to access attributes which are expected in current state. Useful for getting attributes for current parent.
        Returns:
      • getStructureLoader

        public StructureLoader getStructureLoader()
        Gets StructureLoader if used as loader. Useful when determining if element is mixed or not.
      • shouldErrorBeReported

        public boolean shouldErrorBeReported()
                                      throws SAXException
        Based on current Logger Level and errorCounter value determines if error should be reported. If the method called and return true it is expected that error will be reported. And that's why errorCounter is automatically decremented during the check. NOT THREAD SAFE!!! In case of heave concurrency access several additional errors could be reported. It's not expected to be the problem. Otherwise add synchronization here.
        Returns:
        true in case if Level.FINEST is set OR we haven't exceed errors reporting limit.
        Throws:
        SAXException