Mark, Why do you need a Custom XSLT Processor other than Saxon actually?? Saxon should do the right thing. Why wrapping it inside any "upper-level" Transformer? It's getting kinda weird. You can always add a new Java class to standard Cocoon Processors/Transformers.
https://mrhaki.blogspot.com/2008/09/use-saxon-in-cocoon-22.html Greetings, Greg pon., 9 gru 2019 o 23:02 Mark H. Wood <mw...@iupui.edu> napisał(a): > On Thu, Dec 05, 2019 at 04:13:08PM +0100, Javier Puerto wrote: > > I recommend you to use the Spring configuration. I never had this > > requirement before but by the error message and the configuration > fragment > > that you have sent the NPE is caused because you are not passing an > > instance of "org.dspace.saxon.ConfigurableTransformerFactory", you are > > passing a String instead. > > > > <property name='transformerFactory' > > value='org.dspace.saxon.ConfigurableTransformerFactory'/> > > > > IIRC you should change it to: > > <property name='transformerFactory'> > > <bean class="org.dspace.saxon.ConfigurableTransformerFactory"/> > > </property> > > > > The attribute "value" is for literal values. You can also define the bean > > with an ID and then use the attribute "ref" with the ID of the bean. > > I hope that helps. > > It would have made more sense for this to take a bean reference, but > the Javadoc for TraxProcessor says that setTransformerFactory() takes > a String argument. That seems to be correct: when I change it to a > reference, I get: > > 09-Dec-2019 15:12:39.128 SEVERE [localhost-startStop-24] > org.apache.catalina.cor > e.StandardContext.listenerStart Exception sending context initialized > event to l > istener instance of class > [org.springframework.web.context.ContextLoaderListener > ] > org.springframework.beans.factory.BeanCreationException: Error > creating > bean with name 'org.apache.excalibur.xml.xslt.XSLTProcessor/saxon' defined > in Se > rvletContext resource [/WEB-INF/spring/applicationContext.xml]: > Initialization o > f bean failed; nested exception is > org.springframework.beans.ConversionNotSuppor > tedException: Failed to convert property value of type > 'org.dspace.saxon.Configu > rableTransformerFactory' to required type 'java.lang.String' for property > 'trans > formerFactory'; nested exception is java.lang.IllegalStateException: > Cannot conv > ert value of type [org.dspace.saxon.ConfigurableTransformerFactory] to > required > type [java.lang.String] for property 'transformerFactory': no matching > editors o > r conversion strategy found > > When I change it back to the literal name of the class, the > webapp. starts normally. But it still errors out when it tries to run > the XSLT transformer. > > It begins to look as though one can't really wire up TraxProcessor > using Spring. (By this I mean: using Spring's normal <bean> > <property> etc.) I'm guessing that it blows up because nothing has > called #parameterize(Parameters), because #parameterize() knows how > the properties must be set up and makes sure they are all sensible, > and thus something was left unset. > > I tried adding > > log4j.logger.org.apache.excalibur = DEBUG > log4j.logger.org.apache.avalon = DEBUG > > to our logging config. but it made no useful difference in the > output. I cannot see what paths are actually being consulted for > Cocoon component configuration, but it seems that none of the places > I've put my .xconf is one of them. > > > El mié., 4 dic. 2019 a las 22:46, Mark H. Wood (<mw...@iupui.edu>) > escribió: > > > > > I'm using Cocoon 2.2. I need to pass a custom XSLT transformer > > > factory (that wraps Saxon's to configure it) to TraxProcessor, and the > > > advice I've found in several places around the Web doesn't seem to be > > > working: my factory class never gets instantiated. > > > > > > I've got a file META-INF/cocoon/avalon/cocoon-core-saxon-xslt.xconf: > > > > > > <?xml version="1.0" encoding="UTF-8"?> > > > <components> > > > <component role="org.apache.excalibur.xml.xslt.XSLTProcessor/saxon" > > > class="org.apache.cocoon.components.xslt.TraxProcessor"> > > > <parameter name="use-store" value="true"/> > > > <parameter name="transformer-factory" > > > > value="org.dspace.saxon.ConfigurableTransformerFactory"/> > > > </component> > > > </components> > > > > > > I also tried copying it to WEB-INF/cocoon and it didnt' seem to work > > > there either. > > > > > > I do have <configurator:settings/> and <avalon:bridge/> in the Spring > > > config. > > > > > > Is there some way to debug component configuration and see if the file > > > is even being looked for (and where *is* configuration looking)? The > > > Cocoon site directs me to Excalibur, which directs me to Avalon, which > > > says that Avalon is wound up and directs me back to Excalibur.... > > > > > > > > > > > > I've also tried to configure the thing using Spring: > > > > > > <bean name='org.apache.excalibur.xml.xslt.XSLTProcessor/saxon' > > > class='org.apache.cocoon.components.xslt.TraxProcessor' > > > init-method='initialize' > > > destroy-method='dispose'> > > > <!--property name='use-store' value='true'/--> > > > <property name='transformerFactory' > > > > value='org.dspace.saxon.ConfigurableTransformerFactory'/> > > > </bean> > > > > > > but so far I'm missing something: TraxProcessor.sourceToSAX throws an > > > NPE. I'm probably not setting the parameters correctly -- there isn't > > > a setter for use-store at all, for example. > > > > > > I've found any number of pages that tell me Avalon configuration is > > > being replaced by Spring, but nothing practical on how to convert > > > Avalon configuration (such as the first sample above) to Spring, or > > > even how to write fresh Spring configuration for Cocoon components. > > > It would be nice to know how to do this even if I wind up using the > > > Avalon approach with the present task. > > > > > > -- > > > Mark H. Wood > > > Lead Technology Analyst > > > > > > University Library > > > Indiana University - Purdue University Indianapolis > > > 755 W. Michigan Street > > > Indianapolis, IN 46202 > > > 317-274-0749 > > > www.ulib.iupui.edu > > > > > -- > Mark H. Wood > Lead Technology Analyst > > University Library > Indiana University - Purdue University Indianapolis > 755 W. Michigan Street > Indianapolis, IN 46202 > 317-274-0749 > www.ulib.iupui.edu >