Catching the runtime NPE is not a problem,
try
{
String x = null;
x.equals("throw");
}
catch (NullPointerException npe)
{
System.out.println("npe = " + npe);
}
or catch anything
catch (Throwable t)
{
System.out.println("NPE CAUGHT = " + t);
}
What is concerning me is *why* are we getting a NPE in the first place.
Do you have the source code to the Websphere method where the NPE initiates?
Tallamraju, Raman wrote:
Hi David,
Woonsan's fix didn't help - the nullpointerexception was still being
thrown even after the exception is caught in
InformationProviderServiceImpl and a new provider is created.
We tried your suggestion of returning null on error in getAttribute
method in ServletRequestImpl. We confirmed that name isn't null and that
an exception is thrown in the body of getAttribute method. Catching that
exception and returning null leads to an illegal state exception (stack
trace below).
I'm attaching the modified code (for both ServletRequestImpl &
InformationProviderServiceImpl) and the new stack trace below. Do you
have any ideas on how we can change getAttribute method so it might
recover gracefully from the nullpointerexception?
Thanks,
Raman
CLASS: ServletRequestImpl.java
===============================
public Object getAttribute(String name) {
Object value = null;
if (name == null)
{
log.info("***Caught the websphere
NullPointerException - NAME WAS NULL***");
return value;
}
try
{
value = super.getAttribute(name);
if (name.equals(PortletRequest.USER_INFO)) {
JetspeedRequestContext context =
(JetspeedRequestContext)
getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);
if (null != context) {
String entityID = "--NULL--";
PortletEntity entity =
portletWindow.getPortletEntity();
if (entity != null) {
entityID =
entity.getId().toString();
}
PortletApplicationEntity
portletAppEntity = portletWindow
.getPortletEntity().getPortletApplicationEntity();
PortletApplicationDefinition
portletAppDef = entity
.getPortletDefinition()
.getPortletApplicationDefinition();
if (null != portletAppDef) {
value =
context.getUserInfoMap(portletAppDef.getId());
if (log.isDebugEnabled()
&& (null != value))
log.debug(PortletRequest.USER_INFO + " map size: "
+ ((Map) value).size());
} else {
log.error("Entity is
null:" + entityID);
}
}
} else {
if (null == value) {
PortletRequest pr =
(PortletRequest) super
.getAttribute("javax.portlet.request");
if (pr != null) {
value =
super.getAttribute(nameSpaceMapper.encode(
portletWindow.getId(), name));
}
}
}
}
catch (Exception e) {
log.info("***Caught the websphere
NullPointerException & recovered from it in ServletRequestImpl***");
}
return value;
}
CLASS: InformationProviderServiceImpl.java
===========================================
public DynamicInformationProvider
getDynamicProvider(javax.servlet.http.HttpServletRequest request)
{
DynamicInformationProvider provider = null;
try
{
provider = (DynamicInformationProvider)
request.getAttribute("org.apache.jetspeed.engine.core.DynamicInformation
Provider");
}
catch (Exception e)
{
log.info("***Caught the websphere NullPointerException &
recovered from it***");
}
if (provider == null)
{
provider = new DynamicInformationProviderImpl(request,
servletConfig);
request.setAttribute("org.apache.jetspeed.engine.core.DynamicInformation
Provider", provider);
}
return provider;
}
New StackTrace
===============
2007-01-26 13:43:19,621 [WebContainer : 6] ERROR
org.apache.portals.gems.browser.BrowserPortlet - Exception
java.lang.IllegalStateException: Cannot call
getRequestContext(HttpServletRequest request) before it has been created
and set for this thread.
at
org.apache.jetspeed.request.JetspeedRequestContextComponent.getRequestCo
ntext(JetspeedRequestContextComponent.java(Inlined Compiled Code))
at
org.apache.jetspeed.services.information.DynamicInformationProviderImpl.
<init>(DynamicInformationProviderImpl.java(Inlined Compiled Code))
at
org.apache.jetspeed.services.information.InformationProviderServiceImpl.
getDynamicProvider(InformationProviderServiceImpl.java(Inlined Compiled
C\
ode))
at
org.apache.pluto.services.information.InformationProviderAccess.getDynam
icProvider(InformationProviderAccess.java(Inlined Compiled Code))
at
org.apache.pluto.core.impl.PortletURLImpl.toString(PortletURLImpl.java(C
ompiled Code))
at
org.apache.jetspeed.container.url.impl.JetspeedPortletURL.toString(Jetsp
eedPortletURL.java(Compiled Code))
at
com.fmr.fimt.bosportal.portlet.portletinventory.PortletInventory.getRows
(PortletInventory.java(Compiled Code))
at
com.fmr.fimt.bosportal.portlet.selector.PortletSelector.getRows(PortletS
elector.java:215)
at
org.apache.portals.gems.browser.BrowserPortlet.doView(BrowserPortlet.jav
a:188)
at
com.fmr.fimt.bosportal.portlet.selector.PortletSelector.doView(PortletSe
lector.java:130)
at
com.fmr.fimt.bosportal.portlet.portletinventory.PortletInventory.doView(
PortletInventory.java:236)
at
javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java(Compiled
Code))
at
javax.portlet.GenericPortlet.render(GenericPortlet.java(Compiled Code))
at
org.apache.portals.bridges.velocity.GenericVelocityPortlet.render(Generi
cVelocityPortlet.java:163)
at
org.apache.jetspeed.factory.JetspeedPortletInstance.render(JetspeedPortl
etInstance.java(Compiled Code))
at
org.apache.jetspeed.container.JetspeedContainerServlet.doGet(JetspeedCon
tainerServlet.java(Compiled Code))
at
org.apache.jetspeed.container.JetspeedContainerServlet.doPost(JetspeedCo
ntainerServlet.java(Compiled Code))
at
javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
at
javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
at
com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.ja
va(Compiled Code))
at
com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrap
per.java(Compiled Code))
at
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.include(WebAppReq
uestDispatcher.java(Compiled Code))
at
org.apache.jetspeed.container.invoker.ServletPortletInvoker.invoke(Servl
etPortletInvoker.java(Compiled Code))
at
org.apache.jetspeed.container.invoker.ServletPortletInvoker.render(Servl
etPortletInvoker.java(Compiled Code))
at
org.apache.pluto.PortletContainerImpl.renderPortlet(PortletContainerImpl
.java(Compiled Code))
at
org.apache.jetspeed.container.JetspeedPortletContainerWrapper.renderPort
let(JetspeedPortletContainerWrapper.java(Compiled Code))
at
org.apache.jetspeed.aggregator.impl.RenderingJobImpl.execute(RenderingJo
bImpl.java(Compiled Code))
at
org.apache.jetspeed.aggregator.impl.PortletRendererImpl.renderNow(Portle
tRendererImpl.java(Compiled Code))
at
org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.aggregateAndRende
r(PageAggregatorImpl.java(Compiled Code))
at
org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.aggregateAndRende
r(PageAggregatorImpl.java(Compiled Code))
at
org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.aggregateAndRende
r(PageAggregatorImpl.java(Compiled Code))
at
org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.build(PageAggrega
torImpl.java:106)
at
org.apache.jetspeed.aggregator.AggregatorValve.invoke(AggregatorValve.ja
va:48)
at
org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(Jets
peedPipeline.java(Compiled Code))
at
org.apache.jetspeed.decoration.DecorationValve.invoke(DecorationValve.ja
va:110)
at
org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(Jets
peedPipeline.java(Compiled Code))
at
org.apache.jetspeed.pipeline.valve.impl.ActionValveImpl.invoke(ActionVal
veImpl.java:147)
at
org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(Jets
peedPipeline.java(Inlined Compiled Code))
at
com.fmr.fimt.fw.pipeline.valve.impl.UsageStatsValveImpl.invoke(UsageStat
sValveImpl.java(Compiled Code))
at
org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(Jets
peedPipeline.java(Compiled Code))
at
org.apache.jetspeed.container.ContainerValve.invoke(ContainerValve.java:
76)
at
org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(Jets
peedPipeline.java(Compiled Code))
at
org.apache.jetspeed.profiler.impl.ProfilerValveImpl.invoke(ProfilerValve
Impl.java:255)
at
org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(Jets
peedPipeline.java(Compiled Code))
at
org.apache.jetspeed.security.impl.LoginValidationValveImpl.invoke(LoginV
alidationValveImpl.java:159)
at
org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(Jets
peedPipeline.java(Compiled Code))
at
org.apache.jetspeed.localization.impl.LocalizationValveImpl.invoke(Local
izationValveImpl.java:169)
at
org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(Jets
peedPipeline.java(Compiled Code))
at
org.apache.jetspeed.security.impl.AbstractSecurityValve$1.run(AbstractSe
curityValve.java:117)
at java.security.AccessController.doPrivileged1(Native Method)
at
java.security.AccessController.doPrivileged(AccessController.java(Compil
ed Code))
at
javax.security.auth.Subject.doAsPrivileged(Subject.java(Compiled Code))
at
org.apache.jetspeed.security.impl.AbstractSecurityValve.invoke(AbstractS
ecurityValve.java:111)
at
com.fmr.portal.security.NTLMSecurityValve.invoke(NTLMSecurityValve.java:
216)
at
org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(Jets
peedPipeline.java(Compiled Code))
at
org.apache.jetspeed.container.url.impl.PortalURLValveImpl.invoke(PortalU
RLValveImpl.java:67)
at
org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(Jets
peedPipeline.java(Compiled Code))
at
org.apache.jetspeed.capabilities.impl.CapabilityValveImpl.invoke(Capabil
ityValveImpl.java:128)
at
org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(Jets
peedPipeline.java(Compiled Code))
at
com.fmr.fimt.fw.pipeline.valve.impl.StatisticsValveImpl.invoke(Statistic
sValveImpl.java:57)
at
org.apache.jetspeed.pipeline.JetspeedPipeline$Invocation.invokeNext(Jets
peedPipeline.java(Compiled Code))
at
org.apache.jetspeed.pipeline.JetspeedPipeline.invoke(JetspeedPipeline.ja
va:145)
at
org.apache.jetspeed.engine.JetspeedEngine.service(JetspeedEngine.java:21
4)
at
org.apache.jetspeed.engine.JetspeedServlet.doGet(JetspeedServlet.java:23
8)
at
org.apache.jetspeed.engine.JetspeedServlet.doPost(JetspeedServlet.java:2
65)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
at
javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
at
com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.ja
va(Compiled Code))
at
com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.ja
va(Compiled Code))
at
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterCh
ain.java(Compiled Code))
at
com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterC
hain.java(Compiled Code))
at
com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrap
per.java(Compiled Code))
at
com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheS
ervletWrapper.java:80)
at
com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:180
2)
at
com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:8
4)
at
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscriminatio
n(HttpInboundLink.java:469)
at
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformatio
n(HttpInboundLink.java:408)
at
com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpIC
LReadCallback.java:101)
at
com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallba
ck.complete(SSLReadServiceContext.java:1686)
at
com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueMa
nager.java:566)
at
com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.
java(Compiled Code))
at
com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.
java:952)
at
com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager
.java:1039)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1455)
-----Original Message-----
From: David Sean Taylor [mailto:[EMAIL PROTECTED]
Sent: Thursday, January 25, 2007 8:36 PM
To: Jetspeed Users List
Subject: Re: NullPointerException when calling PortletURLImpl.toString()
in websphere 6.0
Tallamraju, Raman wrote:
The actual code snippet is
this:
/**
* @see
javax.servlet.http.HttpServletRequest#getAttribute(java.lang.String)
*/
public Object getAttribute( String name )
{
***Object value = super.getAttribute(name);***(Line 210)
Could this be caused by "name == null"?
If so, I can add a check for
if (name == null)
return null;
and bypass making the super call
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
David Sean Taylor
Bluesunrise Software
[EMAIL PROTECTED]
[office] +01 707 773-4646
[mobile] +01 707 529 9194
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]