cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gelo1234 <gelo1...@gmail.com>
Subject Re: How to configure TraxProcessor in 2.2?
Date Wed, 11 Dec 2019 18:45:58 GMT
Wow, you Haka-Smart guy :) No need for a Saxon commercial licence anymore
with Saxon-HE :)
That was what we missed with new Saxon-HE :) Thanks! Good Job!
With C3 (Cocoon 3.0) you can use Java-only code with no cocoon-sitemap
config dependency :)

Such a little thing and I get a big smile on my mouth :)
Man, you made my day!!!

Greetings,
Greg



śr., 11 gru 2019 o 14:59 Mark H. Wood <mwood@iupui.edu> napisał(a):

> On Tue, Dec 10, 2019 at 11:21:09PM +0100, gelo1234 wrote:
> > I don't think this is the proper way to do this and if it's possible at
> > all. Extension functions are only available in commercial releases of
> Saxon
> > (PE and EE).
> > I'm afraid they are not available in open-source Saxon-HE. We were trying
> > to use Saxon-HE with Cocoon 3.0 and extension-functions without success.
> > You either have to use OLDER release of Saxon or pay for the license.
>
> No.  Before trying this in Cocoon, I wrote a tiny test application,
> and it succeeded in defining integrated extension functions.
>
> https://github.com/mwoodiupui/confman-demo
>
> What one cannot do in Saxon-HE is register integrated extension
> functions using a configuration file, as one can in -PE or -EE.  This
> is why I need to do configuration in Java.
>
> > wt., 10 gru 2019 o 21:19 Mark H. Wood <mwood@iupui.edu> napisał(a):
> >
> > > On Tue, Dec 10, 2019 at 12:10:41AM +0100, gelo1234 wrote:
> > > > 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.
> > >
> > > Because, as I said, I need to configure Saxon, and Saxon-HE can only
> > > be configured programmatically.  So, if I want to register an
> > > Integrated Extension Function, I have to gain access to the
> > > TransformerFactory being created somewhere in the bowels of Cocoon,
> > > get its Configuration, and call #registerExtensionFunction on that.
> > >
> > > To do this, I've created a class which extends TransformerFactoryImpl,
> > > added a @PostConstruct method (which Spring should call after
> > > instantiating the bean) to do the registration, and now I'm trying to
> > > tell Cocoon to use my factory instead of the one that
> > > javax.xml.transform.TransformerFactory will conjure up by default out
> > > of the service provider framework when Saxon is present.
> > >
> > > > https://mrhaki.blogspot.com/2008/09/use-saxon-in-cocoon-22.html
> > >
> > > I've seen that.  So far it hasn't helped.
> > >
> > > > Greetings,
> > > > Greg
> > > >
> > > >
> > > > pon., 9 gru 2019 o 23:02 Mark H. Wood <mwood@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 (<mwood@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
> > > > >
> > >
> > > --
> > > 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
>

Mime
View raw message