View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.module.xml.transformer;
8   
9   import org.mule.api.MuleMessage;
10  import org.mule.api.transformer.DiscoverableTransformer;
11  import org.mule.api.transformer.TransformerException;
12  import org.mule.config.i18n.MessageFactory;
13  import org.mule.module.xml.stax.ReversibleXMLStreamReader;
14  import org.mule.module.xml.util.XMLUtils;
15  import org.mule.transformer.types.DataTypeFactory;
16  
17  import javax.xml.stream.XMLStreamException;
18  import javax.xml.stream.XMLStreamReader;
19  import javax.xml.transform.Source;
20  
21  import org.w3c.dom.Document;
22  
23  public class XmlToXMLStreamReader extends AbstractXmlTransformer implements DiscoverableTransformer
24  {
25  
26      private int priorityWeighting = DiscoverableTransformer.DEFAULT_PRIORITY_WEIGHTING;
27      private boolean reversible;
28      
29      public XmlToXMLStreamReader()
30      {
31          super();
32          registerSourceType(DataTypeFactory.create(Source.class));
33          registerSourceType(DataTypeFactory.INPUT_STREAM);
34          registerSourceType(DataTypeFactory.create(Document.class));
35          registerSourceType(DataTypeFactory.BYTE_ARRAY);
36          registerSourceType(DataTypeFactory.STRING);
37  
38          setReturnDataType(DataTypeFactory.create(XMLStreamReader.class));
39      }
40  
41      @Override
42      public Object transformMessage(MuleMessage message, String encoding) throws TransformerException
43      {
44          Object src = message.getPayload();
45          try
46          {
47              XMLStreamReader xsr = XMLUtils.toXMLStreamReader(getXMLInputFactory(), src);
48              if (xsr == null)
49              {
50                  throw new TransformerException(MessageFactory
51                      .createStaticMessage("Unable to convert " + src.getClass() + " to XMLStreamReader."), this);
52              }
53          
54              if (reversible && !(xsr instanceof ReversibleXMLStreamReader))
55              {
56                  return new ReversibleXMLStreamReader(xsr);
57              }
58              else
59              {
60                  return xsr;
61              }
62          }
63          catch (XMLStreamException e)
64          {
65              throw new TransformerException(this, e);
66          }
67      }
68  
69      public boolean isReversible()
70      {
71          return reversible;
72      }
73  
74      public void setReversible(boolean reversible)
75      {
76          this.reversible = reversible;
77      }
78  
79      public int getPriorityWeighting()
80      {
81          return priorityWeighting;
82      }
83  
84      public void setPriorityWeighting(int priorityWeighting)
85      {
86          this.priorityWeighting = priorityWeighting;
87      }
88  }