Using XML Schemas

iPOJO provides XML schemas to check iPOJO descriptors (i.e. metadata.xml). Several schemas are provided in order to describe the core syntax, compositions and external handlers.

Schema URL
iPOJO Core
iPOJO Composite
Temporal Dependency Handler
Whiteboard pattern handler
Extender pattern handler
Event Admin handlers
JMX handler

Note: the schemas are also provided inside the iPOJO bundles.

Note: to use the 'dev' schemas, replace CURRENT by SNAPSHOT in the URL. To use those schemas you have to declares those schemas in your metadata.xml file such as in the next snippet using the iPOJO core XML-schema:

    <component classname="..." ....>

First, declare the 'XMLSChema-instance' namespace. Then, declares used namespaces and schemas in the 'xsi:schemaLocation' attribute. This attribute contains pairs 'namespace url' separated by spaces. Finally, declares the default namespace to "org.apache.felix.ipojo". You can also use several schemas in the same descriptor by using a header like:

<ipojo xmlns:xsi=""
        <extender:extender extension="Test-Suite"
            onArrival="onBundleArrival" onDeparture="onBundleDeparture" />
        <callback transition="invalidate" method="stopping" />
        <callback transition="validate" method="starting" />
        <provides />
        component="org.apache.felix.ipojo.junit4osgi.impl.JunitExtender" />

The only difference is contained in the 'schemaLocation' attribute, which contains several pairs. You also need to declare the namespace of the used external handler.

If you declare schemas, the iPOJO manipulator automatically checks the validity of the descriptor against the declared schemas. Moreover, if you use 'advanced' XML Editor supporting schemas, editing iPOJO descriptors should be eased with auto-completion features.

Avoid downloading XML Schemas during the build process

The manipulator embeds the iPOJO XML Schemas to avoid using a network connection to download them during the validation process. Keep the same url, the manipulator will just resolve the URL differently to use embedded schemas. You can also skipped this shortcut thanks the the ignoreEmbeddedSchemas parameter (refer to the Ant Task) and to the Maven Plugin for further information about configuration).