   protected boolean evaluate(InputSource inputSource)
   {
      try
      {
         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
         factory.setNamespaceAware(true);
         DocumentBuilder dbuilder = factory.newDocumentBuilder();
         Document doc = dbuilder.parse(inputSource);

         //An XPath expression could return a true or false value instead of a node.
         //eval() is a better way to determine the boolean value of the exp.
         //For compliance with legacy behavior where selecting an empty node returns true,
         //selectNodeIterator is attempted in case of a failure.

         CachedXPathAPI cachedXPathAPI = new CachedXPathAPI();
         XObject result = cachedXPathAPI.eval(doc, xpath);
         if (result.bool())
            return true;
         else
         {
            NodeIterator iterator = cachedXPathAPI.selectNodeIterator(doc, xpath);
            return (iterator.nextNode() != null);
         }

      }
      catch (Throwable e)
      {
         return false;
      }
   }
The software processes an XML document that can contain XML entities with URIs that resolve to documents outside of the intended sphere of control, causing the product to embed incorrect documents into its output.