⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 saxoncontext.java

📁 bpel执行引擎用来执行bpel业务流程
💻 JAVA
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements.  See the NOTICE file * distributed with this work for additional information * regarding copyright ownership.  The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License.  You may obtain a copy of the License at * *    http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied.  See the License for the * specific language governing permissions and limitations * under the License. */package org.apache.ode.bpel.elang.xpath20.compiler;import net.sf.saxon.xpath.StandaloneContext;import net.sf.saxon.xpath.XPathFunctionLibrary;import net.sf.saxon.trans.Variable;import net.sf.saxon.trans.XPathException;import net.sf.saxon.trans.StaticError;import net.sf.saxon.om.QNameException;import net.sf.saxon.om.NameChecker;import net.sf.saxon.Configuration;import net.sf.saxon.functions.FunctionLibraryList;import net.sf.saxon.functions.FunctionLibrary;import net.sf.saxon.expr.VariableReference;import javax.xml.namespace.QName;import org.apache.ode.utils.Namespaces;import java.util.List;/** * Hooks on Saxon StandaloneContext to be notified when the compilation * finds some variables and functions. This allows us to prepare the * OXpathExpression with variable references and all the things needed * at runtime. * @author mriou <mriou at apache dot org> */public class SaxonContext extends StandaloneContext {    private JaxpVariableResolver _varResolver;    private JaxpFunctionResolver _funcResolver;    public SaxonContext(Configuration config, JaxpVariableResolver varResolver,                        JaxpFunctionResolver funcResolver) {        super(config);        // We need to remove the default XPathFunctionLibrary to replace it        // with our own        List libList = ((FunctionLibraryList)getFunctionLibrary()).libraryList;        XPathFunctionLibrary xpathLib = null;        for (Object lib : libList) {            FunctionLibrary flib = (FunctionLibrary) lib;            if (flib instanceof XPathFunctionLibrary) xpathLib = (XPathFunctionLibrary) flib;        }        if (xpathLib != null) libList.remove(xpathLib);        OdeXPathFunctionLibrary oxpfl = new OdeXPathFunctionLibrary(funcResolver);        oxpfl.setXPathFunctionResolver(funcResolver);        oxpfl.setXPathFunctionResolver(_funcResolver);        ((FunctionLibraryList)getFunctionLibrary()).addFunctionLibrary(oxpfl);        _varResolver = varResolver;        _funcResolver = funcResolver;    }    public Variable declareVariable(String qname, Object initialValue) throws XPathException {        String prefix;        String localName;        final NameChecker checker = getConfiguration().getNameChecker();        try {            String[] parts = checker.getQNameParts(qname);            prefix = parts[0];            localName = parts[1];        } catch (QNameException err) {            throw new StaticError("Invalid QName for variable: " + qname);        }        String uri = "";        if (!("".equals(prefix))) {            uri = getURIForPrefix(prefix);        }        _varResolver.resolveVariable(new QName(uri, localName, prefix));        return super.declareVariable(qname, initialValue);    }    public VariableReference bindVariable(int fingerprint) throws StaticError {        String localName = getNamePool().getLocalName(fingerprint);        String prefix = getNamePool().getPrefix(fingerprint);        String ns = getNamePool().getURI(fingerprint);        // The prefix is lost by compilation, hardcoding it from the ns.        if (Namespaces.ODE_EXTENSION_NS.equals(ns)) prefix = "ode";        if (prefix != null && prefix.length() > 0) prefix = prefix + ":";        try {            declareVariable(prefix + localName, null);        } catch (XPathException e) {            throw new StaticError(e);        }        return super.bindVariable(fingerprint);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -