Utilización de un solucionador de módulos

La interfaz XModuleResolver se puede implementar y la implementación se puede registrar con XStaticContext para sustituir el comportamiento de resolución de módulos XQuery predeterminados. Los módulos se resuelven cuando se encuentra una importación de módulo XQuery.

Acerca de esta tarea

El comportamiento predeterminado de resolución de módulo es intentar localizar un módulo para cada sugerencia de ubicación especificada en la importación de módulo. El comportamiento predeterminado de resolución para cada sugerencia de ubicación es resolver URIs relativos contra el URI base a partir del contexto estático, si el URI base está disponible, o interpretarlos como vías de acceso relativas al directorio de trabajo actual, si el URI base no está disponible. Los URI absolutos se utilizan sin modificar. Si no se puede localizar un módulo para una sugerencia de ubicación, el procesador lo ignora a menos que no se pueda cargar ningún módulo para el espacio de nombres, en cuyo caso el procesador emitirá un mensaje de error.

Procedimiento

Utilice el método setModuleResolver en la interfaz XStaticContext para registrar un programa de resolución de módulo.

El método getModule devuelve una instancia de la interfaz java.util.List. Esto se debe a que podría haber más de un documento de módulo para un determinado espacio de nombres y un conjunto de sugerencias de ubicación.

Ejemplo

A continuación encontrará un ejemplo básico de la utilización de un programa de resolución de módulo.
XFactory factory = XFactory.newInstance();

// Create the static context
XStaticContext staticContext = factory.newStaticContext();

// Create the module resolver and register it with the static context.
staticContext.setModuleResolver(new AModuleResolver(replacementBase));

// Prepare the query.
XQueryExecutable executable = factory.prepareXQuery(new StreamSource(queryFile), staticContext);

// Execute the transformation.
Source source = new StreamSource(inputFile);
Result result = new StreamResult(System.out);
executable.execute(source, result);
A continuación encontrará un ejemplo básico de una implementación de programa de resolución de módulo.
class AModuleResolver implements XModuleResolver
{
    String _replacementBase;

    public AModuleResolver(String replacementBase)
    {
        _replacementBase=replacementBase;
    }

    // Resolve URI, returning the Source that URI represents.
    // Implements the "rebase:" pseudo-scheme.
    public List<? extends Source> getModule(String namespace, List<String> locations, String baseURI) {
        String rebasePrefix="rebase:";

        List<StreamSource> list = new ArrayList<StreamSource>();
        for (int i = 0; i < locations.size(); i++) {
            String href = locations.get(i);
            String base = baseURI;
            if(href.startsWith(rebasePrefix)) {
                href=href.substring(rebasePrefix.length());
                base=_replacementBase;
            }

            java.net.URI uri;
            StreamSource source=null;
            try {
                // Get base URI object
                uri = new java.net.URI(base);
                // Resolved relative reference against base URI
                URI resolvedURI = uri.resolve(href);
                // Try to read...
                source = new StreamSource(resolvedURI.toString());
            } catch (java.net.URISyntaxException use) {
                throw new RuntimeException(use);
            }

            list.add(source);
        }
        return list;
    }
}

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_resolvers_module
File name: txml_resolvers_module.html