org.mule.module.xml.transformer
Class XsltTransformer

java.lang.Object
  extended by org.mule.transformer.AbstractTransformer
      extended by org.mule.module.xml.transformer.AbstractXmlTransformer
          extended by org.mule.module.xml.transformer.XsltTransformer
All Implemented Interfaces:
MuleContextAware, Initialisable, NamedObject, BaseTransformer, Transformer

public class XsltTransformer
extends AbstractXmlTransformer
implements MuleContextAware

XsltTransformer performs an XSLT transform on a DOM (or other XML-ish) object.

This transformer maintains a pool of Transformer objects to speed up processing of concurrent requests. The pool can be configured using setMaxIdleTransformers(int).

Parameter can also be set as part of the transformation context and these can be mapped to conent in the current message using property extractors or can be fixed values.

For example, the current event's message has a property named "myproperty", also you want to generate a uuid as a parameter. To do this you can define context properties that can provide an expression to be evaluated on the current message.

Example Configuration:

  <mxml:xslt-transformer name="MyXsltTransformer" xslFile="myXslFile.xsl"&gt
      <context-property name="myParameter" value="#[head:myproperty]"/&gt
      <context-property name="myParameter2" value="#[function:uuid]"/&gt
  </mxml:xslt-transformer&gt
 

The 'header' expression pulls a header from the current message and 'function' can execute a set of arbitrary functions. You can also pass in static values by ommitting the expression prefix '#['.

In addition to being able to pass in an XSLT file you can also define templates inline. For example -

  <mxml:xslt-transformer name="MyXsltTransformer"&gt
      <mxml:xslt-text&gt
          
 

</mxml:xslt-text&gt


Nested Class Summary
protected  class XsltTransformer.DefaultErrorListener
           
protected  class XsltTransformer.PooledXsltTransformerFactory
           
 
Nested classes/interfaces inherited from class org.mule.module.xml.transformer.AbstractXmlTransformer
AbstractXmlTransformer.ResultHolder
 
Field Summary
protected  GenericObjectPool transformerPool
           
 
Fields inherited from class org.mule.transformer.AbstractTransformer
DEFAULT_TRUNCATE_LENGTH, endpoint, logger, name, returnClass, sourceTypes
 
Fields inherited from interface org.mule.api.lifecycle.Initialisable
PHASE_NAME
 
Constructor Summary
XsltTransformer()
           
 
Method Summary
 Object doTransform(Object src, String encoding)
          Transform, using XSLT, a XML String to another String.
protected  void doTransform(String encoding, Source sourceDoc, Result result)
           
protected  Object evaluateTransformParameter(String name, Object value)
          Returns the value to be set for the parameter.
 Map getContextProperties()
          Gets the parameters to be used when applying the transformation
protected  Object getDelayedResult(String encoding, Source sourceDoc)
           
 int getMaxActiveTransformers()
           
 int getMaxIdleTransformers()
           
protected  StreamSource getStreamSource()
          Returns the StreamSource corresponding to xslFile
 URIResolver getUriResolver()
           
 String getXslFile()
           
 String getXslt()
           
 String getXslTransformerFactory()
          Returns the name of the currently configured javax.xml.transform.Transformer factory class used to create XSLT Transformers.
 void initialise()
          Template method where deriving classes can do any initialisation after the properties have been set on this transformer
 void setContextProperties(Map contextProperties)
          Sets the parameters to be used when applying the transformation
 void setMaxActiveTransformers(int maxActiveTransformers)
          Sets the the current maximum number of active transformer objects allowed in the pool
 void setMaxIdleTransformers(int maxIdleTransformers)
          Sets the the current maximum number of idle transformer objects allowed in the pool
 void setMuleContext(MuleContext context)
           
 void setUriResolver(URIResolver uriResolver)
           
 void setXslFile(String xslFile)
           
 void setXslt(String xslt)
           
 void setXslTransformerFactory(String xslTransformerFactory)
          Configures the javax.xml.transform.Transformer factory class
 
Methods inherited from class org.mule.module.xml.transformer.AbstractXmlTransformer
convertToBytes, convertToText, convertToText, getOutputEncoding, getResultHolder, getXMLInputFactory, getXMLOutputFactory, isUseStaxSource, setOutputEncoding, setUseStaxSource, setXMLInputFactory, setXMLOutputFactory, writeToStream
 
