【发布时间】:2014-08-07 13:33:33
【问题描述】:
我使用 RAD 和 websphere 开发 J2EE 应用程序,当我尝试从 DOM4J 库中执行此代码时:
XPath xpathSelector = DocumentHelper.createXPath("//annee[@annee='"+request.getAnnee()+ "']/offre[@nomOffre='"+request.getOffre()+"'"+conditionProfile+"]/produit[@nomProduit='"+request.getProduit()+"']/"+request.getTypeDocument() +"/specificite[@type='"+request.getSpecificite()+"']/*");
List nodes = xpathSelector.selectNodes(doc);
doc 是一个 org.dom4j.Document 对象。
我收到以下错误:
java.lang.NullPointerException
at org.jaxen.util.DescendantAxisIterator.hasNext(DescendantAxisIterator.java:101)
at org.jaxen.expr.DefaultStep.evaluate(DefaultStep.java:152)
at org.jaxen.expr.DefaultLocationPath.evaluate(DefaultLocationPath.java:140)
at org.jaxen.expr.DefaultAbsoluteLocationPath.evaluate(DefaultAbsoluteLocationPath.java:113)
at org.jaxen.expr.DefaultXPathExpr.asList(DefaultXPathExpr.java:102)
at org.jaxen.BaseXPath.selectNodesForContext(BaseXPath.java:674)
at org.jaxen.BaseXPath.selectNodes(BaseXPath.java:213)
at org.dom4j.xpath.DefaultXPath.selectNodes(DefaultXPath.java:132)
at com.probtp.gp.multitarificateur.referentiel.Referentiel.constitueListePDF(Referentiel.java:250)
at com.probtp.gp.multitarificateur.referentiel.Referentiel.invoque(Referentiel.java:208)
at com.probtp.gp.multitarificateur.referentiel.Referentiel.donner_Referentiel(Referentiel.java:489)
at com.probtp.gp.multitarificateur.referentiel.Referentiel.donner_Referentiel(Referentiel.java:460)
at com.probtp.gp.simulateurs.gammemodulaire.GM_FUEModule.traitementNoticeSpecifique(GM_FUEModule.java:596)
at com.probtp.simulateurs.pdf.PdfMULTI.constitueFicheNotice(PdfMULTI.java:806)
at com.probtp.simulateurs.pdf.PdfMULTI.traiterOffre(PdfMULTI.java:525)
at com.probtp.simulateurs.pdf.PdfMULTI.genererMulti(PdfMULTI.java:407)
at com.probtp.simulateurs.pdf.PdfMULTI.constitutionPDF(PdfMULTI.java:307)
at com.probtp.gp.multitarificateur.action.ChargeMultiValidation.redirectDevis(ChargeMultiValidation.java:1433)
at com.probtp.gp.multitarificateur.action.ChargeMultiValidation.execute(ChargeMultiValidation.java:275)
at com.probtp.gp.ActionGP.perform(ActionGP.java:169)
at probtp.web.base.action.PActionBase.performAction(PActionBase.java:194)
at probtp.web.struts.PAction.perform(PAction.java:119)
at org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet.java:1487)
at probtp.web.struts.PActionServlet.process(PActionServlet.java:281)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:557)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1443)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1384)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:131)
at probtp.mesures.web.MesuresFilter.doFilter(MesuresFilter.java:281)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
at com.probtp.web.filter.StatsFilter.doFilter(StatsFilter.java:44)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:852)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:785)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:175)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3610)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:274)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:926)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1557)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:173)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1772)
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:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:202)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:766)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:896)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527)
这不是编码问题,因为我的队友没有这个问题,我们应该有相同的配置。当我创建一个 EAR 并且我的一位同事在本地部署它时,它可以工作......
我尝试了以下修改但没有成功:
- 将编译器从 JDK 1.5 更改为 1.6,
- 尝试其他版本的 DOM4J(目前为 1.6.1),
- 再次安装我的服务器。
如果您有任何提示,我很乐意进行测试。
提前致谢,JB。
【问题讨论】:
-
能否请您从堆栈跟踪中发布更多信息?还要检查您的 xml 编码是否与您的队友使用的相同。要检查,请转到 windows > 首选项,在搜索字段中输入编码。有 2 个地方可以检查 XML > XML Files and General > Content Types > Text > XML
-
您好,这也不是编码问题,因为我创建了一个主类并测试了代码并且它有效,我已经探索了编码问题的可能性,但事实并非如此。我在第一条消息中添加了完整的跟踪信息。
-
您能否检查一下您是否使用与其他队友相同的类加载器策略?您是否使用与它们相同的 JDK 版本以及相同的操作系统?确实很奇怪,它在 WebSphere 上运行,对你的队友没有错误,对你却不起作用。
-
我们有相同的 jdk,相同的操作系统。但是我已经按照您从 PARENT_FIRST 到 PARENT_LAST 的建议修改了类加载器策略,并且它有效!如果有人作为解释,那就太好了。谢谢。
-
嗨,我已经添加了完整的答案和解释。很高兴它现在可以工作了。