cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mansour Al Akeel <mansour.alak...@gmail.com>
Subject Re: using both Xalan and Saxon with C3
Date Thu, 06 Dec 2012 04:00:00 GMT
If I am not wrong, you can always change the implementation for the
xslt processor in the final WAR file by setting:

META-INF/services/javax.xml.transform.TransformerFactory

This is simple and clean.



On Wed, Dec 5, 2012 at 5:21 AM, Robby Pelssers <Robby.Pelssers@nxp.com> wrote:
> I did some investigation into this matter and the problem is in
> org.apache.cocoon.sax.component.XSLTTransformer
>
> It has two constructor methods:
>
>     public XSLTTransformer(final URL source) {
>         this(source, null);
>     }
>
> And
>
>     public XSLTTransformer(final URL source, final Map<String, Object> attributes)
{
>         super();
>         this.loadXSLT(source, attributes);
>     }
>
> So we can set attributes for the transformerfactory but not choose the implementation.
First of all I see something in the code that makes no sense to me:
>
>     /**
>      * A generic transformer factory to parse XSLTs.
>      */
>     private static final SAXTransformerFactory TRAX_FACTORY = createNewSAXTransformerFactory();
>
> this always falls back to
>
>     private static SAXTransformerFactory createNewSAXTransformerFactory() {
>         return (SAXTransformerFactory) TransformerFactory.newInstance();
>     }
>
>
> But on lines 148 to 157 I see following code.  If the attributes are not null and not
empty we STILL use createNewSAXTransformerFactory.  So the else block seems like a complete
waste here?!
>
>
>             // XSLT has to be parsed
>             SAXTransformerFactory transformerFactory;
>             if (attributes != null && !attributes.isEmpty()) {
>                 transformerFactory = createNewSAXTransformerFactory();
>                 for (Entry<String, Object> attribute : attributes.entrySet()) {
>                     transformerFactory.setAttribute(attribute.getKey(), attribute.getValue());
>                 }
>             } else {
>                 transformerFactory = TRAX_FACTORY;
>             }
>
> Ideally I would like to see a third constructor method which would allow us to set  the
factoryClassName of the
> Javax.xml.transform.TransformerFactory
>
> And default use:
>
> public static TransformerFactory newInstance(String factoryClassName, ClassLoader classLoader)
 throws TransformerFactoryConfigurationError
>
> We could from Cocoon side default set this to be "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"
if the factoryClassName is null or empty.
>
> Just thinking out loud here...
>
> Robby
>
>
> -----Original Message-----
> From: Robby Pelssers [mailto:Robby.Pelssers@nxp.com]
> Sent: Tuesday, December 04, 2012 2:21 PM
> To: dev@cocoon.apache.org; users@cocoon.apache.org
> Subject: using both Xalan and Saxon with C3
>
> Hi guys,
>
> Just wondering how I would configure a C3 project so I could use both Xalan and Saxon
from my sitemap and java
>
> I currently took the approach to just create a file META-INF/services/javax.xml.transform.TransformerFactory
> With following content:
> net.sf.saxon.TransformerFactoryImpl
>
> But I guess that restricts me to always use Saxon by default?
>
> Robby
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
> For additional commands, e-mail: users-help@cocoon.apache.org
>

Mime
View raw message