Hi,

Ok I found in wicketstuff, a JRPdfResource  class that does the jasper to
pdf conversion for me
and I added code to do this:

InputStream is = getClass().getResourceAsStream("/test.jasper");

        JRResource pdfResource = new JRPdfResource(is);

        pdfResource.setReportParameters(new HashMap<String, Object>());
        add(new ResourceLink("print", pdfResource));

But when I run it I get 

org.apache.wicket.util.io.SerializableChecker$WicketNotSerializableException:
Unable to serialize class: java.io.ByteArrayInputStream
Field hierarchy is:
  2 [class=com.homeaccount.web.loanoptions.MortgageResultsPage, path=2]
    private java.lang.Object org.apache.wicket.MarkupContainer.children
[class=[Ljava.lang.Object;]
      private java.lang.Object org.apache.wicket.MarkupContainer.children[8]
[class=org.apache.wicket.markup.html.link.ResourceLink, path=2:print]
        private final org.apache.wicket.Resource
org.apache.wicket.markup.html.link.ResourceLink.resource
[class=com.homeaccount.web.jasper.JRPdfResource]
          private com.homeaccount.web.jasper.JRResource$JasperReportFactory
com.homeaccount.web.jasper.JRResource.jasperReportFactory
[class=com.homeaccount.web.jasper.JRResource$1]
            final java.io.InputStream
com.homeaccount.web.jasper.JRResource$1.val$report
[class=java.io.ByteArrayInputStream] <----- field that is not serializable
        at
org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:349)
        at
org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:618)
        at
org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:541)

I checked and JRResources implements Serializable, is there a way I can get
Wicket to avoid serializing this?

I was also thinking maybe I could do something like this:

add(new Link("print") {


            public void onClick() {
                InputStream is =
getClass().getResourceAsStream("/test.jasper");
                JRResource pdfStream = new JRPdfResource(is);
                pdfStream.setReportParameters(new HashMap<String,
Object>());
                getRequestCycle().setRequestTarget(new
ResourceStreamRequestTarget(pdfStream).setFileName("test.pdf"));
            }
        });

But turns out JRResource extends DynamicWebResource and does not implement
IResourceStream so not sure if this can be made to work...

Thanks, Jason


Pills wrote:
> 
> Hi,
> 
> look at RequestCycle#setRequestTarget and ResourceStreamRequestTarget
> 
> 
> novotny wrote:
>> Hi,
>>
>> I'm learning Jasper to create/display a PDF when a link is clicked and
>> the
>> template code I have looks like:
>>
>> ServletOutputStream servletOutputStream = response.getOutputStream();
>>         InputStream reportStream =
>> getServletConfig().getServletContext().getResourceAsStream("/reports/FirstReport.jasper");
>>       
>>             JasperRunManager.runReportToPdfStream(reportStream,
>>                     servletOutputStream, new HashMap(), new
>> JREmptyDataSource());
>>
>>             response.setContentType("application/pdf");
>>             servletOutputStream.flush();
>>             servletOutputStream.close();
>>
>> How should I acccess the servlet objects, or is there a better way to do
>> this that is the "wicket way(tm)"?
>>
>> Much appreciated, Jason
>>        
>>   
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/access-ServletOutputStream-in-wicket-tp21487704p21491294.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to