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.transport.AbstractConnector;
30 import org.mule.util.StringUtils;
31
32 import java.util.ArrayList;
33 import java.util.Arrays;
34 import java.util.List;
35 import java.util.Map;
36
37 public class DefaultOutboundEndpoint extends AbstractEndpoint implements OutboundEndpoint
38 {
39 private static final long serialVersionUID = 8860985949279708638L;
40
41 private List<String> responseProperties;
42
43 public DefaultOutboundEndpoint(Connector connector,
44 EndpointURI endpointUri,
45 String name,
46 Map properties,
47 TransactionConfig transactionConfig,
48 boolean deleteUnacceptedMessage,
49 MessageExchangePattern messageExchangePattern,
50 int responseTimeout,
51 String initialState,
52 String endpointEncoding,
53 String endpointBuilderName,
54 MuleContext muleContext,
55 RetryPolicyTemplate retryPolicyTemplate,
56 String responsePropertiesList,
57 EndpointMessageProcessorChainFactory messageProcessorsFactory,
58 List <MessageProcessor> messageProcessors,
59 List <MessageProcessor> responseMessageProcessors,
60 boolean disableTransportTransformer,
61 String endpointMimeType)
62 {
63 super(connector, endpointUri, name, properties, transactionConfig,
64 deleteUnacceptedMessage, messageExchangePattern, responseTimeout, initialState,
65 endpointEncoding, endpointBuilderName, muleContext, retryPolicyTemplate,
66 messageProcessorsFactory, messageProcessors, responseMessageProcessors, disableTransportTransformer, endpointMimeType);
67
68 responseProperties = new ArrayList<String>();
69
70 responseProperties.add(MuleProperties.MULE_CORRELATION_ID_PROPERTY);
71 responseProperties.add(MuleProperties.MULE_CORRELATION_GROUP_SIZE_PROPERTY);
72 responseProperties.add(MuleProperties.MULE_CORRELATION_SEQUENCE_PROPERTY);
73 responseProperties.add(MuleProperties.MULE_SESSION_PROPERTY);
74
75 String[] props = StringUtils.splitAndTrim(responsePropertiesList, ",");
76 if (props != null)
77 {
78 responseProperties.addAll(Arrays.asList(props));
79 }
80 }
81
82 public List<String> getResponseProperties()
83 {
84 return responseProperties;
85 }
86
87 public MuleEvent process(MuleEvent event) throws MuleException
88 {
89 return getMessageProcessorChain(event.getFlowConstruct()).process(event);
90 }
91
92 @Override
93 protected MessageProcessor createMessageProcessorChain(FlowConstruct flowContruct) throws MuleException
94 {
95 EndpointMessageProcessorChainFactory factory = getMessageProcessorsFactory();
96 MessageProcessor chain = factory.createOutboundMessageProcessorChain(this, flowContruct,
97 ((AbstractConnector) getConnector()).createDispatcherMessageProcessor(this));
98
99 if (chain instanceof MuleContextAware)
100 {
101 ((MuleContextAware) chain).setMuleContext(getMuleContext());
102 }
103 if (chain instanceof FlowConstructAware)
104 {
105 ((FlowConstructAware) chain).setFlowConstruct(flowContruct);
106 }
107 if (chain instanceof Initialisable)
108 {
109 ((Initialisable) chain).initialise();
110 }
111
112 return chain;
113 }
114 }