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.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
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
54
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 }