1
2
3
4
5
6
7
8
9
10
11 package org.mule.endpoint;
12
13 import org.mule.MessageExchangePattern;
14 import org.mule.api.MuleContext;
15 import org.mule.api.MuleEvent;
16 import org.mule.api.MuleException;
17 import org.mule.api.config.MuleProperties;
18 import org.mule.api.construct.FlowConstruct;
19 import org.mule.api.construct.FlowConstructAware;
20 import org.mule.api.context.MuleContextAware;
21 import org.mule.api.endpoint.EndpointMessageProcessorChainFactory;
22 import org.mule.api.endpoint.EndpointURI;
23 import org.mule.api.endpoint.OutboundEndpoint;
24 import org.mule.api.lifecycle.Initialisable;
25 import org.mule.api.processor.MessageProcessor;
26 import org.mule.api.retry.RetryPolicyTemplate;
27 import org.mule.api.transaction.TransactionConfig;
28 import org.mule.api.transport.Connector;
29 import org.mule.processor.AbstractRedeliveryPolicy;
30 import org.mule.transport.AbstractConnector;
31 import org.mule.util.StringUtils;
32
33 import java.util.ArrayList;
34 import java.util.Arrays;
35 import java.util.List;
36 import java.util.Map;
37
38 public class DefaultOutboundEndpoint extends AbstractEndpoint implements OutboundEndpoint
39 {
40 private static final long serialVersionUID = 8860985949279708638L;
41
42 private List<String> responseProperties;
43
44 public DefaultOutboundEndpoint(Connector connector,
45 EndpointURI endpointUri,
46 String name,
47 Map properties,
48 TransactionConfig transactionConfig,
49 boolean deleteUnacceptedMessage,
50 MessageExchangePattern messageExchangePattern,
51 int responseTimeout,
52 String initialState,
53 String endpointEncoding,
54 String endpointBuilderName,
55 MuleContext muleContext,
56 RetryPolicyTemplate retryPolicyTemplate,
57 AbstractRedeliveryPolicy redeliveryPolicy,
58 String responsePropertiesList,
59 EndpointMessageProcessorChainFactory messageProcessorsFactory,
60 List <MessageProcessor> messageProcessors,
61 List <MessageProcessor> responseMessageProcessors,
62 boolean disableTransportTransformer,
63 String endpointMimeType)
64 {
65 super(connector, endpointUri, name, properties, transactionConfig,
66 deleteUnacceptedMessage, messageExchangePattern, responseTimeout, initialState,
67 endpointEncoding, endpointBuilderName, muleContext, retryPolicyTemplate, null,
68 messageProcessorsFactory, messageProcessors, responseMessageProcessors, disableTransportTransformer, endpointMimeType);
69
70 if (redeliveryPolicy != null)
71 {
72 logger.warn("Ignoring redelivery policy set on outbound endpoint " + endpointUri);
73 }
74 responseProperties = new ArrayList<String>();
75
76 responseProperties.add(MuleProperties.MULE_CORRELATION_ID_PROPERTY);
77 responseProperties.add(MuleProperties.MULE_CORRELATION_GROUP_SIZE_PROPERTY);
78 responseProperties.add(MuleProperties.MULE_CORRELATION_SEQUENCE_PROPERTY);
79 responseProperties.add(MuleProperties.MULE_SESSION_PROPERTY);
80
81 String[] props = StringUtils.splitAndTrim(responsePropertiesList, ",");
82 if (props != null)
83 {
84 responseProperties.addAll(Arrays.asList(props));
85 }
86 }
87
88 public List<String> getResponseProperties()
89 {
90 return responseProperties;
91 }
92
93 public MuleEvent process(MuleEvent event) throws MuleException
94 {
95 return getMessageProcessorChain(event.getFlowConstruct()).process(event);
96 }
97
98 @Override
99 protected MessageProcessor createMessageProcessorChain(FlowConstruct flowContruct) throws MuleException
100 {
101 EndpointMessageProcessorChainFactory factory = getMessageProcessorsFactory();
102 MessageProcessor chain = factory.createOutboundMessageProcessorChain(this, flowContruct,
103 ((AbstractConnector) getConnector()).createDispatcherMessageProcessor(this));
104
105 if (chain instanceof MuleContextAware)
106 {
107 ((MuleContextAware) chain).setMuleContext(getMuleContext());
108 }
109 if (chain instanceof FlowConstructAware)
110 {
111 ((FlowConstructAware) chain).setFlowConstruct(flowContruct);
112 }
113 if (chain instanceof Initialisable)
114 {
115 ((Initialisable) chain).initialise();
116 }
117
118 return chain;
119 }
120 }