Utilización de solucionadores en un contexto J2EE
Cuando se cargan artefactos en un contexto Java™ 2 Platform, Enterprise Edition (J2EE), debería tener en cuenta las implicaciones especiales que se aplican cuando se cargan recursos de artefactos de despliegue local.
Acerca de esta tarea
La carga de recursos locales, a través de Class.getResource y Class.getResourceAsStream procedentes de artefactos de despliegue J2EE como, por ejemplo, los EAR, WAR y los archivos JAR de biblioteca, puede conllevar problemas a la hora de cargar los artefactos XML relacionados. La carga de un recurso local inicial utilizando estos mecanismos resultará satisfactoria pero los artefactos cargados a partir del recurso inicial normalmente fallarán al cargarse sin ninguna consideración específica.
<?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);
recibirá el error siguiente:IXJXE0364W: FATAL ERROR: IXJXE0774E: [ERR 0693][ERR FODC0005]
La serie 'names.xml' del URI no se correlaciona con ningún documento disponible.
El motivo de este error es que al cargar el artefacto XML inicial (doc.xsl), no se ha establecido un contenido estático para el URI base. En este caso, el procesador se replegará para buscar en el directorio de trabajo actual, lo que no tiene ningún sentido en un entorno J2EE.
Para control completamente la carga de artefactos XML para que den soporte a casos en que los artefactos se hayan dispersado en diversas unidades de despliegue, utilice los solucionadores para controlar completamente el comportamiento de carga.
Procedimiento
Estas recomendaciones de carga de artefactos XML se aplican en un contexto J2EE para todos los artefactos que reciben soporte de los solucionadores como, por ejemplo, los documentos XML (fn:doc(), document()), las hojas de estilo (xsl:include, xsl:import), el texto sin analizar y los esquemas XML (esquema de importación XSLT).