1
2
3
4
5
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 }