org.apache.felix.metatype

## Class MetaDataReader

- java.lang.Object
- - org.apache.felix.metatype.MetaDataReader

    public class MetaDataReader
    extends Object

The `MetaDataReader` provides two methods to read meta type documents according to the MetaType schema (105.8 XML Schema). The `parse(URL)` and `parse(InputStream)` methods may be called multiple times to parse such documents.

While reading the XML document java objects are created to hold the data. These objects are created by factory methods. Users of this may extend this class by overwriting the the factory methods to create specialized versions. One notable use of this is the extension of the `AD` class to overwrite the `AD.validate(String)` method. In this case, the `createAD()` method would be overwritten to return an instance of the extending class.

This class is not thread safe. Using instances of this class in multiple threads concurrently is not supported and will fail.

Author:
  Felix Project Team

### Constructor Summary

Constructors
Constructor and Description
`MetaDataReader()`

### Method Summary

All Methods Instance Methods Concrete Methods
`protected AD` `createAD()` Creates a new `AD` object to hold the contents of the `AD` element.
`protected Attribute` `createAttribute()` Creates a new `Attribute` object to hold the contents of the `Attribute` element.
`protected Designate` `createDesignate()` Creates a new `Designate` object to hold the contents of the `Designate` element.
`protected DesignateObject` `createDesignateObject()` Creates a new `DesignateObject` object to hold the contents of the `Object` element.
`protected MetaData` `createMetaData()` Creates a new `MetaData` object to hold the contents of the `MetaData` element.
`protected OCD` `createOCD()` Creates a new `OCD` object to hold the contents of the `OCD` element.
`MetaData` `parse(InputStream ins)` Parses the XML document in the given input stream.
`MetaData` `parse(URL url)` Parses the XML document provided by the `url`.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### MetaDataReader

    public MetaDataReader()

### Method Detail

#### parse

    public MetaData parse(URL url)
                   throws IOException

Parses the XML document provided by the `url`. The XML document must be at the beginning of the stream contents.

This method is almost identical to `return parse(url.openStream());` but also sets the string representation of the URL as a location helper for error messages.

Parameters:
  `url` - The `URL` providing access to the XML document.
Returns:
  A `MetaData` providing access to the raw contents of the XML document.
Throws:
  `IOException` - If an I/O error occurs accessing the stream or parsing the XML document.

#### parse

    public MetaData parse(InputStream ins)
                   throws IOException

Parses the XML document in the given input stream.

This method starts reading at the current position of the input stream and returns immediately after completely reading a single meta type document. The stream is not closed by this method.

Parameters:
  `ins` - The `InputStream` providing the XML document
Returns:
  A `MetaData` providing access to the raw contents of the XML document.
Throws:
  `IOException` - If an I/O error occurs accessing the stream or parsing the XML document.

#### createMetaData

    protected MetaData createMetaData()

Creates a new `MetaData` object to hold the contents of the `MetaData` element.

This method may be overwritten to return a customized extension.

#### createOCD

    protected OCD createOCD()

Creates a new `OCD` object to hold the contents of the `OCD` element.

This method may be overwritten to return a customized extension.

#### createAD

    protected AD createAD()

Creates a new `AD` object to hold the contents of the `AD` element.

This method may be overwritten to return a customized extension.

#### createDesignateObject

    protected DesignateObject createDesignateObject()

Creates a new `DesignateObject` object to hold the contents of the `Object` element.

This method may be overwritten to return a customized extension.

#### createAttribute

    protected Attribute createAttribute()

Creates a new `Attribute` object to hold the contents of the `Attribute` element.

This method may be overwritten to return a customized extension.

#### createDesignate

    protected Designate createDesignate()

Creates a new `Designate` object to hold the contents of the `Designate` element.

This method may be overwritten to return a customized extension.