Websphere上使用dom4j的Nullpointer异常

时间:2014-08-07 13:33:33

标签: 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()+"']/"+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。

1 个答案:

答案 0 :(得分:0)

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

点击服务器>服务器类型> WebSphere应用程序服务器> server_name用于访问应用程序服务器设置页面。 为应用程序服务器指定应用程序类加载器策略。保存并重新启动。

详细了解如何更改类加载器以及您可以采取的其他方法:

Specify class-loader values for an application server.

Specify class-loader values for an installed enterprise application.

Specify the class-loader mode for an installed web module.

类加载器策略设置为:

  

首先加载父类加载器的类 - 使类加载器首先在父类加载器中搜索以加载类。   此值是Development Kit类加载器和标准   WebSphere®ApplicationServer类加载器。

     

首先使用本地类加载器加载的类(parent last ) - 使类加载器在应用程序类加载器中搜索   首先加载一个类。通过指定使用本地类加载的类   首先加载器(父进程),您的应用程序可以覆盖类   包含在父类加载器中。

简而言之,它意味着如果从代码中引用com.x.Foo包中的类,例如,这个完全相同的类存在于WebSphere类加载器上,也存在于WEB-INF / lib中的一个打包库中如果您使用默认的“parent first”文件夹,则类加载器将查找并使用WebSphere版本,因为如果您将其更改为“父级最后”,它将首先找到它,它将首先找到您的库版本用它来代替。 请查看官方IBM WebSphere infocenter页面,了解您可以在哪里找到完整的详细说明。