Re: How to configure TraxProcessor in 2.2?

2019-12-09 Thread gelo1234
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  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.
> >
> >  > value='org.dspace.saxon.ConfigurableTransformerFactory'/>
> >
> > IIRC you should change it to:
> > 
> >   
> > 
> >
> > 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 
>  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 ()
> 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:
> > >
> > > 
> > > 
> > >> > class="org.apache.cocoon.components.xslt.TraxProcessor">
> > > 
> > >  > >
> value="org.dspace.saxon.ConfigurableTransformerFactory"/>
> > >   
> > > 
> > >
> > > I also tried copying it to WEB-INF/cocoon and it didnt' seem to work
> > > there either.
> > >
> > > I do have  and  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:
> > >
> > >  > >   class='org.apache.cocoon.components.xslt.TraxProcessor'
> > >   init-method='initialize'
> > >   destroy-method='dispose'>
> > >   
> > >> >
>  value='org.dspace.saxon.ConfigurableTransformerFactory'/>
> > > 
> > >
> > > 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 

Re: How to configure TraxProcessor in 2.2?

2019-12-09 Thread Mark H. Wood
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.
> 
>  value='org.dspace.saxon.ConfigurableTransformerFactory'/>
> 
> IIRC you should change it to:
> 
>   
> 
> 
> 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 
 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 () 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:
> >
> > 
> > 
> >> class="org.apache.cocoon.components.xslt.TraxProcessor">
> > 
> >  >value="org.dspace.saxon.ConfigurableTransformerFactory"/>
> >   
> > 
> >
> > I also tried copying it to WEB-INF/cocoon and it didnt' seem to work
> > there either.
> >
> > I do have  and  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:
> >
> >  >   class='org.apache.cocoon.components.xslt.TraxProcessor'
> >   init-method='initialize'
> >   destroy-method='dispose'>
> >   
> >> value='org.dspace.saxon.ConfigurableTransformerFactory'/>
> > 
> >
> > 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