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