1
2
3
4
5
6
7
8
9
10
11 package org.mule.endpoint;
12
13 import org.mule.api.MuleException;
14 import org.mule.api.config.ConfigurationException;
15 import org.mule.api.construct.FlowConstruct;
16 import org.mule.api.endpoint.EndpointMessageProcessorChainFactory;
17 import org.mule.api.endpoint.InboundEndpoint;
18 import org.mule.api.endpoint.OutboundEndpoint;
19 import org.mule.api.processor.MessageProcessor;
20 import org.mule.api.transport.Connector;
21 import org.mule.config.i18n.MessageFactory;
22 import org.mule.endpoint.inbound.InboundEndpointMimeTypeCheckingMessageProcessor;
23 import org.mule.endpoint.inbound.InboundEndpointPropertyMessageProcessor;
24 import org.mule.endpoint.inbound.InboundExceptionDetailsMessageProcessor;
25 import org.mule.endpoint.inbound.InboundLoggingMessageProcessor;
26 import org.mule.endpoint.inbound.InboundNotificationMessageProcessor;
27 import org.mule.endpoint.outbound.OutboundEndpointMimeTypeCheckingMessageProcessor;
28 import org.mule.endpoint.outbound.OutboundEndpointPropertyMessageProcessor;
29 import org.mule.endpoint.outbound.OutboundEventTimeoutMessageProcessor;
30 import org.mule.endpoint.outbound.OutboundLoggingMessageProcessor;
31 import org.mule.endpoint.outbound.OutboundResponsePropertiesMessageProcessor;
32 import org.mule.endpoint.outbound.OutboundRewriteResponseEventMessageProcessor;
33 import org.mule.endpoint.outbound.OutboundSessionHandlerMessageProcessor;
34 import org.mule.lifecycle.processor.ProcessIfStartedMessageProcessor;
35 import org.mule.processor.ExceptionHandlingMessageProcessor;
36 import org.mule.processor.TransactionalInterceptingMessageProcessor;
37 import org.mule.processor.builder.InterceptingChainMessageProcessorBuilder;
38
39 import java.util.ArrayList;
40 import java.util.List;
41
42 public class DefaultEndpointMessageProcessorChainFactory implements EndpointMessageProcessorChainFactory
43 {
44
45 protected List<MessageProcessor> createInboundMessageProcessors(InboundEndpoint endpoint)
46 {
47 List<MessageProcessor> list = new ArrayList<MessageProcessor>();
48
49 list.add(new ExceptionHandlingMessageProcessor());
50 list.add(new InboundEndpointMimeTypeCheckingMessageProcessor(endpoint));
51 list.add(new InboundEndpointPropertyMessageProcessor(endpoint));
52 list.add(new InboundNotificationMessageProcessor(endpoint));
53 list.add(new InboundLoggingMessageProcessor(endpoint));
54
55 return list;
56 }
57
58
59 protected List<MessageProcessor> createInboundResponseMessageProcessors(InboundEndpoint endpoint)
60 {
61 List<MessageProcessor> list = new ArrayList<MessageProcessor>();
62
63 list.add(new ExceptionHandlingMessageProcessor());
64 list.add(new InboundExceptionDetailsMessageProcessor(endpoint.getConnector()));
65
66 return list;
67 }
68
69
70 protected List<MessageProcessor> createOutboundMessageProcessors(OutboundEndpoint endpoint) throws MuleException
71 {
72 Connector connector = endpoint.getConnector();
73
74 List<MessageProcessor> list = new ArrayList<MessageProcessor>();
75
76
77 list.add(new OutboundLoggingMessageProcessor());
78 list.add(new ProcessIfStartedMessageProcessor(connector, connector.getLifecycleState()));
79
80
81 list.add(new TransactionalInterceptingMessageProcessor(endpoint.getTransactionConfig()));
82
83 list.add(new OutboundEventTimeoutMessageProcessor());
84
85 list.add(new OutboundSessionHandlerMessageProcessor(connector.getSessionHandler()));
86 list.add(new OutboundEndpointPropertyMessageProcessor());
87 list.add(new OutboundResponsePropertiesMessageProcessor(endpoint));
88 list.add(new OutboundEndpointMimeTypeCheckingMessageProcessor(endpoint));
89
90 return list;
91 }
92
93
94 protected List<MessageProcessor> createOutboundResponseMessageProcessors(OutboundEndpoint endpoint) throws MuleException
95 {
96 List<MessageProcessor> list = new ArrayList<MessageProcessor>();
97
98 list.add(new OutboundRewriteResponseEventMessageProcessor());
99
100 return list;
101 }
102
103 public MessageProcessor createInboundMessageProcessorChain(InboundEndpoint endpoint, FlowConstruct flowConstruct, MessageProcessor target) throws MuleException
104 {
105
106 InterceptingChainMessageProcessorBuilder requestChainBuilder = new EndpointInterceptingChainMessageProcessorBuilder(endpoint, flowConstruct);
107 requestChainBuilder.setName("InboundEndpoint '" + endpoint.getEndpointURI().getUri() + "' request chain");
108
109 requestChainBuilder.chain(createInboundMessageProcessors(endpoint));
110
111 requestChainBuilder.chain(endpoint.getMessageProcessors());
112
113
114 if (target == null)
115 {
116 throw new ConfigurationException(MessageFactory.createStaticMessage("No listener (target) has been set for this endpoint"));
117 }
118 requestChainBuilder.chain(target);
119
120
121 InterceptingChainMessageProcessorBuilder responseChainBuilder = new EndpointInterceptingChainMessageProcessorBuilder(endpoint, flowConstruct);
122 responseChainBuilder.setName("InboundEndpoint '" + endpoint.getEndpointURI().getUri() + "' response chain");
123
124 responseChainBuilder.chain(createInboundResponseMessageProcessors(endpoint));
125
126 responseChainBuilder.chain(endpoint.getResponseMessageProcessors());
127
128
129
130 InterceptingChainMessageProcessorBuilder compositeChainBuilder = new EndpointInterceptingChainMessageProcessorBuilder(endpoint, flowConstruct);
131 compositeChainBuilder.setName("InboundEndpoint '"+ endpoint.getEndpointURI().getUri() +"' composite request/response chain");
132 compositeChainBuilder.chain(requestChainBuilder.build(), responseChainBuilder.build());
133 return compositeChainBuilder.build();
134 }
135
136 public MessageProcessor createOutboundMessageProcessorChain(OutboundEndpoint endpoint, FlowConstruct flowConstruct, MessageProcessor target) throws MuleException
137 {
138
139 InterceptingChainMessageProcessorBuilder outboundChainBuilder = new EndpointInterceptingChainMessageProcessorBuilder(endpoint, flowConstruct);
140 outboundChainBuilder.setName("OutboundEndpoint '" + endpoint.getEndpointURI().getUri() + "' request chain");
141
142 outboundChainBuilder.chain(createOutboundMessageProcessors(endpoint));
143
144 outboundChainBuilder.chain(endpoint.getMessageProcessors());
145
146
147 if (target == null)
148 {
149 throw new ConfigurationException(MessageFactory.createStaticMessage("No listener (target) has been set for this endpoint"));
150 }
151 outboundChainBuilder.chain(target);
152
153
154 InterceptingChainMessageProcessorBuilder responseChainBuilder = new EndpointInterceptingChainMessageProcessorBuilder(endpoint, flowConstruct);
155 responseChainBuilder.setName("OutboundEndpoint '" + endpoint.getEndpointURI().getUri() + "' response chain");
156
157 responseChainBuilder.chain(createOutboundResponseMessageProcessors(endpoint));
158
159 responseChainBuilder.chain(endpoint.getResponseMessageProcessors());
160
161
162
163 InterceptingChainMessageProcessorBuilder compositeChainBuilder = new EndpointInterceptingChainMessageProcessorBuilder(endpoint, flowConstruct);
164 compositeChainBuilder.setName("OutboundEndpoint '" + endpoint.getEndpointURI().getUri() + "' composite request/response chain");
165 compositeChainBuilder.chain(outboundChainBuilder.build(), responseChainBuilder.build());
166 return compositeChainBuilder.build();
167 }
168
169 }
170
171