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.pelss...@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.pelss...@nxp.com]
> Sent: Tuesday, December 04, 2012 2:21 PM
> To: d...@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-unsubscr...@cocoon.apache.org
> For additional commands, e-mail: users-h...@cocoon.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@cocoon.apache.org
For additional commands, e-mail: users-h...@cocoon.apache.org

Reply via email to