Bruce,

Apologies for my short answers of yesterday: texting from a mobile device
is not very confortable.  Would this class

https://github.com/reiern70/antilia-bits/blob/master/content-iframe/src/main/java/com/antilia/iframe/DocumentInlineFrame.java

be of some help for your use case?


On Fri, Mar 13, 2015 at 11:03 PM, 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]
>
>


-- 
Regards - Ernesto Reinaldo Barreiro

Reply via email to