Xerces2 Implementation: Class XMLSchemaLoader

Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.apache.xerces.impl.xs
Class XMLSchemaLoader

    java.lang.Object
      |
      +--org.apache.xerces.impl.xs.XMLSchemaLoader

All Implemented Interfaces:
  org.w3c.dom.DOMConfiguration, org.apache.xerces.xni.parser.XMLComponent, org.apache.xerces.xni.grammars.XMLGrammarLoader, org.apache.xerces.xs.XSLoader

public class XMLSchemaLoader
extends java.lang.Object
implements org.apache.xerces.xni.grammars.XMLGrammarLoader, org.apache.xerces.xni.parser.XMLComponent, org.apache.xerces.xs.XSLoader, org.w3c.dom.DOMConfiguration

This class implements xni.grammars.XMLGrammarLoader. It also serves as implementation of xs.XSLoader interface and DOMConfiguration interface. This class is designed to interact either with a proxy for a user application which wants to preparse schemas, or with our own Schema validator. It is hoped that none of these "external" classes will therefore need to communicate directly with XSDHandler in future.

This class only knows how to make XSDHandler do its thing. The caller must ensure that all its properties (schemaLocation, JAXPSchemaSource etc.) have been properly set.

# INTERNAL:

  Usage of this class is not supported. It may be altered or removed at any time.

Version:
  $Id: XMLSchemaLoader.java 521495 2007-03-22 22:12:05Z mrglavas $
Author:
  Neil Graham, IBM

Field Summary
`protected static java.lang.String` | `ALLOW_JAVA_ENCODINGS` Feature identifier: allow java encodings to be recognized when parsing schema docs.
`protected static java.lang.String` | `AUGMENT_PSVI`
`protected static java.lang.String` | `CONTINUE_AFTER_FATAL_ERROR` Feature identifier: continue after fatal error.
`protected static java.lang.String` | `DISALLOW_DOCTYPE` Feature: disallow doctype
`protected static java.lang.String` | `ENTITY_MANAGER`
`static java.lang.String` | `ENTITY_RESOLVER` Property identifier: entity resolver.
`protected static java.lang.String` | `ERROR_HANDLER` Property identifier: error handler.
`static java.lang.String` | `ERROR_REPORTER` Property identifier: error reporter.
`protected static java.lang.String` | `GENERATE_SYNTHETIC_ANNOTATIONS` Feature: generate synthetic annotations
`protected static java.lang.String` | `HONOUR_ALL_SCHEMALOCATIONS` Feature identifier: honour all schemaLocations
`protected static java.lang.String` | `JAXP_SCHEMA_SOURCE` Property identifier: JAXP schema source.
`protected static java.lang.String` | `PARSER_SETTINGS`
`protected static java.lang.String` | `SCHEMA_FULL_CHECKING` Feature identifier: schema full checking
`protected static java.lang.String` | `SCHEMA_LOCATION` Property identifier: schema location.
`protected static java.lang.String` | `SCHEMA_NONS_LOCATION` Property identifier: no namespace schema location.
`protected static java.lang.String` | `SECURITY_MANAGER`
`protected static java.lang.String` | `STANDARD_URI_CONFORMANT_FEATURE` Feature identifier: standard uri conformant feature.
`static java.lang.String` | `SYMBOL_TABLE` Property identifier: symbol table.
`protected static java.lang.String` | `VALIDATE_ANNOTATIONS` Feature identifier: validate annotations.
`static java.lang.String` | `XMLGRAMMAR_POOL` Property identifier: grammar pool.

Constructor Summary
`XMLSchemaLoader()`
`XMLSchemaLoader(SymbolTable symbolTable)`

