Jeremias, Thanks for the quick response. Your explanation, along with a clear understanding of the webMethods classloader hierarchy, were key in helping solve my issues. All is working as expected.
On Wed, 2011-07-06 at 08:27 +0200, Jeremias Maerki wrote: > On 06.07.2011 05:17:54 Brandon Youkstetter wrote: > > I put together a service that uses FOP to render PDF using FOP 1.0 on > > java 6. All worked perfectly when running in eclipse on my development > > environment. However, my requirements are for this service to run in a > > webMethods (8.2) IDE workflow (also runs on Java 6). > > > > I setup the java service in webMethods placing the required libraries > > into directory that is loaded by the webMethods classloaders, but > > immediately ran into the following exception: > > > > java.lang.UnsupportedOperationException: Don't know how to handle > > "application/pdf" as an output format. Neither an FOEventHandler, nor a > > Renderer could be found for this output format. > > > > My guess is this problem stems from a failure to read > > the /META-INF/services/ properties files due to the way the webMethods > > classloaders are loading things up (please let me know if this > > assumption seems faulty). > > No, that is the most likely explanation. > > > After searching through the mailing lists, I found a thread that seemed > > to discuss a similar issue. The submitter was having difficulty in lotus > > notes. This thread described a solution for manually configuring the > > PDFRenderer which I followed. > > > > Specifically, I configured my fop factory with all the element mappings > > found in /META-INF/services/org.apache.fop.fo.ElementMapping like so: > > > > fopFactory = FopFactory.newInstance(); > > fopFactory.addElementMapping(new FOElementMapping()); > > fopFactory.addElementMapping(new SVGElementMapping()); > > fopFactory.addElementMapping(new BatikExtensionElementMapping()); > > fopFactory.addElementMapping(new ExtensionElementMapping()); > > fopFactory.addElementMapping(new InternalElementMapping()); > > fopFactory.addElementMapping(new OldExtensionElementMapping()); > > fopFactory.addElementMapping(new XMPElementMapping()); > > fopFactory.addElementMapping(new RDFElementMapping()); > > fopFactory.addElementMapping(new PSExtensionElementMapping()); > > fopFactory.addElementMapping(new AFPElementMapping()); > > fopFactory.addElementMapping(new PCLElementMapping()); > > Well, that's just one of the extension points. With that alone, you > don't have: the Renderers, the IFDocumentHandlers, the FOEventHandlers, the > ImageHandlers, the ContentHandlerFactories, etc. etc. And these are only > the extension points in FOP, not the ones in XML Graphics Commons. This > work-around may work if you somehow need to integrate a single plug-in > in some specific way, but that is just an awkward process. I recommend > to try and find a way to make the normal mechanism work. After all, it's > a standard mechanism of Java which should work in a traditional > hierarchical class loader setup. It quickly fails in an OSGi environment > where you have more of a network-oriented setup. Maybe webMethods does > something similar. I have no idea. > > > Then I created a user agent to overwrite the Renderer like this: > > > > FOUserAgent ua = factory.newFOUserAgent(); > > PDFRenderer pdfRenderer = new PDFRenderer(); > > pdfRenderer.setUserAgent(ua); > > ua.setRendererOverride(pdfRenderer); > > fop = factory.newFop(MimeConstants.MIME_PDF, ua, output); > > > > This setup got me past the UnsupportedOperationException in the > > RendererFactory and produced a result. However, the output is a 15 byte, > > seemingly invalid result which Ive attached. > > It would help if you gave a little more information (stack trace) on the > UnsupportedOperationException. From the attached PDF, I can tell that > the PDFRenderer started working but then probably got interrupted by an > exception, probably that UnsupportedOperationException. > > > What am I missing? Why am I getting this strange result? Any help would > > be greatly appreciated. > > A quick search reveals a document on webMethods class loaders: > http://communities.softwareag.com/ecosystem/communities/public/Developer/webmethods/downloads/ESBandIntegration/ISClassLoading > > Maybe that helps you set up everything correctly. The FOP, Batik and XML > Graphics Commons JAR should all be setup so they are loaded by the same > class loader. The Services class in XML Graphics Commons can only to > "see" the JARs in the same class loader or in any of the parent/ancestor > class loaders. In the worst case, you have to think about setting up > your own class loader. You could get some inspiration for that from > here: > http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/cli/Main.java?view=markup > > HTH > > Jeremias Maerki > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > -- Brandon Youkstetter Software Engineer - Partnet Inc. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
