Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不同环境下XPath更改的评估_Java_Xml_Xpath_Xerces - Fatal编程技术网

Java 不同环境下XPath更改的评估

Java 不同环境下XPath更改的评估,java,xml,xpath,xerces,Java,Xml,Xpath,Xerces,我有一个独立的java项目,在该项目中,我从xml文件中计算XPath,并给出正确的结果。 当我将源代码集成到部署在WebSphere7上的应用程序中时,结果不再正常。 经过验证,我发现在第一种情况下,独立项目文档构建良好,所有根节点都被识别,在第二种情况下,源代码添加到WS 7上部署的应用程序中,文档中缺少根节点。 在这两种情况下,我都使用相同的DocumentBuilderFactory实现,问题仍然存在。 这是我使用的代码: domFactory = DocumentBuilder

我有一个独立的java项目,在该项目中,我从xml文件中计算XPath,并给出正确的结果。 当我将源代码集成到部署在WebSphere7上的应用程序中时,结果不再正常。 经过验证,我发现在第一种情况下,独立项目文档构建良好,所有根节点都被识别,在第二种情况下,源代码添加到WS 7上部署的应用程序中,文档中缺少根节点。 在这两种情况下,我都使用相同的DocumentBuilderFactory实现,问题仍然存在。 这是我使用的代码:

    domFactory = DocumentBuilderFactory.newInstance();
    xmlContent = new byte[inputStream.available()];
    inputStream.read(xmlContent); 
    ByteArrayInputStream bais = new ByteArrayInputStream(xmlContent);
    DocumentBuilder documentBuilder = domFactory.newDocumentBuilder();
    document = documentBuilder  .parse(bais);
    xPATH = XPathFactory.newInstance().newXPath();
    transformerFactory = TransformerFactory.newInstance();
    transformer = transformerFactory.newTransformer();
DomFactory的实现是:com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl,来自jar-xerces impl.1.5


任何想法都会有帮助。

InputStream.readbyte[]方法填充传递给它的数组。起初,你很幸运;仅仅因为代码工作过一次并不意味着它可以保证在每一次或每一个平台上工作

另一个问题是明确指出:

注意,虽然InputStream的一些实现将返回流中的总字节数,但许多实现不会返回。使用此方法的返回值来分配用于保存此流中所有数据的缓冲区是不正确的

在您的情况下,有一个非常简单的解决方案。您已经有一个InputStream。不要将其读入字节数组;删除xmlContent、BAI和available的所有用法。改为分析原始InputStream:

DocumentBuilder documentBuilder = domFactory.newDocumentBuilder();
document = documentBuilder.parse(inputStream);
xPATH = XPathFactory.newInstance().newXPath();
transformerFactory = TransformerFactory.newInstance();
transformer = transformerFactory.newTransformer();

问题解决了。您是对的,问题与InputStream的内容有关。在第二种情况下,IS通过两种解析器进行解析,这两种解析器改变了它的内容—根节点不存在。