1
2
3
4
5
6
7 package org.mule.service.processor;
8
9 import org.mule.DefaultMuleEvent;
10 import org.mule.DefaultMuleMessage;
11 import org.mule.RequestContext;
12 import org.mule.api.MuleEvent;
13 import org.mule.api.MuleException;
14 import org.mule.api.routing.OutboundRouterCollection;
15 import org.mule.api.service.Service;
16 import org.mule.component.simple.PassThroughComponent;
17 import org.mule.processor.AbstractInterceptingMessageProcessor;
18 import org.mule.transport.NullPayload;
19
20
21
22
23
24
25
26
27
28
29 public class ServiceOutboundMessageProcessor extends AbstractInterceptingMessageProcessor
30 {
31
32 protected Service service;
33
34 public ServiceOutboundMessageProcessor(Service service)
35 {
36 this.service = service;
37 }
38
39 public MuleEvent process(MuleEvent event) throws MuleException
40 {
41
42 boolean syncNullPayload = event.getEndpoint().getExchangePattern().hasResponse()
43 && (event.getMessage().getPayload() instanceof NullPayload);
44
45 if (event.isStopFurtherProcessing())
46 {
47 logger.debug("MuleEvent stop further processing has been set, no outbound routing will be performed.");
48 return event;
49 }
50
51 else if (event != null && !syncNullPayload)
52 {
53 if (!(service.getOutboundMessageProcessor() instanceof OutboundRouterCollection)
54 || (service.getOutboundMessageProcessor() instanceof OutboundRouterCollection && ((OutboundRouterCollection) service.getOutboundMessageProcessor()).hasEndpoints()))
55 {
56 MuleEvent outboundEvent;
57 if (event.getEndpoint().getExchangePattern().hasResponse())
58 {
59
60 outboundEvent = new DefaultMuleEvent(new DefaultMuleMessage(event.getMessage()
61 .getPayload(), event.getMessage(), event.getMuleContext()), event);
62 }
63 else
64 {
65 outboundEvent = event;
66 }
67
68 MuleEvent outboundResult = processNext(outboundEvent);
69
70 if (outboundResult != null)
71 {
72 event = outboundResult;
73 }
74 else if (service.getComponent() instanceof PassThroughComponent)
75 {
76
77
78
79 event = new DefaultMuleEvent(new DefaultMuleMessage(NullPayload.getInstance(),
80 event.getMessage(), service.getMuleContext()), event);
81 }
82 }
83 else
84 {
85 logger.debug("Outbound router on service '" + service.getName()
86 + "' doesn't have any targets configured.");
87 }
88 event = RequestContext.setEvent(new DefaultMuleEvent(event.getMessage(), event));
89 }
90 return event;
91 }
92 }