View Javadoc

1   /*
2    * $Id: MuleHeadersOutHandler.java 7976 2007-08-21 14:26:13Z 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.soap.xfire;
12  
13  import org.mule.config.MuleProperties;
14  import org.mule.providers.soap.MuleSoapHeaders;
15  import org.mule.umo.UMOEvent;
16  
17  import org.codehaus.xfire.MessageContext;
18  import org.codehaus.xfire.handler.AbstractHandler;
19  import org.jdom.Element;
20  import org.jdom.Namespace;
21  
22  /**
23   * Writes the Mule Soap Header to the outgoing request.
24   */
25  public class MuleHeadersOutHandler extends AbstractHandler
26  {
27      /**
28       * Invoke a handler. If a fault occurs it will be handled via the
29       * <code>handleFault</code> method.
30       * 
31       * @param context The message context.
32       */
33      public void invoke(MessageContext context) throws Exception
34      {
35          UMOEvent event = (UMOEvent) context.getProperty(MuleProperties.MULE_EVENT_PROPERTY);
36  
37          if (event == null && context.getClient() != null)
38          {
39              event = (UMOEvent) context.getClient().getProperty(MuleProperties.MULE_EVENT_PROPERTY);
40          }
41  
42          if (event != null)
43          {
44              MuleSoapHeaders muleHeaders = new MuleSoapHeaders(event);
45              Element header = context.getOutMessage().getHeader();
46  
47              if (header == null)
48              {
49                  header = new Element("Header", context.getOutMessage().getSoapVersion().getPrefix(),
50                      context.getOutMessage().getSoapVersion().getNamespace());
51              }
52  
53              // we can also add some extra properties like
54              // Enconding Property, Session Property
55  
56              Element muleHeader = null;
57              Namespace ns = Namespace.getNamespace(MuleSoapHeaders.MULE_NAMESPACE,
58                  MuleSoapHeaders.MULE_10_ACTOR);
59              if (muleHeaders.getCorrelationId() != null || muleHeaders.getReplyTo() != null)
60              {
61                  muleHeader = new Element(MuleSoapHeaders.MULE_HEADER, ns);
62              }
63              else
64              {
65                  return;
66              }
67  
68              Element e = null;
69              if (muleHeaders.getCorrelationId() != null)
70              {
71  
72                  e = new Element(MuleProperties.MULE_CORRELATION_ID_PROPERTY, ns);
73                  e.setText(muleHeaders.getCorrelationId());
74                  muleHeader.addContent(e);
75  
76                  e = new Element(MuleProperties.MULE_CORRELATION_GROUP_SIZE_PROPERTY, ns);
77                  e.setText(muleHeaders.getCorrelationGroup());
78                  muleHeader.addContent(e);
79  
80                  e = new Element(MuleProperties.MULE_CORRELATION_SEQUENCE_PROPERTY, ns);
81                  e.setText(muleHeaders.getCorrelationSequence());
82                  muleHeader.addContent(e);
83  
84              }
85              if (muleHeaders.getReplyTo() != null)
86              {
87  
88                  e = new Element(MuleProperties.MULE_REPLY_TO_PROPERTY, ns);
89                  e.setText(muleHeaders.getReplyTo());
90                  muleHeader.addContent(e);
91              }
92              header.addContent(muleHeader);
93  
94              context.getOutMessage().setHeader(header);
95          }
96      }
97  }