Hi all,
I'm using a Resource Link with a WebResource to show a PDF Document in the
browser. This works fine for Websphere 6.1.0.2 on Windows 2003 Server but
fails on WebSphere 6.1.0.2 on Solaris:
[03.12.10 08:59:32:930 CET] 00000024 SystemOut O 2010-12-03
08:59:32,929 returning fileResource ...
at
com.csc.pts.mmg.web.panels.mandate.MandateLinksPanel$1.getResourceStream(MandateLinksPanel.java:95)
[03.12.10 08:59:32:935 CET] 00000024 SystemOut O 2010-12-03
08:59:32,931 String index out of range: -1
at
org.apache.wicket.RequestCycle.logRuntimeException(RequestCycle.java:1529)
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1768)
at java.lang.String.substring(String.java:1735)
at
com.ibm.ws.webcontainer.webapp.WebApp.getMimeType(WebApp.java:2109)
at
com.ibm.ws.webcontainer.facade.ServletContextFacade.getMimeType(ServletContextFacade.java:84)
at org.apache.wicket.Response.detectContentType(Response.java:358)
at
org.apache.wicket.request.target.resource.ResourceStreamRequestTarget.configure(ResourceStreamRequestTarget.java:236)
at
org.apache.wicket.request.target.resource.ResourceStreamRequestTarget.respond(ResourceStreamRequestTarget.java:150)
at
org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105)
at org.apache.wicket.RequestCycle.respond(RequestCycle.java:1267)
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1334)
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
at
org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:484)
at
org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:138)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at
com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:966)
at
com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
at
com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:463)
at
com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:92)
at
com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:744)
at
com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1433)
at
com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:93)
at
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465)
at
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:394)
at
com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
at
com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:152)
at
com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:213)
at
com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions(AbstractAsyncFuture.java:195)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:194)
at
com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:741)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:863)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1510)
The code in Wicket:
WebResource pdfSignatureDocument = new WebResource() {
private static final long serialVersionUID = 1L;
@Override
protected void setHeaders(WebResponse response) {
super.setHeaders(response);
response.setAttachmentHeader(
"signature.pdf");
}
@Override
public IResourceStream getResourceStream() {
log.debug("Printing mandate PDF for
mandate"
+ selectedMandate
.getReference());
ArrayList<Serializable> list = new
ArrayList<Serializable>();
list.add(selectedMandate);
MmgReportManager rm = new
MmgReportManager();
File pdfMandate = null;
try {
pdfMandate =
rm.exportReportAsFile(ReportTypes.SELECTED_MANDATE, list,
SupportedFileTypes.PDF);
} catch (PtsException e) {
log.error(e);
error(e);
}
log.debug("returning fileResource ...");
return new FileResourceStream(pdfMandate);
}
};
pdfSignatureDocument.setCacheable(false);
add(createPDFSignatureDocumentLink = new
ResourceLink<WebResource>("createPDFSignatureDocument",
pdfSignatureDocument));