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
>

Reply via email to