Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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表达式时出现不兼容的ClassChangeError_Java_Xpath_Websphere - Fatal编程技术网

Java 使用命名空间计算xpath表达式时出现不兼容的ClassChangeError

Java 使用命名空间计算xpath表达式时出现不兼容的ClassChangeError,java,xpath,websphere,Java,Xpath,Websphere,我需要修改一个具有多个名称空间的xml文档。我的代码在本地计算机上运行时没有问题,但在将其部署到IBM Websphere application server时遇到java.lang.CompatibleClassChangeError 我正在使用xercesImpl-2.8.1.jar和xalan-2.7.0.jar。 导致此错误的原因是什么?如何解决?或者,是否有其他方法可以通过名称空间支持修改xml文档 代码: 异常堆栈跟踪: java.lang.IncompatibleClassCha

我需要修改一个具有多个名称空间的xml文档。我的代码在本地计算机上运行时没有问题,但在将其部署到IBM Websphere application server时遇到java.lang.CompatibleClassChangeError

我正在使用xercesImpl-2.8.1.jar和xalan-2.7.0.jar。 导致此错误的原因是什么?如何解决?或者,是否有其他方法可以通过名称空间支持修改xml文档

代码:

异常堆栈跟踪:

java.lang.IncompatibleClassChangeError
        at org.apache.xpath.jaxp.JAXPPrefixResolver.getNamespaceForPrefix(JAXPPrefixResolver.java:45)
        at org.apache.xpath.compiler.Lexer.mapNSTokens(Lexer.java:587)
        at org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:265)
        at org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:96)
        at org.apache.xpath.compiler.XPathParser.initXPath(XPathParser.java:110)
        at org.apache.xpath.XPath.<init>(XPath.java:176)
        at org.apache.xpath.XPath.<init>(XPath.java:264)
        at org.apache.xpath.jaxp.XPathImpl.compile(XPathImpl.java:394)
        at com.ibm._jsp._xml._jspService(_xml.java:94)
        at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:87)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1146)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:592)
        at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:525)
        at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:122)
        at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:232)
        at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3548)
        at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:269)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:831)
        at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1478)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:133)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267)
        at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.determineNextChannel(SSLConnectionLink.java:1037)
        at com.ibm.ws.ssl.channel.impl.SSLConnectionLink$MyReadCompletedCallback.complete(SSLConnectionLink.java:644)
        at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1818)
        at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
        at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
        at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
        at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
        at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:196)
        at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:751)
        at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)
java.lang.CompatibleClassChangeError
位于org.apache.xpath.jaxp.jaxprefixresolver.getNamespaceForPrefix(jaxprefixresolver.java:45)
位于org.apache.xpath.compiler.Lexer.mapNSTokens(Lexer.java:587)
位于org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:265)
位于org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:96)
位于org.apache.xpath.compiler.XPathParser.initXPath(XPathParser.java:110)
在org.apache.xpath.xpath.(xpath.java:176)
位于org.apache.xpath.xpath.(xpath.java:264)
位于org.apache.xpath.jaxp.XPathImpl.compile(XPathImpl.java:394)
在com.ibm.\u jsp.\u xml.\u jsp服务(\u xml.java:94)
位于com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:87)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
位于com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1146)
位于com.ibm.ws.webcontainer.servlet.ServletWrapper.HandlerRequest(ServletWrapper.java:592)
位于com.ibm.ws.wswebcontainer.servlet.ServletWrapper.HandlerRequest(ServletWrapper.java:525)
位于com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.HandlerRequest(GenericServletWrapper.java:122)
位于com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.HandlerRequest(AbstractJSPExtensionServletWrapper.java:232)
位于com.ibm.ws.webcontainer.webapp.webapp.handleRequest(webapp.java:3548)
位于com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:269)
位于com.ibm.ws.webcontainer.webcontainer.handleRequest(webcontainer.java:831)
位于com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1478)
位于com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:133)
位于com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
位于com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
位于com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267)
位于com.ibm.ws.ssl.channel.impl.SSLConnectionLink.determinationextchannel(SSLConnectionLink.java:1037)
位于com.ibm.ws.ssl.channel.impl.SSLConnectionLink$MyReadCompletedCallback.complete(SSLConnectionLink.java:644)
位于com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1818)
在com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted上(AioReadCompletionListener.java:165)
位于com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
位于com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
位于com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
位于com.ibm.io.async.ResultHandler.complete(ResultHandler.java:196)
位于com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:751)
位于com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
位于com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)

我通常的经验法则是,CompatibleClassChangeError意味着编译器在编译时看到的某个类的版本与在运行时加载的同一个类的版本不兼容。堆栈跟踪显示XPath引擎正在回调您的NamespaceResolver,因此这应该是调查的重点。

我猜想websphere在共享类路径中有另一个xerces或xalan版本的副本,并且您的应用程序最终使用了不同版本的混合。我将首先尝试找出websphere使用的是哪个版本,以及您的应用程序是否可以使用该版本


如果您使用的是Java 6,您还可以尝试使用获取类名和类加载器的方法,并传递您的Web应用程序。

我已经设法解决了这个问题。这是因为从我也在使用的xml-api.jar加载了一个类文件(
javax.xml.namespace.NamespaceContext

javax.xml.namespace.NamespaceContext
是xml-API.jar和JRE中的一个接口。在JRE版本的类中,接口方法都标记为“抽象”,但在XMLAPI.jar版本中,接口方法不是抽象的。我认为这导致了二进制兼容性问题,导致了我遇到的错误

为了解决我的问题,我更改了类加载器配置,在应用程序类加载器之前使用父类加载器,以便使用JRE中的
javax.xml.namespace.NamespaceContext

java.lang.IncompatibleClassChangeError
        at org.apache.xpath.jaxp.JAXPPrefixResolver.getNamespaceForPrefix(JAXPPrefixResolver.java:45)
        at org.apache.xpath.compiler.Lexer.mapNSTokens(Lexer.java:587)
        at org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:265)
        at org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:96)
        at org.apache.xpath.compiler.XPathParser.initXPath(XPathParser.java:110)
        at org.apache.xpath.XPath.<init>(XPath.java:176)
        at org.apache.xpath.XPath.<init>(XPath.java:264)
        at org.apache.xpath.jaxp.XPathImpl.compile(XPathImpl.java:394)
        at com.ibm._jsp._xml._jspService(_xml.java:94)
        at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:87)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1146)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:592)
        at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:525)
        at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:122)
        at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:232)
        at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3548)
        at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:269)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:831)
        at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1478)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:133)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267)
        at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.determineNextChannel(SSLConnectionLink.java:1037)
        at com.ibm.ws.ssl.channel.impl.SSLConnectionLink$MyReadCompletedCallback.complete(SSLConnectionLink.java:644)
        at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1818)
        at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
        at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
        at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
        at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
        at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:196)
        at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:751)
        at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)