Re: access ServletOutputStream in wicket

2009-01-16 Thread Sébastien Piller
I really doubt that such an exception may be fixed by upgrading 
jasperreport (NotSerializableException is pure wicket exception, not a 
jasper one).


The stacktrace shows you that the problem is here:

   final java.io.InputStream
com.homeaccount.web.jasper.JRResource$1.val$report
[class=java.io.ByteArrayInputStream] - field that is not serializable


so nothing to do with jasperreport. Just declare your streams as 
transient
and lazy-init it in an initialisation method. And don't forget to close 
them as well...


I you want to, here is how I've my generation of pdf:

# Part that generate a PDF to a byte array

   public byte[] create(int orderid) {

   final JasperReport report;

   Order o = getOrder(orderid);

   try {

   report = (JasperReport) JRLoader.loadObject(InvoiceCreator.class

   .getResourceAsStream(

   /jasperreports/Invoice/Invoice.jasper));

   } catch (JRException e) {

   throw new RuntimeException(e);

   }

   final Map params = new HashMap();

   params.put(basedir, /jasperreports/Invoice/);

   params.put(curr, o.getCurrency());

   params.put(orderid, o.getId());

   params.put(shopid, o.getShops().getId()); 


   params.put(REPORT_LOCALE, new Locale(fr);

   byte[] bytes;

   DataSource dataSource = Globals.getDataSource();

   Connection connection = DataSourceUtils.getConnection(dataSource);

   try {

   bytes = JasperRunManager.runReportToPdf(report, params,

   connection);

   } catch (Exception e) {

   bytes = null;

   throw new RuntimeException(e);

   } finally {

   DataSourceUtils.releaseConnection(connection, dataSource);

   }

   return bytes;

   }


# Part that write that data to the wicket's stream

   private static Link newInvoiceLink(String string, final Integer id) {

   return new Link(string) {

   @Override

   public void onClick() {

   getRequestCycle().setRequestTarget(new 
ResourceStreamRequestTarget(new AbstractResourceStream() {

   private static final long serialVersionUID = 1L;

   private transient InputStream is = null;

   public void close() throws IOException {

   if (is != null) {

   is.close();

   }

   is = null;

   }

   public InputStream getInputStream() {

   if (is == null) {

   is = new ByteArrayInputStream(getInvoice(id));

   }

   return is;

   }

   }, Invoice # + id + .pdf));

   }

   };

   }


This way you won't have any serializableexception anymore.

Hope this help

noon wrote:

I had some similar issues and I solved them by upgrading the JasperReports
from 2.x to 3.0.0.




novotny wrote:
  

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 HashMapString, 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 

access ServletOutputStream in wicket

2009-01-15 Thread novotny

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
   
-- 
View this message in context: 
http://www.nabble.com/access-ServletOutputStream-in-wicket-tp21487704p21487704.html
Sent from the Wicket - User mailing list archive at Nabble.com.


-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Re: access ServletOutputStream in wicket

2009-01-15 Thread Igor Vaynberg
requestcycle.get().getresponse().getoutputstream()

-igor

On Thu, Jan 15, 2009 at 1:54 PM, novotny novo...@gridsphere.org 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

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


 -
 To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
 For additional commands, e-mail: users-h...@wicket.apache.org



-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Re: access ServletOutputStream in wicket

2009-01-15 Thread Sébastien Piller

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: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Re: access ServletOutputStream in wicket

2009-01-15 Thread novotny

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 HashMapString, 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 HashMapString,
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: users-unsubscr...@wicket.apache.org
 For additional commands, e-mail: users-h...@wicket.apache.org
 
 
 

-- 
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: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Re: access ServletOutputStream in wicket

2009-01-15 Thread noon

I had some similar issues and I solved them by upgrading the JasperReports
from 2.x to 3.0.0.




novotny wrote:
 
 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 HashMapString, 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 HashMapString,
 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: users-unsubscr...@wicket.apache.org
 For additional commands, e-mail: users-h...@wicket.apache.org
 
 
 
 
 

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


-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org