Method Summary
`boolean` | `canSetParameter(java.lang.String name, java.lang.Object value)` Check if setting a parameter to a specific value is supported.
`org.w3c.dom.DOMConfiguration` | `getConfig()` The configuration of a document.
`org.apache.xerces.xni.parser.XMLEntityResolver` | `getEntityResolver()` Returns the registered entity resolver.
`org.apache.xerces.xni.parser.XMLErrorHandler` | `getErrorHandler()` Returns the registered error handler.
`boolean` | `getFeature(java.lang.String featureId)` Returns the state of a feature.
`java.lang.Boolean` | `getFeatureDefault(java.lang.String featureId)` Returns the default state for a feature, or null if this component does not want to report a default value for this feature.
`java.util.Locale` | `getLocale()` Return the Locale the XMLGrammarLoader is using.
`java.lang.Object` | `getParameter(java.lang.String name)` Return the value of a parameter if known.
`org.w3c.dom.DOMStringList` | `getParameterNames()` The list of the parameters supported by this `DOMConfiguration` object and for which at least one value can be set by the application.
`java.lang.Object` | `getProperty(java.lang.String propertyId)` Returns the state of a property.
`java.lang.Object` | `getPropertyDefault(java.lang.String propertyId)` Returns the default state for a property, or null if this component does not want to report a default value for this property.
`java.lang.String[]` | `getRecognizedFeatures()` Returns a list of feature identifiers that are recognized by this XMLGrammarLoader.
`java.lang.String[]` | `getRecognizedProperties()` Returns a list of property identifiers that are recognized by this XMLGrammarLoader.
`org.apache.xerces.xs.XSModel` | `load(org.w3c.dom.ls.LSInput is)` Parse an XML Schema document from a resource identified by a `LSInput` .
`org.apache.xerces.xni.grammars.Grammar` | `loadGrammar(org.apache.xerces.xni.parser.XMLInputSource source)` Returns a Grammar object by parsing the contents of the entity pointed to by source.
`void` | `loadGrammar(org.apache.xerces.xni.parser.XMLInputSource[] source)` Returns a Grammar object by parsing the contents of the entities pointed to by sources.
`org.apache.xerces.xs.XSModel` | `loadInputList(org.apache.xerces.xs.LSInputList is)` Parses the content of XML Schema documents specified as a list of `LSInput`s.
`org.apache.xerces.xs.XSModel` | `loadURI(java.lang.String uri)` Parse an XML Schema document from a location identified by a URI reference.
`org.apache.xerces.xs.XSModel` | `loadURIList(org.apache.xerces.xs.StringList uriList)` Parses the content of XML Schema documents specified as the list of URI references.
`static void` | `processExternalHints(java.lang.String sl, java.lang.String nsl, java.util.Hashtable locations, XMLErrorReporter er)`
`void` | `reset(org.apache.xerces.xni.parser.XMLComponentManager componentManager)` Resets the component.
`static org.apache.xerces.xni.parser.XMLInputSource` | `resolveDocument(XSDDescription desc, java.util.Hashtable locationPairs, org.apache.xerces.xni.parser.XMLEntityResolver entityResolver)` This method tries to resolve location of the given schema.
`void` | `setEntityResolver(org.apache.xerces.xni.parser.XMLEntityResolver entityResolver)` Sets the entity resolver.
`void` | `setErrorHandler(org.apache.xerces.xni.parser.XMLErrorHandler errorHandler)` Sets the error handler.
`void` | `setFeature(java.lang.String featureId, boolean state)` Sets the state of a feature.
`void` | `setLocale(java.util.Locale locale)` Set the locale to use for messages.
`void` | `setParameter(java.lang.String name, java.lang.Object value)` Set the value of a parameter.
`void` | `setProperty(java.lang.String propertyId, java.lang.Object state)` Sets the state of a property.
`static boolean` | `tokenizeSchemaLocationStr(java.lang.String schemaStr, java.util.Hashtable locations)`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### SCHEMA_FULL_CHECKING

    protected static final java.lang.String SCHEMA_FULL_CHECKING

  Feature identifier: schema full checking

### CONTINUE_AFTER_FATAL_ERROR

    protected static final java.lang.String CONTINUE_AFTER_FATAL_ERROR

  Feature identifier: continue after fatal error.

### ALLOW_JAVA_ENCODINGS

    protected static final java.lang.String ALLOW_JAVA_ENCODINGS

  Feature identifier: allow java encodings to be recognized when parsing schema docs.

