Thanks for the response. I had not post the Chart component to keep the mail 
shorter. But here it is;

public class Chart {
    @Inject
    private ComponentResources _resources;
    @Inject
    private TypeCoercer _coercer;
    /**list(array) of paired values(label & value): 
[String,Number,String,Number,...]*/
    @Parameter(required=true)
    private JFreeChart _chart;
    @Persist
    private JFreeChart _context;
    @Parameter(required=true)
    private int _width;
    @Parameter(required=true)
    private int _height;

    void beginRender(MarkupWriter writer)
    {
        _context=_chart;
        Object[] params = { new Integer(_width),
                            new Integer(_height) };
        
        //generate action link
        Link link = _resources.createEventLink("chart", params);
        Element img = writer.element("img", "src", link);
        _resources.renderInformalParameters(writer);
    }

    void afterRender(MarkupWriter writer)
    {
        writer.end();
    }

    public StreamResponse onChart(final int width, final int height/*, Object 
...rest*/){
        return new StreamResponse(){
            public String getContentType(){
                return "image/jpeg";
            }
            public InputStream getStream() throws IOException {
                BufferedImage image  = _context.createBufferedImage(width, 
height);
                ByteArrayOutputStream byteArray = new ByteArrayOutputStream() ;
                ChartUtilities.writeBufferedImageAsJPEG(byteArray, image) ;
                return new ByteArrayInputStream(byteArray.toByteArray());
            }
            public void prepareResponse(Response response){}
        };
    }
}
 

-----Original Message-----
From: Chuck Kring [mailto:cjkr...@pacbell.net] 
Sent: Thursday, August 12, 2010 11:32 PM
Cc: Tapestry users
Subject: Re: Stream redirection problem when using JFreeChart with Tapestry


  A few things:

1) You didn't include the chart component.  It's the thing that is generating 
the exception.

2) I would verify that  _context in getStream() is a valid JFreeChart 
and that ChartUtils.writeBufferedImageAsJpeg works correctly.   I 
suspect that a problem with the chart is causing getStream() to fail, which 
then causes the Chart onChart() event to not return a StreamResponse.

I generate charts in a slightly different manner than this example:

a) I use Chart as a base object and extend Chart for my individual chart types. 
 For example, I don't call <t:chart  t:chart=lineChart > but use MyLineChart 
extends Chart and call <t:myLinerChart nodeId="...">

b) The code to create the chart is in the derived class rather than the page 
class.  I don't pass the serialized chart object to the client as a context.  
Rather, the context contains the identity of the object to be charted - in my 
case a nodeId - and the chart is generated by the 
component rather than the page.   One benefit of this approach is it 
allows me to use the same chart on different pages.

c) I personally like PNG as an output format rather than JPEG.

Once again, make sure that the actual chart is working correctly.

Chuck

public class MyParticularChart extends Chart{

     private static final Logger logger = 
Logger.getLogger("gateway.components.MyParticularChart ");

     public StreamResponse onChart(short id, long timestamp)
     {
         BSU bsu = (BSU)Node.getByNodeId(id);
         ArrayList<Motecomm> list =
MotecommCache.getInstance().getList(bsu, getTimeService(), getSession());

         synchronized(ChartMutex.getMutex()){

             TimeSeriesCollection dataset = new TimeSeriesCollection();
             addBSUTimeSeries(bsu.getIdleVariance(), list, dataset);


             final JFreeChart chart = ChartFactory.createTimeSeriesChart(
                     null, // title
                     null,             // x-axis label
                     null,   // y-axis label
                     null,            // data
                     true,               // create legend?
                     false,               // generate tooltips?
                     false               // generate URLs?
             );

             XYItemRenderer r = chart.getXYPlot().getRenderer();
             r.setSeriesPaint(0, Color.darkGray);
             r.setSeriesPaint(1, Color.RED);
             r.setSeriesPaint(2, Color.GREEN);
             r.setSeriesPaint(3, Color.GRAY);

             XYPlot plot = chart.getXYPlot();
             plot.setRangeAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT);
             NumberAxis axis = new NumberAxis("");
             axis.setRange(new Range(0,4 * bsu.getIdleVariance()), true, false 
);
             plot.setRangeAxis(0, axis);
             plot.setDataset(1,dataset);

             return new StreamResponse(){
                 public String getContentType(){
                     return "image/png";
                 }
                 public InputStream getStream() throws IOException {
                     BufferedImage image  = chart.createBufferedImage(500, 175);
                     ByteArrayOutputStream byteArray = new
ByteArrayOutputStream() ;
                     ChartUtilities.writeBufferedImageAsPNG(byteArray,
image) ;
                     return new
ByteArrayInputStream(byteArray.toByteArray());
                 }
                 public void prepareResponse(Response response){}
             };
         }
     }

