Please create a quickstart application and attach it to JIRA. Thanks! Martin Grigorov Freelancer, available for hire! Wicket Training and Consulting https://twitter.com/mtgrigorov
On Sat, Mar 14, 2015 at 12:03 AM, Bruce Lombardi <[email protected]> wrote: > The problem (which I think is a bug) is in the way the url is produced. > > The line > String url = (String)RequestCycle.get().urlFor(resourceReference, > null); > > Produces the url to use for the resource ref. > > In the non-working version it returns: > > ../resource/org.apache.wicket.Application/pdfProducer > > If I set a breakpoint just after this line and I manually remove the first > dot in the string using the debugger to get: > > ./resource/org.apache.wicket.Application/pdfProducer > > and then let the code continue to run, my pdf appears correctly. > > The debug trace also shows the correct uri. > > 2015-03-13 17:59:30,292 DEBUG - ServletWebRequest - Calculating > context relative path from: context path '', filterPrefix '', uri > '/wicket/resource/org.apache.wicket.Application/pdfProducer' > 2015-03-13 17:59:30,298 DEBUG - ServletWebRequest - Calculating > context relative path from: context path '', filterPrefix '', uri > '/wicket/resource/org.apache.wicket.Application/pdfProducer' > 2015-03-13 17:59:30,301 DEBUG - ServletWebRequest - Calculating > context relative path from: context path '', filterPrefix '', uri > '/wicket/resource/org.apache.wicket.Application/pdfProducer' > 2015-03-13 17:59:30,305 DEBUG - CompoundRequestMapper - One > compatible mapper found for URL > 'wicket/resource/org.apache.wicket.Application/pdfProducer' -> 'Mapper: > org.apache.wicket.core.request.mapper.ResourceReferenceMapper; Score: 1' > > Maybe someone knows how to fix this? I could strip the first dot as a > workaround in the mean time. > > Bruce > > -----Original Message----- > From: Martin Grigorov [mailto:[email protected]] > Sent: Friday, March 13, 2015 4:17 PM > To: [email protected] > Subject: Re: PDF viewed in panel via ResourceReference works in 6.12 but > not in 6.13 > > Hi, > > This is your code: > > WebDocsSession session = (WebDocsSession)getSession(); final byte[] pdf > = session.getPdf(); if(pdf == null) System.out.println("PdfPanel > session.getPdf returned null"); PdfResourceProducer pdfResourceProducer = > new PdfResourceProducer(pdf); return pdfResourceProducer; > > > There is nothing Component specific here. Except #getSession(), but you > can use Session.get() and cast it. It is the same. > > If you need the component to be able to generate the PDF bytes then you > need to implement IResourceListener interface. In #onResourceRequested() > you can generate the bytes and write them to the Response: > getResponse().write(byte[]). > The change you need to do is in #urlFor(): > urlFor(ResourceListener.INTERFACE, parameters)) > > > Martin Grigorov > Freelancer, available for hire! > Wicket Training and Consulting > https://twitter.com/mtgrigorov > > On Fri, Mar 13, 2015 at 8:15 PM, Bruce Lombardi <[email protected]> > wrote: > > > Martin, > > > > I'm looking into mounting the resource but there is something that I > > don't understand. > > Currently I am creating the resource in my panel and passing the pdf I > > want to display into the constructor of the resource. If I mount the > > resource, how do I provide it with the dynamically generated pdf? I > > don't even see a way of getting a hold of the resourceReference object > > created and mounted in the WebApplication init() method. Perhaps I > > need to also register it as an application-shared resource, then > > access it in my panel constructor and add the pdf there? > > > > Bruce > > > > -----Original Message----- > > From: Martin Grigorov [mailto:[email protected]] > > Sent: Friday, March 13, 2015 12:53 PM > > To: [email protected] > > Subject: Re: PDF viewed in panel via ResourceReference works in 6.12 > > but not in 6.13 > > > > Hi, > > > > I think I see what happens. > > The ResRef is created as a local variable to create the url and then > > discarded. > > Wicket has something called ResourceReferenceRegistry. When a ResRef > > is used to create an url to it it is automatically registered in the > registry. > > It seems after 6.13 there is no such auto-registration for your ResRef > > for some reason. > > You should have some WARNs in the logs. > > > > I see nothing component specific in your ResRef so I'd #mountResource() > it. > > This way it will be always available. > > > > > > Martin Grigorov > > Freelancer, available for hire! > > Wicket Training and Consulting > > https://twitter.com/mtgrigorov > > > > On Fri, Mar 13, 2015 at 6:40 PM, Bruce Lombardi <[email protected]> > > wrote: > > > > > I have a PdfViewer page that contains a panel that displays a > > > dynamically generated PDF using a resource reference. This works > > > fine in Wicket 6.12.0, but when I upgrade to 6.13.0 it stops working > > > (just changed Maven dependency > > > - no code changes). No errors are displayed and the html is > > > generated exactly as it is with 6.12, but the pdf does not show up in > the page. > > > > > > By setting a breakpoint in Eclipse I have determined that code in > > > the resource that produces the response (newResourceResponse) is > > > never called in 6.13. After migrating to the latest version (6.19) I > > > still get the problem. > > > I've looked at the release notes for version 6.13 and see some > > > changes related to IResource but nothing that looks related to this > problem. > > > > > > I'm hoping someone has seen something similar. Here is some of the > > > relevant > > > code: > > > > > > PdfViewer .html - just has reference to panel > > > > > > <div wicket:id="pdfPanel"></div> > > > > > > > > > > > > PdfPane.html - just has object reference > > > > > > Raw HTML > > > > > > <object wicket:id="pdf" data="" border="1" width="80%" > > > height="80%"></object> > > > > > > > > > > > > Generated HTML - seen with view source in browser > > > > > > <object > > data="./resource/org.apache.wicket.Application/pdfProducer" > > > > > > border="1" width="80%" height="80%"></object> > > > > > > > > > > > > PdfPanel.java - has setup for resource reference > > > > > > public class PdfPanel extends Panel { > > > > > > > > > > > > private static final long serialVersionUID = 1L; > > > > > > > > > > > > public PdfPanel(String id) { > > > > > > super(id); > > > > > > > > > > > > ResourceReference resourceReference = new > > > ResourceReference( > > > > > > "pdfProducer") { > > > > > > private static final long serialVersionUID = > > > 1L; > > > > > > > > > > > > @Override > > > > > > public IResource getResource() { > > > > > > WebDocsSession session = > > > (WebDocsSession)getSession(); > > > > > > > > > > > > final byte[] pdf = session.getPdf(); > > > > > > > > > > > > if(pdf == null) > > > > > > System.out.println("PdfPanel session.getPdf returned null"); > > > > > > > > > > > > PdfResourceProducer pdfResourceProducer = > > > > > > new PdfResourceProducer(pdf); > > > > > > > > > > > > return pdfResourceProducer; > > > > > > } > > > > > > }; > > > > > > > > > > > > String url = > > > (String)RequestCycle.get().urlFor(resourceReference, > > > null); > > > > > > > > > > > > MarkupContainer wmc = new WebMarkupContainer("pdf"); > > > > > > wmc.add(new AttributeModifier("data", url)); > > > > > > add(wmc); > > > > > > } > > > > > > > > > > > > PdfProducer.java - implements the Resource > > > > > > public class PdfResourceProducer extends > > > AbstractResource { > > > > > > > > > > > > private static final long serialVersionUID = > > > -2245331056747467763L; > > > > > > final byte[] pdfByteArray; > > > > > > > > > > > > > > > > > > public PdfResourceProducer(byte[] pdfByteArray) { > > > > > > super(); > > > > > > this.pdfByteArray = pdfByteArray; > > > > > > if(pdfByteArray == null) { > > > > > > System.out.println("PdfResourceProducer > > > constructor called with > > > > > > null byte array."); > > > > > > } > > > > > > } > > > > > > > > > > > > @Override > > > > > > protected ResourceResponse newResourceResponse(Attributes > > > attributes) > > > { > > > > > > ResourceResponse resourceResponse = new > > > ResourceResponse(); > > > > > > resourceResponse.setContentType("application/pdf"); > > > > > > // resourceResponse.setTextEncoding("utf-8"); > > > > > > > > > > > > > > > resourceResponse.setContentLength((int)pdfByteArray.length); > > > > > > > > > > > > resourceResponse.disableCaching(); //do not allow > > > resource to be cached. > > > > > > > > > > > > resourceResponse.setWriteCallback(new WriteCallback() > > > { > > > > > > @Override > > > > > > public void writeData(Attributes attributes) > > > throws IOException { > > > > > > try { > > > > > > OutputStream outputStream = > > > attributes.getResponse() > > > > > > .getOutputStream(); > > > > > > outputStream.write(pdfByteArray); > > > > > > outputStream.flush(); > > > > > > } catch (IOException e) { > > > > > > throw new WicketRuntimeException( > > > > > > "Problems writing > > > pdf to response..."); > > > > > > } > > > > > > } > > > > > > }); > > > > > > > > > > > > return resourceResponse; > > > > > > } > > > > > > > > > > > > Bruce > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > 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] > >