### STANDARD_URI_CONFORMANT_FEATURE

    protected static final java.lang.String STANDARD_URI_CONFORMANT_FEATURE

  Feature identifier: standard uri conformant feature.

### VALIDATE_ANNOTATIONS

    protected static final java.lang.String VALIDATE_ANNOTATIONS

  Feature identifier: validate annotations.

### DISALLOW_DOCTYPE

    protected static final java.lang.String DISALLOW_DOCTYPE

  Feature: disallow doctype

### GENERATE_SYNTHETIC_ANNOTATIONS

    protected static final java.lang.String GENERATE_SYNTHETIC_ANNOTATIONS

  Feature: generate synthetic annotations

### HONOUR_ALL_SCHEMALOCATIONS

    protected static final java.lang.String HONOUR_ALL_SCHEMALOCATIONS

  Feature identifier: honour all schemaLocations

### AUGMENT_PSVI

    protected static final java.lang.String AUGMENT_PSVI

### PARSER_SETTINGS

    protected static final java.lang.String PARSER_SETTINGS

### SYMBOL_TABLE

    public static final java.lang.String SYMBOL_TABLE

  Property identifier: symbol table.

### ERROR_REPORTER

    public static final java.lang.String ERROR_REPORTER

  Property identifier: error reporter.

### ERROR_HANDLER

    protected static final java.lang.String ERROR_HANDLER

  Property identifier: error handler.

### ENTITY_RESOLVER

    public static final java.lang.String ENTITY_RESOLVER

  Property identifier: entity resolver.

### XMLGRAMMAR_POOL

    public static final java.lang.String XMLGRAMMAR_POOL

  Property identifier: grammar pool.

### SCHEMA_LOCATION

    protected static final java.lang.String SCHEMA_LOCATION

  Property identifier: schema location.

### SCHEMA_NONS_LOCATION

    protected static final java.lang.String SCHEMA_NONS_LOCATION

  Property identifier: no namespace schema location.

### JAXP_SCHEMA_SOURCE

    protected static final java.lang.String JAXP_SCHEMA_SOURCE

  Property identifier: JAXP schema source.

### SECURITY_MANAGER

    protected static final java.lang.String SECURITY_MANAGER

### ENTITY_MANAGER

    protected static final java.lang.String ENTITY_MANAGER

Constructor Detail

### XMLSchemaLoader

    public XMLSchemaLoader()

### XMLSchemaLoader

    public XMLSchemaLoader(SymbolTable symbolTable)

Method Detail

### getRecognizedFeatures

    public java.lang.String[] getRecognizedFeatures()

  Returns a list of feature identifiers that are recognized by this XMLGrammarLoader. This method may return null if no features are recognized.
  Specified by:
    `getRecognizedFeatures` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`

### getFeature

    public boolean getFeature(java.lang.String featureId)
                       throws org.apache.xerces.xni.parser.XMLConfigurationException

  Returns the state of a feature.
  Specified by:
    `getFeature` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`
  Parameters:
    `featureId` - The feature identifier.
  Throws:
    `org.apache.xerces.xni.parser.XMLConfigurationException` - Thrown on configuration error.

### setFeature

    public void setFeature(java.lang.String featureId,
                           boolean state)
                    throws org.apache.xerces.xni.parser.XMLConfigurationException

  Sets the state of a feature.
  Specified by:
    `setFeature` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`
  Parameters:
    `featureId` - The feature identifier.
    `state` - The state of the feature.
  Throws:
    `org.apache.xerces.xni.parser.XMLConfigurationException` - Thrown when a feature is not recognized or cannot be set.

### getRecognizedProperties

    public java.lang.String[] getRecognizedProperties()

  Returns a list of property identifiers that are recognized by this XMLGrammarLoader. This method may return null if no properties are recognized.
  Specified by:
    `getRecognizedProperties` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`

