View Javadoc

1   /*
2    * $Id: TransformerComponent.java 7963 2007-08-21 08:53:15Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.providers.jbi.components;
12  
13  import org.mule.umo.transformer.TransformerException;
14  import org.mule.umo.transformer.UMOTransformer;
15  
16  import javax.jbi.messaging.InOnly;
17  import javax.jbi.messaging.InOut;
18  import javax.jbi.messaging.MessageExchange;
19  import javax.jbi.messaging.MessagingException;
20  import javax.jbi.messaging.NormalizedMessage;
21  import javax.xml.transform.Source;
22  
23  /**
24   * Mule transformers can be reused inside a Jbi container.
25   */
26  public class TransformerComponent extends AbstractJbiComponent
27  {
28  
29      protected UMOTransformer transformer = null;
30  
31      public void onMessage(MessageExchange messageExchange, NormalizedMessage message)
32          throws MessagingException
33      {
34          if (messageExchange.getRole() == MessageExchange.Role.PROVIDER)
35          {
36              return;
37          }
38          NormalizedMessage in = messageExchange.getMessage("in");
39  
40          try
41          {
42              NormalizedMessage out = messageExchange.createMessage();
43              transform(messageExchange, in, out);
44  
45              if (messageExchange instanceof InOut)
46              {
47                  messageExchange.setMessage(out, OUT);
48              }
49              else
50              {
51                  InOnly outExchange = exchangeFactory.createInOnlyExchange();
52                  outExchange.setInMessage(out);
53                  deliveryChannel.sendSync(outExchange);
54              }
55              done(messageExchange);
56          }
57          catch (Exception e)
58          {
59              error(messageExchange, e);
60          }
61      }
62  
63      protected void transform(MessageExchange exchange, NormalizedMessage in, NormalizedMessage out)
64          throws TransformerException, MessagingException
65      {
66          Object result = transformer.transform(in.getContent());
67          if (result instanceof Source)
68          {
69              out.setContent((Source)result);
70          }
71          else
72          {
73              throw new UnsupportedOperationException(
74                  "Support for Source transformation is not yet implemented");
75          }
76      }
77  }