Java Websphere上dom4j的空指针异常

Java Websphere上dom4j的空指针异常,java,websphere,rad,dom4j,Java,Websphere,Rad,Dom4j,我使用RAD和websphere开发J2EE应用程序,当我尝试从DOM4J库执行此代码时: XPath xpathSelector = DocumentHelper.createXPath("//annee[@annee='"+request.getAnnee()+ "']/offre[@nomOffre='"+request.getOffre()+"'"+conditionProfile+"]/produit[@nomProduit='"+request.getProduit()+"']/"+

我使用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。

更改类加载器策略以匹配您的队友配置,关于如何做到这一点,有几个选项最简单的是更改服务器类加载器:

单击服务器>服务器类型>WebSphere应用程序服务器>服务器名称以访问应用程序服务器设置页面。 指定应用程序服务器的应用程序类加载器策略。保存并重新启动

请参阅有关如何更改类加载器以及您可以采取的其他方法的更多详细信息:

classloader策略设置包括:

首先使用父类加载器加载的类-使类加载器在父类加载器中搜索以加载类。 此值是开发工具包类装入器和 WebSphere®应用程序服务器类加载器

使用本地类加载器加载的类第一个父类最后一个-导致类加载器在应用程序类加载器中搜索 首先加载一个类。通过指定使用本地类加载的类 加载程序第一个父类最后,应用程序可以重写类 包含在父类加载器中

简言之,这意味着如果您从代码中引用包com.x.Foo中的一个类,例如,这个完全相同的类存在于WebSphere classloader上,也存在于您的WEB-INF/lib文件夹中的一个打包库中,如果您首先使用默认父类,则classloader将查找并使用WebSphere版本,因为它将查找另一方面,如果您将其更改为父级,它将首先找到您的库版本,然后使用它。
请查看官方页面,了解详细的解释

你能从堆栈跟踪中发布更多信息吗?还要检查您的xml编码是否与您的队友使用的相同。要检查是否转到windows>首选项,请在搜索字段中键入编码。有两个地方可以检查XML>XML文件和General>Content-Types>Text>XMLHello,这也不是编码问题,因为我创建了一个主类并测试了代码,它工作了,我已经探索了编码问题的可能性,但事实并非如此。我在第一条消息中添加了完整的跟踪。你能检查一下你是否和其他队友使用相同的类加载器策略吗?你使用的JDK版本和他们的版本一样,还是相同的O.S?确实很奇怪,它在WebSphere上运行,对您的队友没有错误,对您也不起作用。但是我已经按照您的建议修改了类加载器策略,从PARENT_FIRST修改为PARENT_LAST,并且可以正常工作!如果有人能解释一下,那就太好了。谢谢。嗨,我已经添加了完整的答案和解释。谢谢你的帮助和解释,我被困了好几天了!