### getProperty

    public java.lang.Object getProperty(java.lang.String propertyId)
                                 throws org.apache.xerces.xni.parser.XMLConfigurationException

  Returns the state of a property.
  Specified by:
    `getProperty` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`
  Parameters:
    `propertyId` - The property identifier.
  Throws:
    `org.apache.xerces.xni.parser.XMLConfigurationException` - Thrown on configuration error.

### setProperty

    public void setProperty(java.lang.String propertyId,
                            java.lang.Object state)
                     throws org.apache.xerces.xni.parser.XMLConfigurationException

  Sets the state of a property.
  Specified by:
    `setProperty` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`
  Parameters:
    `propertyId` - The property identifier.
    `state` - The state of the property.
  Throws:
    `org.apache.xerces.xni.parser.XMLConfigurationException` - Thrown when a property is not recognized or cannot be set.

### setLocale

    public void setLocale(java.util.Locale locale)

  Set the locale to use for messages.
  Specified by:
    `setLocale` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`
  Parameters:
    `locale` - The locale object to use for localization of messages.
  Throws:
    `org.apache.xerces.xni.XNIException` - Thrown if the parser does not support the specified locale.

### getLocale

    public java.util.Locale getLocale()

  Return the Locale the XMLGrammarLoader is using.
  Specified by:
    `getLocale` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`

### setErrorHandler

    public void setErrorHandler(org.apache.xerces.xni.parser.XMLErrorHandler errorHandler)

  Sets the error handler.
  Specified by:
    `setErrorHandler` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`
  Parameters:
    `errorHandler` - The error handler.

### getErrorHandler

    public org.apache.xerces.xni.parser.XMLErrorHandler getErrorHandler()

  Returns the registered error handler.
  Specified by:
    `getErrorHandler` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`

### setEntityResolver

    public void setEntityResolver(org.apache.xerces.xni.parser.XMLEntityResolver entityResolver)

  Sets the entity resolver.
  Specified by:
    `setEntityResolver` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`
  Parameters:
    `entityResolver` - The new entity resolver.

### getEntityResolver

    public org.apache.xerces.xni.parser.XMLEntityResolver getEntityResolver()

  Returns the registered entity resolver.
  Specified by:
    `getEntityResolver` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`

### loadGrammar

    public void loadGrammar(org.apache.xerces.xni.parser.XMLInputSource[] source)
                     throws java.io.IOException,
                            org.apache.xerces.xni.XNIException

  Returns a Grammar object by parsing the contents of the entities pointed to by sources.
  Parameters:
    `source` - the locations of the entity which forms the staring point of the grammars to be constructed
  Throws:
    `java.io.IOException` - when a problem is encounted reading the entity
    `org.apache.xerces.xni.XNIException` - when a condition arises (such as a FatalError) that requires parsing of the entity be terminated

### loadGrammar

    public org.apache.xerces.xni.grammars.Grammar loadGrammar(org.apache.xerces.xni.parser.XMLInputSource source)
                                                       throws java.io.IOException,
                                                              org.apache.xerces.xni.XNIException

  Returns a Grammar object by parsing the contents of the entity pointed to by source.
  Specified by:
    `loadGrammar` in interface `org.apache.xerces.xni.grammars.XMLGrammarLoader`
  Parameters:
    `source` - the location of the entity which forms the starting point of the grammar to be constructed.
  Throws:
    `java.io.IOException` - When a problem is encountered reading the entity XNIException When a condition arises (such as a FatalError) that requires parsing of the entity be terminated.

### resolveDocument

    public static org.apache.xerces.xni.parser.XMLInputSource resolveDocument(XSDDescription desc,
                                                                              java.util.Hashtable locationPairs,
                                                                              org.apache.xerces.xni.parser.XMLEntityResolver entityResolver)
                                                                       throws java.io.IOException

  This method tries to resolve location of the given schema. The loader stores the namespace/location pairs in a hashtable (use "" as the namespace of absent namespace). When resolving an entity, loader first tries to find in the hashtable whether there is a value for that namespace, if so, pass that location value to the user-defined entity resolver.
  Parameters:
    `desc` -
    `locationPairs` -
    `entityResolver` -
  Returns:
    the XMLInputSource
  Throws:
    `java.io.IOException` -

