1
2
3
4
5
6
7
8
9
10
11 package org.mule.components.builder;
12
13 import org.mule.config.ConfigurationException;
14 import org.mule.config.MuleProperties;
15 import org.mule.impl.MuleMessage;
16 import org.mule.impl.UMODescriptorAware;
17 import org.mule.umo.UMODescriptor;
18 import org.mule.umo.UMOEventContext;
19 import org.mule.umo.UMOMessage;
20 import org.mule.umo.endpoint.UMOEndpoint;
21 import org.mule.umo.lifecycle.Callable;
22 import org.mule.umo.routing.UMOOutboundRouter;
23 import org.mule.util.StringMessageUtils;
24
25 import java.util.ArrayList;
26 import java.util.Iterator;
27 import java.util.List;
28
29 import org.apache.commons.logging.Log;
30 import org.apache.commons.logging.LogFactory;
31
32
33
34
35
36 public abstract class AbstractMessageBuilder implements UMODescriptorAware, Callable, MessageBuilder
37 {
38
39
40
41
42 protected transient Log logger = LogFactory.getLog(getClass());
43
44 protected UMODescriptor descriptor;
45
46 public void setDescriptor(UMODescriptor descriptor) throws ConfigurationException
47 {
48 this.descriptor = descriptor;
49 }
50
51 public Object onCall(UMOEventContext eventContext) throws Exception
52 {
53
54 UMOMessage requestMessage = new MuleMessage(eventContext.getTransformedMessage(),
55 eventContext.getMessage());
56
57 UMOMessage responseMessage = requestMessage;
58 Object builtMessage;
59
60 if (descriptor.getOutboundRouter().hasEndpoints())
61 {
62 List endpoints = new ArrayList();
63 for (Iterator iterator = descriptor.getOutboundRouter().getRouters().iterator(); iterator.hasNext();)
64 {
65 UMOOutboundRouter router = (UMOOutboundRouter) iterator.next();
66 endpoints.addAll(router.getEndpoints());
67 }
68 for (Iterator iterator = endpoints.iterator(); iterator.hasNext();)
69 {
70 UMOEndpoint endpoint = (UMOEndpoint) iterator.next();
71 boolean rsync = eventContext.getMessage().getBooleanProperty(
72 MuleProperties.MULE_REMOTE_SYNC_PROPERTY, endpoint.isRemoteSync());
73 if (!rsync)
74 {
75 logger.info("Endpoint: " + endpoint
76 + " is not remoteSync enabled. Message builder finishing");
77 if (eventContext.isSynchronous())
78 {
79 responseMessage = eventContext.sendEvent(requestMessage, endpoint);
80 }
81 else
82 {
83 eventContext.dispatchEvent(requestMessage, endpoint);
84 responseMessage = null;
85 }
86 break;
87 }
88 else
89 {
90 responseMessage = eventContext.sendEvent(requestMessage, endpoint);
91 if (logger.isDebugEnabled())
92 {
93 logger.debug("Response Message Received from: " + endpoint.getEndpointURI());
94 }
95 if (logger.isTraceEnabled())
96 {
97 try
98 {
99 logger.trace("Message Payload: \n"
100 + StringMessageUtils.truncate(
101 StringMessageUtils.toString(responseMessage.getPayload()), 200,
102 false));
103 }
104 catch (Exception e)
105 {
106
107 }
108 }
109 builtMessage = buildMessage(requestMessage, responseMessage);
110 responseMessage = new MuleMessage(builtMessage, responseMessage);
111 requestMessage = responseMessage;
112 }
113 }
114 }
115 else
116 {
117 logger.info("There are currently no endpoints configured on component: " + descriptor.getName());
118 }
119 eventContext.setStopFurtherProcessing(true);
120 return responseMessage;
121 }
122 }