Methods inherited from class org.mule.transformer.AbstractTransformer
checkReturnClass, generateTransformerName, getEndpoint, getName, getReturnClass, getSourceTypes, isAcceptNull, isConsumed, isIgnoreBadInput, isSourceTypeSupported, isSourceTypeSupported, registerSourceType, setEndpoint, setIgnoreBadInput, setName, setReturnClass, toString, transform, unregisterSourceType
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

transformerPool

protected final GenericObjectPool transformerPool
Constructor Detail

XsltTransformer

public XsltTransformer()
Method Detail

initialise

public void initialise()
                throws InitialisationException
Description copied from class: AbstractTransformer
Template method where deriving classes can do any initialisation after the properties have been set on this transformer

Specified by:
initialise in interface Initialisable
Overrides:
initialise in class AbstractTransformer
Throws:
InitialisationException - if a fatal error occurs causing the Mule instance to shutdown
RecoverableException - if an error occurs that can be recovered from

setMuleContext

public void setMuleContext(MuleContext context)
Specified by:
setMuleContext in interface MuleContextAware

doTransform

public Object doTransform(Object src,
                          String encoding)
                   throws TransformerException
Transform, using XSLT, a XML String to another String.

Specified by:
doTransform in class AbstractTransformer
Parameters:
src - The source XML (String, byte[], DOM, etc.)
Returns:
The result in the type specified by the user
Throws:
TransformerException

getDelayedResult

protected Object getDelayedResult(String encoding,
                                  Source sourceDoc)

doTransform

protected void doTransform(String encoding,
                           Source sourceDoc,
                           Result result)
                    throws Exception
Throws:
Exception

getXslTransformerFactory

public String getXslTransformerFactory()
Returns the name of the currently configured javax.xml.transform.Transformer factory class used to create XSLT Transformers.

Returns:
a TransformerFactory class name or null if none has been configured

setXslTransformerFactory

public void setXslTransformerFactory(String xslTransformerFactory)
Configures the javax.xml.transform.Transformer factory class

Parameters:
xslTransformerFactory - the name of the TransformerFactory class to use

getXslFile

public String getXslFile()
Returns:
Returns the xslFile.

setXslFile

public void setXslFile(String xslFile)
Parameters:
xslFile - The xslFile to set.

getXslt

public String getXslt()

setXslt

public void setXslt(String xslt)

getUriResolver

public URIResolver getUriResolver()

setUriResolver

public void setUriResolver(URIResolver uriResolver)

getStreamSource

protected StreamSource getStreamSource()
                                throws InitialisationException
Returns the StreamSource corresponding to xslFile

Returns:
The StreamSource
Throws:
InitialisationException

getMaxActiveTransformers

public int getMaxActiveTransformers()
Returns:
The current maximum number of allowable active transformer objects in the pool

setMaxActiveTransformers

public void setMaxActiveTransformers(int maxActiveTransformers)
Sets the the current maximum number of active transformer objects allowed in the pool

Parameters:
maxActiveTransformers - New maximum size to set

getMaxIdleTransformers

public int getMaxIdleTransformers()
Returns:
The current maximum number of allowable idle transformer objects in the pool

setMaxIdleTransformers

public void setMaxIdleTransformers(int maxIdleTransformers)
Sets the the current maximum number of idle transformer objects allowed in the pool

Parameters:
maxIdleTransformers - New maximum size to set

getContextProperties

public Map getContextProperties()
Gets the parameters to be used when applying the transformation

Returns:
a map of the parameter names and associated values
See Also:
Transformer.setParameter(java.lang.String, java.lang.Object)

setContextProperties

public void setContextProperties(Map contextProperties)
Sets the parameters to be used when applying the transformation

Parameters:
contextProperties - a map of the parameter names and associated values
See Also:
Transformer.setParameter(java.lang.String, java.lang.Object)

evaluateTransformParameter

protected Object evaluateTransformParameter(String name,
                                            Object value)
                                     throws TransformerException
Returns the value to be set for the parameter. This method is called for each parameter before it is set on the transformer. The purpose of this method is to allow dynamic parameters related to the event (usually message properties) to be used. Any attribute of the current MuleEvent can be accessed using Property Extractors such as JXpath, bean path or header retrieval.

Parameters:
name - the name of the parameter. The name isn't used for this implementation but is exposed as a param for classes that may need it.
value - the value of the paramter
Returns:
the object to be set as the parameter value
Throws:
TransformerException


Copyright © 2003-2009 MuleSource, Inc.. All Rights Reserved.