1
2
3
4
5
6
7
8
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.config.i18n.MessageFactory;
17 import org.mule.module.xml.stax.ReversibleXMLStreamReader;
18 import org.mule.module.xml.util.XMLUtils;
19 import org.mule.transformer.types.DataTypeFactory;
20
21 import javax.xml.stream.XMLStreamException;
22 import javax.xml.stream.XMLStreamReader;
23 import javax.xml.transform.Source;
24
25 import org.w3c.dom.Document;
26
27 public class XmlToXMLStreamReader extends AbstractXmlTransformer implements DiscoverableTransformer
28 {
29
30 private int priorityWeighting = DiscoverableTransformer.DEFAULT_PRIORITY_WEIGHTING;
31 private boolean reversible;
32
33 public XmlToXMLStreamReader()
34 {
35 super();
36 registerSourceType(DataTypeFactory.create(Source.class));
37 registerSourceType(DataTypeFactory.INPUT_STREAM);
38 registerSourceType(DataTypeFactory.create(Document.class));
39 registerSourceType(DataTypeFactory.BYTE_ARRAY);
40 registerSourceType(DataTypeFactory.STRING);
41
42 setReturnDataType(DataTypeFactory.create(XMLStreamReader.class));
43 }
44
45 @Override
46 public Object transformMessage(MuleMessage message, String encoding) throws TransformerException
47 {
48 Object src = message.getPayload();
49 try
50 {
51 XMLStreamReader xsr = XMLUtils.toXMLStreamReader(getXMLInputFactory(), src);
52 if (xsr == null)
53 {
54 throw new TransformerException(MessageFactory
55 .createStaticMessage("Unable to convert " + src.getClass() + " to XMLStreamReader."), this);
56 }
57
58 if (reversible && !(xsr instanceof ReversibleXMLStreamReader))
59 {
60 return new ReversibleXMLStreamReader(xsr);
61 }
62 else
63 {
64 return xsr;
65 }
66 }
67 catch (XMLStreamException e)
68 {
69 throw new TransformerException(this, e);
70 }
71 }
72
73 public boolean isReversible()
74 {
75 return reversible;
76 }
77
78 public void setReversible(boolean reversible)
79 {
80 this.reversible = reversible;
81 }
82
83 public int getPriorityWeighting()
84 {
85 return priorityWeighting;
86 }
87
88 public void setPriorityWeighting(int priorityWeighting)
89 {
90 this.priorityWeighting = priorityWeighting;
91 }
92 }