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.transformer.codec;
8   
9   import org.mule.api.transformer.TransformerException;
10  import org.mule.config.i18n.CoreMessages;
11  import org.mule.transformer.AbstractTransformer;
12  import org.mule.transformer.types.DataTypeFactory;
13  import org.mule.util.IOUtils;
14  import org.mule.util.XMLEntityCodec;
15  
16  import java.io.InputStream;
17  
18  /**
19   * Decodes a String or byte[] containing XML entities
20   */
21  public class XmlEntityDecoder extends AbstractTransformer
22  {
23  
24      public XmlEntityDecoder()
25      {
26          registerSourceType(DataTypeFactory.STRING);
27          registerSourceType(DataTypeFactory.BYTE_ARRAY);
28          registerSourceType(DataTypeFactory.INPUT_STREAM);
29          setReturnDataType(DataTypeFactory.STRING);
30      }
31  
32      @Override
33      public Object doTransform(Object src, String encoding) throws TransformerException
34      {
35          try
36          {
37              String data;
38  
39              if (src instanceof byte[])
40              {
41                  data = new String((byte[]) src, encoding);
42              }
43              else if (src instanceof InputStream)
44              {
45                  data = IOUtils.toString((InputStream)src);
46              }
47              else
48              {
49                  data = (String) src;
50              }
51  
52              return XMLEntityCodec.decodeString(data);
53          }
54          catch (Exception ex)
55          {
56              throw new TransformerException(
57                  CoreMessages.transformFailed(src.getClass().getName(), "XML"),
58                  this, ex);
59          }
60      }
61  
62  }