public String extractXPathExpression(String xqFile, String inputFile, boolean unescape) {
    // get the xpath2 expr from xq file, first
    char[] cbuf = new char[2048]; //
    String content = null;
    String xpath2Expr = null;

    try {
      URL entryUrl = bundle.getEntry(xqFile);
      InputStream isxq = testResolve(entryUrl);
      if (useNewApi) {
        if (staticContextBuilder.getBaseUri() == null)
          try {
            staticContextBuilder.withBaseUri(entryUrl.toString());
          } catch (URISyntaxException e) {
            throw new RuntimeException(e); // drats
          }
      } else {
        if (dynamicContext.base_uri().getStringValue() == null)
          dynamicContext.set_base_uri(entryUrl.toString());
      }
      BufferedReader xqreader =
          new BufferedReader(new InputStreamReader(isxq, Charset.forName("UTF-8")));
      int nByte = xqreader.read(cbuf);
      assertTrue(xqFile, nByte < 2048);
      content = new String(cbuf).trim();
      //
      if (content.indexOf(INPUT_CONTEXT) != -1
          && content.indexOf(INPUT_CONTEXT1) == -1
          && content.indexOf(INPUT_CONTEXT2) == -1) {
        inputMap.put(INPUT_CONTEXT, inputFile);
      } else if (content.indexOf(INPUT_CONTEXT1) == -1) {
        inputMap.put(INPUT_CONTEXT1, inputFile);
      } else if (content.indexOf(INPUT_CONTEXT2) != -1) {
        inputMap.put(INPUT_CONTEXT2, inputFile);
      }
      //
      if (content.indexOf(DECLARE_NAMESPACE) != -1
          || content.indexOf(IMPORT_SCHEMA_NAMESPACE) != -1) {
        setupNamespace(content);
      }
      //
      assertTrue(content.lastIndexOf(S_COMMENT2) != -1); // assert to get
      xpath2Expr = content.substring(content.lastIndexOf(S_COMMENT2) + 2).trim();
      xqreader.close();
      isxq.close();
    } catch (IOException e) {
      throw new RuntimeException("Can't extract XPath expression from XQuery file : " + xqFile, e);
    }
    if (unescape && xpath2Expr.contains("&")) {
      return resolveCharacterReferences(xpath2Expr);
    } else {
      return xpath2Expr;
    }
  }
 protected void setBaseUri(String uri) throws URISyntaxException {
   if (useNewApi) {
     staticContextBuilder.withBaseUri(uri);
   } else {
     dynamicContext.set_base_uri(uri);
   }
 }
 protected void setDefaultCollation(String uri) {
   if (useNewApi) {
     staticContextBuilder.withDefaultCollation(uri);
   } else {
     dynamicContext.set_default_collation(uri);
   }
 }
 protected void setCollections(Map map) {
   if (useNewApi) {
     dynamicContextBuilder.withCollections(map);
   } else {
     dynamicContext.set_collections(map);
   }
 }
 protected void addFunctionLibrary(FunctionLibrary fl) {
   if (useNewApi) {
     staticContextBuilder.withFunctionLibrary(fl.getNamespace(), fl);
   } else {
     dynamicContext.add_function_library(fl);
   }
 }
  protected DefaultDynamicContext setupDynamicContext(XSModel schema) {
    XercesTypeModel typeModel = schema != null ? new XercesTypeModel(schema) : null;
    if (useNewApi) {
      staticContextBuilder.withTypeModel(typeModel);

      staticContextBuilder.withNamespace("xs", "http://www.w3.org/2001/XMLSchema");
      staticContextBuilder.withNamespace("xsd", "http://www.w3.org/2001/XMLSchema");
      staticContextBuilder.withNamespace("fn", "http://www.w3.org/2005/xpath-functions");
      staticContextBuilder.withNamespace("xml", "http://www.w3.org/XML/1998/namespace");

      dynamicContextBuilder = new DynamicContextBuilder(staticContextBuilder);
      setupVariables(dynamicContext);
      try {
        dynamicContextBuilder.withTimezoneOffset(
            DatatypeFactory.newInstance().newDuration(false /*i.e. negative*/, 0, 0, 0, 5, 0, 0));
      } catch (DatatypeConfigurationException e) {
        throw new RuntimeException("Shouldn't fail here", e);
      }
      return null;
    }

    DefaultDynamicContext dc = new DefaultDynamicContext(typeModel);
    dynamicContext = dc;

    dc.add_namespace("xs", "http://www.w3.org/2001/XMLSchema");
    dc.add_namespace("xsd", "http://www.w3.org/2001/XMLSchema");
    dc.add_namespace("fn", "http://www.w3.org/2005/xpath-functions");
    dc.add_namespace("xml", "http://www.w3.org/XML/1998/namespace");

    dc.add_function_library(new FnFunctionLibrary());
    dc.add_function_library(new XSCtrLibrary());
    setupVariables(dc);
    return dc;
  }
 protected void addNamespace(String prefix, String nsURI) {
   if (useNewApi) {
     if (prefix == null || "".equals(prefix)) {
       staticContextBuilder.withDefaultNamespace(nsURI);
     } else {
       staticContextBuilder.withNamespace(prefix, nsURI);
     }
   } else {
     dynamicContext.add_namespace(prefix, nsURI);
   }
 }
 protected void setVariable(String name, ResultSequence values) {
   if (useNewApi) {
     staticContextBuilder.withVariable(
         new javax.xml.namespace.QName(name),
         new SimpleAtomicItemTypeImpl(
             BuiltinTypeLibrary.XS_ANYATOMICTYPE, ItemType.OCCURRENCE_NONE_OR_MANY));
     dynamicContextBuilder.withVariable(new javax.xml.namespace.QName(name), values);
   } else {
     dynamicContext.set_variable(new QName(name), values);
   }
 }
  void setCollationProvider(final CollationProvider cp) {
    if (useNewApi) {
      staticContextBuilder.withCollationProvider(cp);
    } else {
      dynamicContext.set_collation_provider(
          new org.eclipse.wst.xml.xpath2.processor.CollationProvider() {

            public Comparator get_collation(String name) {
              return cp.getCollation(name);
            }
          });
    }
  }
 protected void setVariable(String name, AnyType value) {
   if (useNewApi) {
     String ns = staticContextBuilder.getDefaultNamespace();
     if (value != null) {
       staticContextBuilder.withVariable(
           new javax.xml.namespace.QName(ns, name),
           new SimpleAtomicItemTypeImpl(value.getTypeDefinition(), ItemType.OCCURRENCE_ONE));
     } else {
       staticContextBuilder.withVariable(
           new javax.xml.namespace.QName(ns, name),
           new SimpleAtomicItemTypeImpl(
               BuiltinTypeLibrary.XS_UNTYPEDATOMIC, ItemType.OCCURRENCE_OPTIONAL));
     }
     dynamicContextBuilder.withVariable(new javax.xml.namespace.QName(ns, name), value);
   } else {
     dynamicContext.set_variable(new QName(name), value);
   }
 }
  protected DynamicContext setupVariables(DynamicContext dc) {
    setVariable("x", (AnyType) null);
    setVariable("var", (AnyType) null);

    if (domDoc != null) {
      TypeModel typeModel =
          dynamicContext != null
              ? dynamicContext.getTypeModel(domDoc)
              : staticContextBuilder.getTypeModel();
      AnyType docType = new DocType(domDoc, typeModel);
      setVariable("input-context1", docType);
      setVariable("input-context", docType);
      if (domDoc2 == null) {
        setVariable("input-context2", docType);
      } else {
        setVariable("input-context2", (AnyType) new DocType(domDoc2, typeModel));
      }
    }
    return dc;
  }