### processExternalHints

    public static void processExternalHints(java.lang.String sl,
                                            java.lang.String nsl,
                                            java.util.Hashtable locations,
                                            XMLErrorReporter er)

### tokenizeSchemaLocationStr

    public static boolean tokenizeSchemaLocationStr(java.lang.String schemaStr,
                                                    java.util.Hashtable locations)

### getFeatureDefault

    public java.lang.Boolean getFeatureDefault(java.lang.String featureId)

  Description copied from interface: `org.apache.xerces.xni.parser.XMLComponent`
  Returns the default state for a feature, or null if this component does not want to report a default value for this feature.
  Specified by:
    `getFeatureDefault` in interface `org.apache.xerces.xni.parser.XMLComponent`
  Following copied from interface: `org.apache.xerces.xni.parser.XMLComponent`
  Parameters:
    `featureId` - The feature identifier.

### getPropertyDefault

    public java.lang.Object getPropertyDefault(java.lang.String propertyId)

  Description copied from interface: `org.apache.xerces.xni.parser.XMLComponent`
  Returns the default state for a property, or null if this component does not want to report a default value for this property.
  Specified by:
    `getPropertyDefault` in interface `org.apache.xerces.xni.parser.XMLComponent`
  Following copied from interface: `org.apache.xerces.xni.parser.XMLComponent`
  Parameters:
    `propertyId` - The property identifier.

### reset

    public void reset(org.apache.xerces.xni.parser.XMLComponentManager componentManager)
               throws org.apache.xerces.xni.parser.XMLConfigurationException

  Description copied from interface: `org.apache.xerces.xni.parser.XMLComponent`
  Resets the component. The component can query the component manager about any features and properties that affect the operation of the component.
  Specified by:
    `reset` in interface `org.apache.xerces.xni.parser.XMLComponent`
  Following copied from interface: `org.apache.xerces.xni.parser.XMLComponent`
  Parameters:
    `componentManager` - The component manager.
  Throws:
    `XNIException` - Thrown by component on initialization error.

### getConfig

    public org.w3c.dom.DOMConfiguration getConfig()

  Description copied from interface: `org.apache.xerces.xs.XSLoader`
  The configuration of a document. It maintains a table of recognized parameters. Using the configuration, it is possible to change the behavior of the load methods. The configuration may support the setting of and the retrieval of the following non-boolean parameters defined on the `DOMConfiguration` interface: `error-handler` (`DOMErrorHandler`) and `resource-resolver` (`LSResourceResolver`).
  The following list of boolean parameters is defined:
  `"validate"`
    `true`
      [required] (default) Validate an XML Schema during loading. If validation errors are found, the error handler is notified.
    `false`
      [optional] Do not report errors during the loading of an XML Schema document.
  Specified by:
    `getConfig` in interface `org.apache.xerces.xs.XSLoader`

### load

    public org.apache.xerces.xs.XSModel load(org.w3c.dom.ls.LSInput is)

  Description copied from interface: `org.apache.xerces.xs.XSLoader`
  Parse an XML Schema document from a resource identified by a `LSInput` .
  Specified by:
    `load` in interface `org.apache.xerces.xs.XSLoader`
  Following copied from interface: `org.apache.xerces.xs.XSLoader`
  Parameters:
    `is` - The `LSInput` from which the source document is to be read.
  Returns:
    An XSModel representing this schema.

### loadInputList

    public org.apache.xerces.xs.XSModel loadInputList(org.apache.xerces.xs.LSInputList is)

  Description copied from interface: `org.apache.xerces.xs.XSLoader`
  Parses the content of XML Schema documents specified as a list of `LSInput`s.
  Specified by:
    `loadInputList` in interface `org.apache.xerces.xs.XSLoader`
  Following copied from interface: `org.apache.xerces.xs.XSLoader`
  Parameters:
    `is` - The list of `LSInput`s from which the XML Schema documents are to be read.
  Returns:
    An XSModel representing the schema documents.

