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.transport.soap.axis.component;
8   
9   import org.mule.DefaultMuleEvent;
10  import org.mule.MessageExchangePattern;
11  import org.mule.api.MuleEvent;
12  import org.mule.api.MuleMessage;
13  import org.mule.api.endpoint.EndpointBuilder;
14  import org.mule.api.endpoint.OutboundEndpoint;
15  import org.mule.config.i18n.CoreMessages;
16  import org.mule.endpoint.EndpointURIEndpointBuilder;
17  import org.mule.module.cxf.component.AbstractWebServiceWrapperComponent;
18  import org.mule.transport.soap.axis.AxisConnector;
19  
20  import java.util.Map;
21  
22  public class WebServiceWrapperComponent extends AbstractWebServiceWrapperComponent
23  {
24  
25      private String use;
26      private String style;
27      private Map properties;
28  
29      @Override
30      protected Object doInvoke(MuleEvent event) throws Exception
31      {
32          String tempUrl;
33          if (addressFromMessage)
34          {
35              tempUrl = event.getMessage().getInboundProperty(WS_SERVICE_URL);
36              if (tempUrl == null)
37              {
38                  throw new IllegalArgumentException(CoreMessages.propertyIsNotSetOnEvent(WS_SERVICE_URL)
39                      .toString());
40              }
41          }
42          else
43          {
44              tempUrl = address;
45          }
46          MuleMessage message = event.getMessage();
47  
48          if (properties != null && properties.get(AxisConnector.SOAP_METHODS) != null)
49          {
50              message.addProperties((Map) properties.get(AxisConnector.SOAP_METHODS));
51          }
52  
53          EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder("axis:" + tempUrl, muleContext);
54          if (use != null)
55          {
56              endpointBuilder.setProperty(AxisConnector.USE, use);
57          }
58          if (style != null)
59          {
60              endpointBuilder.setProperty(AxisConnector.STYLE, style);
61  
62          }
63          //TODO MULE-4952 what is the strategy here for proxy components?
64          endpointBuilder.setExchangePattern(MessageExchangePattern.REQUEST_RESPONSE);
65  
66          OutboundEndpoint endpoint = endpointBuilder.buildOutboundEndpoint();
67  
68          MuleEvent responseEvent = endpoint.process(new DefaultMuleEvent(event.getMessage(), endpoint,
69              event.getSession()));
70  
71          if (responseEvent != null)
72          {
73              return responseEvent.getMessage();
74          }
75          else
76          {
77              return null;
78          }
79      }
80  
81      public String getUse()
82      {
83          return use;
84      }
85  
86      public void setUse(String use)
87      {
88          this.use = use;
89      }
90  
91      public String getStyle()
92      {
93          return style;
94      }
95  
96      public void setStyle(String style)
97      {
98          this.style = style;
99      }
100 
101     public Map getProperties()
102     {
103         return properties;
104     }
105 
106     public void setProperties(Map properties)
107     {
108         this.properties = properties;
109     }
110 
111 }