Utilisation des programmes de résolution dans un contexte J2EE
Quand vous chargez des artefacts dans un environnement Java™ 2 Platform Enterprise Edition (J2EE), prenez en compte les aspects propres au chargement de ressources depuis des artefacts de déploiement locaux.
Pourquoi et quand exécuter cette tâche
Le chargement de ressources locales, à l'aide des méthodes Class.getResource et Class.getResourceAsStream, à partir d'artefacts de déploiement locaux J2EE tels que des fichiers EAR, WAR ou JAR, peut créer des incidents lors du chargement des artefacts XML associés. Vous pourrez charger sans incident une première ressource locale avec ces mécanismes, mais le chargement des artefacts associés à cette ressource initiale échouera le plus souvent si vous ne prenez pas certaines mesures.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:variable name="names" select="doc('names.xml')"/>
<xsl:template name="loadnames">
<xsl:copy-of select="$names"/>
</xsl:template>
</xsl:stylesheet>
// create the factory
XFactory factory = XFactory.newInstance();
// load the XSLT file from a local resource within a J2EE deployment artifact
StreamSource source = new StreamSource(XSLTDocFunction.class.getResourceAsStream("/samplexslts/doc.xsl"));
// Create an XSL transform executable
XSLTExecutable xslTransform = factory.prepareXSLT(source);
// Create the result
Result result = new StreamResult(new ByteArrayOutputStream());
// Create a dynamic context specifying the XSLT initial template
XDynamicContext dc = factory.newDynamicContext();
dc.setXSLTInitialTemplate(new QName("loadnames"));
// Execute the transformation
xslTransform.execute(dc, result);
Le message d'erreur suivant apparaît :IXJXE0364W: FATAL ERROR: IXJXE0774E: [ERR 0693][ERR FODC0005]
The URI string 'names.xml' does not map to an available document.
La cause de cette erreur est qu'au moment du chargement de l'artefact XML initial (doc.xsl), aucun contexte statique n'a été établi pour l'URI de base. Dans ce cas, le processeur examine le répertoire de travail en cours, ce qui n'a pas de sens dans un environnement J2EE.
Si vous souhaitez contrôler totalement le chargement des artefacts XML, qu'ils résident dans une ou plusieurs unités de déploiement, utilisez plutôt des programmes de résolution.
Procédure
Ces recommandations s'appliquent au chargement de tous les artefacts XML dans l'environnement J2EE pris en charge par les programmes de résolution pour les documents XML (fn:doc(), document()), les feuilles de style (xsl:include, xsl:import), les documents texte non analysés et les schémas XML (XSLT import-schema).