View Javadoc

1   /*
2    * $Id: XmlToDomDocument.java 19191 2010-08-25 21:05:23Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.module.xml.transformer;
12  
13  import org.mule.api.MuleMessage;
14  import org.mule.api.transformer.DiscoverableTransformer;
15  import org.mule.api.transformer.TransformerException;
16  import org.mule.module.xml.util.XMLUtils;
17  
18  import javax.xml.stream.XMLStreamReader;
19  import javax.xml.transform.OutputKeys;
20  import javax.xml.transform.Source;
21  import javax.xml.transform.Transformer;
22  
23  import org.w3c.dom.Document;
24  
25  /**
26   * <code>XmlToDomDocument</code> transforms a XML String to org.w3c.dom.Document.
27   */
28  public class XmlToDomDocument extends AbstractXmlTransformer implements DiscoverableTransformer
29  {
30      private int priorityWeighting = DiscoverableTransformer.DEFAULT_PRIORITY_WEIGHTING;
31  
32      @Override
33      public Object transformMessage(MuleMessage message, String encoding) throws TransformerException
34      {
35          Object src = message.getPayload();
36          try
37          {
38              Source sourceDoc = XMLUtils.toXmlSource(getXMLInputFactory(), isUseStaxSource(), src);
39              if (sourceDoc == null)
40              {
41                  return null;
42              }
43  
44              if (XMLStreamReader.class.equals(returnType))
45              {
46                  return getXMLInputFactory().createXMLStreamReader(sourceDoc);
47              }
48              else if (returnType.getType().isAssignableFrom(sourceDoc.getClass()))
49              {
50                  return sourceDoc;
51              }
52  
53              // If returnClass is not set, assume W3C DOM
54              // This is the original behaviour
55              ResultHolder holder = getResultHolder(returnType.getType());
56              if (holder == null)
57              {
58                  holder = getResultHolder(Document.class);
59              }
60  
61              Transformer idTransformer = XMLUtils.getTransformer();
62              idTransformer.setOutputProperty(OutputKeys.ENCODING, encoding);
63              idTransformer.transform(sourceDoc, holder.getResult());
64  
65              return holder.getResultObject();
66          }
67          catch (Exception e)
68          {
69              throw new TransformerException(this, e);
70          }
71      }
72  
73      public int getPriorityWeighting()
74      {
75          return priorityWeighting;
76      }
77  
78      public void setPriorityWeighting(int priorityWeighting)
79      {
80          this.priorityWeighting = priorityWeighting;
81      }
82  }