On 8/12/2010 11:53 AM, Ruksen Inanir wrote:
>
> Hi,
>     I placed the the exact same Chart.java from 
> http://wiki.apache.org/tapestry/Tapestry5HowToCreateGenericGraphComponent 
> under the package 'com.mycompany.myproject.webapp.components'. My tapestry 
> version is 5.1.0.5. And I use jfreechart 1.0.12.
>
> here is my \src\main\webapp\reports\LineChartPage.tml;
>
> <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
>      <body>
>          <h1>Line Chart</h1>
>          <t:chart width="200" height="150" chart="lineChart"/>
>      </body>
> </html>
>
> And below is the LineChartPage.java under package  
> com.mycompany.myproject.webapp.pages.reports;
>
> public class LineChartPage {
>      public JFreeChart getLineChart() {
>          XYSeries series = new XYSeries("Average Size");
>          series.add(20.0, 10.0);
>          series.add(40.0, 20.0);
>          series.add(70.0, 50.0);
>          XYDataset xyDataset = new XYSeriesCollection(series);
>          final JFreeChart chart = ChartFactory.createXYLineChart
>                  ("Sample XY Chart",  // Title
>                          "Height",           // X-Axis label
>                          "Weight",           // Y-Axis label
>                          xyDataset,          // Dataset
>                          PlotOrientation.HORIZONTAL,
>                          true,                // Show legend
>                          true,                            // Tooltips
>                          true                             // Urls
>                  );
>
>          return chart;
>      }
> }
>
> Everything seems to be right but I get the exception; 20:39:44,240 
> ERROR [RequestExceptionHandler] Processing of request failed with uncaught 
> exception: Sanity check - neither a stream response nor a redirect response 
> was generated for this action request.
> java.lang.IllegalStateException: Sanity check - neither a stream response nor 
> a redirect response was generated for this action request.
>          at 
> org.apache.tapestry5.internal.services.ImmediateActionRenderResponseFilter.handle(ImmediateActionRenderResponseFilter.java:63)
>          at 
> $ComponentEventRequestHandler_12a675b8084.handle($ComponentEventRequestHandler_12a675b8084.java)
>          at 
> org.apache.tapestry5.internal.services.AjaxFilter.handle(AjaxFilter.java:42)
>          at 
> $ComponentEventRequestHandler_12a675b8084.handle($ComponentEventRequestHandler_12a675b8084.java)
>          at 
> org.apache.tapestry5.upload.internal.services.UploadExceptionFilter.handle(UploadExceptionFilter.java:75)
>          at 
> $ComponentEventRequestHandler_12a675b8084.handle($ComponentEventRequestHandler_12a675b8084.java)
>          at 
> org.apache.tapestry5.services.TapestryModule$36.handle(TapestryModule.java:2164)
>          at 
> $ComponentEventRequestHandler_12a675b8084.handle($ComponentEventRequestHandler_12a675b8084.java)
>          at 
> $ComponentEventRequestHandler_12a675b7fca.handle($ComponentEventRequestHandler_12a675b7fca.java)
>          at 
> org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminat
> or.handleComponentEvent(ComponentRequestHandlerTerminator.java:43)
>
>
>
> -----Original Message-----
> From: Chuck Kring [mailto:cjkr...@pacbell.net]
> Sent: Tuesday, August 10, 2010 8:28 PM
> To: users@tapestry.apache.org
> Subject: Re: Stream redirection problem when using JFreeChart with 
> Tapestry
>
>
>    Hi.
>
> I use JfreeChart extensively with T 5.0.1.5 and I'm very happy with
> it.   Most likely your exception is caused by a bug in your .tml or the
> underlying class.     If you could reduce the template and the class to
> the minimum size that still shows the bug and post both to a follow up email, 
> somebody on the list will probably be able to help you.
>
> Chuck
>
> On 8/10/2010 2:10 AM, Ruksen Inanir wrote:
>> Hi,
>>     I want to display a line-chart for my application. I tested 
>> chenille-kit chart component it worked quite good, but it does not 
>> support Dates on the x-axis. I want to to draw time-series on the 
>> chart. So I decided to use JFreeChart. The link 
>> http://wiki.apache.org/tapestry/Tapestry5HowToCreateGenericGraphCompo
>> n ent describes the usage of JFreeChart with Tapestry. I used to code 
>> as it is, I put the Chart.java under components package, Prepared the 
>> LineChartPage.java and LineChartPage.tml. The page rendered, 
>> displayed but the chart is not displayed. When I look at the Jboss 
>> console I saw the "neither a stream response nor a redirect response 
>> was generated for this action request." exception;
>>
>> [org.apache.tapestry5.services.TapestryModule.RequestExceptionHandler] 
>> Processing of request failed with uncaught exception: Sanity check - neither 
>> a stream response nor a redirect response was generated for this action 
>> request.
>> java.lang.IllegalStateException: Sanity check - neither a stream response 
>> nor a redirect response was generated for this action request.
>>      at 
>> org.apache.tapestry5.internal.services.ImmediateActionRenderResponseFilter.handle(ImmediateActionRenderResponseFilter.java:63)
>>      at 
>> $ComponentEventRequestHandler_12a5b36106e.handle($ComponentEventRequestHandler_12a5b36106e.java)
>>      at 
>> org.apache.tapestry5.internal.services.AjaxFilter.handle(AjaxFilter.java:42)
>>      at 
>> $ComponentEventRequestHandler_12a5b36106e.handle($ComponentEventRequestHandler_12a5b36106e.java)
>>      at 
>> org.apache.tapestry5.upload.internal.services.UploadExceptionFilter.handle(UploadExceptionFilter.java:75)
>>      at 
>> $ComponentEventRequestHandler_12a5b36106e.handle($ComponentEventRequestHandler_12a5b36106e.java)
>>      at 
>> org.apache.tapestry5.services.TapestryModule$36.handle(TapestryModule.java:2164)
>>      at 
>> $ComponentEventRequestHandler_12a5b36106e.handle($ComponentEventRequestHandler_12a5b36106e.java)
>>      at 
>> $ComponentEventRequestHandler_12a5b361006.handle($ComponentEventRequestHandler_12a5b361006.java)
>>      at 
>> org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handleComponentEvent(ComponentRequestHandlerTerminator.java:43)
>>      at 
>> $ComponentRequestHandler_12a5b360ff8.handleComponentEvent($ComponentRequestHandler_12a5b360ff8.java)
>>      at
>> org.apache.tapestry5.internal.services.ComponentEventDispatcher.dispa
>> t
>> ch(ComponentEventDispatcher.java:46)
>>
>> Did anyone encountered this exception? Or do you have any idea of the cause? 
>> Or a better solution to display time-series charts, which contain time 
>> information on x-axis.
>>
>> Regars,
>> Ruksen
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>
>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>

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


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

Reply via email to