### loadURI

    public org.apache.xerces.xs.XSModel loadURI(java.lang.String uri)

  Description copied from interface: `org.apache.xerces.xs.XSLoader`
  Parse an XML Schema document from a location identified by a URI reference. If the URI contains a fragment identifier, the behavior is not defined by this specification.
  Specified by:
    `loadURI` in interface `org.apache.xerces.xs.XSLoader`
  Following copied from interface: `org.apache.xerces.xs.XSLoader`
  Parameters:
    `uri` - The location of the XML Schema document to be read.
  Returns:
    An XSModel representing this schema.

### loadURIList

    public org.apache.xerces.xs.XSModel loadURIList(org.apache.xerces.xs.StringList uriList)

  Description copied from interface: `org.apache.xerces.xs.XSLoader`
  Parses the content of XML Schema documents specified as the list of URI references. If the URI contains a fragment identifier, the behavior is not defined by this specification.
  Specified by:
    `loadURIList` in interface `org.apache.xerces.xs.XSLoader`
  Following copied from interface: `org.apache.xerces.xs.XSLoader`
  Parameters:
    `uriList` - The list of URI locations.
  Returns:
    An XSModel representing the schema documents.

### canSetParameter

    public boolean canSetParameter(java.lang.String name,
                                   java.lang.Object value)

  Description copied from interface: `org.w3c.dom.DOMConfiguration`
  Check if setting a parameter to a specific value is supported.
  Specified by:
    `canSetParameter` in interface `org.w3c.dom.DOMConfiguration`
  Following copied from interface: `org.w3c.dom.DOMConfiguration`
  Parameters:
    `name` - The name of the parameter to check.
    `value` - An object. if `null`, the returned value is `true`.
  Returns:
    `true` if the parameter could be successfully set to the specified value, or `false` if the parameter is not recognized or the requested value is not supported. This does not change the current value of the parameter itself.

### getParameter

    public java.lang.Object getParameter(java.lang.String name)
                                  throws org.w3c.dom.DOMException

  Description copied from interface: `org.w3c.dom.DOMConfiguration`
  Return the value of a parameter if known.
  Specified by:
    `getParameter` in interface `org.w3c.dom.DOMConfiguration`
  Following copied from interface: `org.w3c.dom.DOMConfiguration`
  Parameters:
    `name` - The name of the parameter.
  Returns:
    The current object associated with the specified parameter or `null` if no object has been associated or if the parameter is not supported.
  Throws:
    `org.w3c.dom.DOMException` - NOT_FOUND_ERR: Raised when the parameter name is not recognized.

### getParameterNames

    public org.w3c.dom.DOMStringList getParameterNames()

  Description copied from interface: `org.w3c.dom.DOMConfiguration`
  The list of the parameters supported by this `DOMConfiguration` object and for which at least one value can be set by the application. Note that this list can also contain parameter names defined outside this specification.
  Specified by:
    `getParameterNames` in interface `org.w3c.dom.DOMConfiguration`

### setParameter

    public void setParameter(java.lang.String name,
                             java.lang.Object value)
                      throws org.w3c.dom.DOMException

  Description copied from interface: `org.w3c.dom.DOMConfiguration`
  Set the value of a parameter.
  Specified by:
    `setParameter` in interface `org.w3c.dom.DOMConfiguration`
  Following copied from interface: `org.w3c.dom.DOMConfiguration`
  Parameters:
    `name` - The name of the parameter to set.
    `value` - The new value or `null` if the user wishes to unset the parameter. While the type of the value parameter is defined as `DOMUserData`, the object type must match the type defined by the definition of the parameter. For example, if the parameter is "error-handler", the value must be of type `DOMErrorHandler`.
  Throws:
    `org.w3c.dom.DOMException` - NOT_FOUND_ERR: Raised when the parameter name is not recognized.
    NOT_SUPPORTED_ERR: Raised when the parameter name is recognized but the requested value cannot be set.
    TYPE_MISMATCH_ERR: Raised if the value type for this parameter name is incompatible with the expected value type.

Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 1999-2007 The Apache Software Foundation. All Rights Reserved.