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