A very common problem is resolving a source, which means
finding a source using a URI.
The source resolver of Avalon Excalibur is a component
helping you in this task. It resolves sources from a given
URI. The URI can use all available protocols of the JDK.
In addition own protocols can be plugged-in.
The architecture of this package is simple but powerful.
The main component is the SourceResolver. It is used
to resolve any URI. If the SourceResolver can resolve the
protocol of the URI it returns a Source object. This Source
object is an abstraction of the underlying resource. This
resource can be accessed by a provided InputStream.
Own protocols can be configured using the SourceFactory interface.
Whenever the SourceResolver finds a protocol which it can't handle
by itself, it gets a role selector for a SourceFactory and tries
to get a component with the role name of the protocol.
If such a factory exists, the source creation is passed on to this
factory.
The Source object is handled similar to any other Avalon component.
After it has been used it must be released using SourceResolver.
In addition the implementation of the Source object can implement
any of the lifecycle interfaces of usual components and it gets
all the information from the SourceResolver.
The Source object is a lightwight object which can be extended with
several interface. For example the XMLizable interface from the XML
package to generate SAX events from the Source. Or the Monitorable
interface from the monitor package to monitor the resource.
For caching purposes the Source object offers a SourceValidity object
which can be used in addition to the system ID of the Source to verify
if the cache contains a valid version of the Source object.