1
2
3
4
5
6
7
8
9
10
11 package org.mule.providers.soap.axis;
12
13 import org.mule.impl.ThreadSafeAccess;
14 import org.mule.providers.AbstractMessageAdapter;
15 import org.mule.providers.soap.MuleSoapHeaders;
16 import org.mule.providers.soap.i18n.SoapMessages;
17 import org.mule.transformers.simple.SerializableToByteArray;
18 import org.mule.umo.MessagingException;
19 import org.mule.umo.transformer.UMOTransformer;
20 import org.mule.util.StringUtils;
21
22 import java.util.Iterator;
23
24 import javax.activation.DataHandler;
25 import javax.xml.soap.SOAPException;
26 import javax.xml.soap.SOAPMessage;
27
28 import org.apache.axis.MessageContext;
29 import org.apache.axis.attachments.AttachmentPart;
30
31
32
33
34
35
36 public class AxisMessageAdapter extends AbstractMessageAdapter
37 {
38
39
40
41 private static final long serialVersionUID = -923205879581370143L;
42
43 private final Object payload;
44 private final SOAPMessage message;
45 private UMOTransformer trans = new SerializableToByteArray();
46
47 public AxisMessageAdapter(Object message) throws MessagingException
48 {
49 this.payload = message;
50 try
51 {
52 MessageContext ctx = MessageContext.getCurrentContext();
53
54 if (ctx != null)
55 {
56 MuleSoapHeaders header = new MuleSoapHeaders(ctx.getMessage().getSOAPPart().getEnvelope()
57 .getHeader());
58
59 if (StringUtils.isNotBlank(header.getReplyTo()))
60 {
61 setReplyTo(header.getReplyTo());
62 }
63
64 if (StringUtils.isNotBlank(header.getCorrelationGroup()))
65 {
66 setCorrelationGroupSize(Integer.parseInt(header.getCorrelationGroup()));
67 }
68 if (StringUtils.isNotBlank(header.getCorrelationSequence()))
69 {
70 setCorrelationSequence(Integer.parseInt(header.getCorrelationSequence()));
71 }
72 if (StringUtils.isNotBlank(header.getCorrelationId()))
73 {
74 setCorrelationId(header.getCorrelationId());
75 }
76
77 this.message = ctx.getMessage();
78 int x = 1;
79 try
80 {
81 for (Iterator i = this.message.getAttachments(); i.hasNext(); x++)
82 {
83 super.addAttachment(String.valueOf(x), ((AttachmentPart)i.next())
84 .getActivationDataHandler());
85 }
86 }
87 catch (Exception e)
88 {
89
90 logger.fatal("Failed to read attachments", e);
91 }
92 }
93 else
94 {
95 this.message = null;
96 }
97 }
98 catch (SOAPException e)
99 {
100 throw new MessagingException(SoapMessages.failedToProcessSoapHeaders(), message, e);
101 }
102 }
103
104 public AxisMessageAdapter(AxisMessageAdapter template)
105 {
106 super(template);
107 payload = template.payload;
108 message = template.message;
109 trans = template.trans;
110 }
111
112
113
114
115
116
117
118
119
120 public String getPayloadAsString(String encoding) throws Exception
121 {
122 return new String(getPayloadAsBytes(), encoding);
123 }
124
125
126
127
128
129
130
131 public byte[] getPayloadAsBytes() throws Exception
132 {
133 return (byte[])trans.transform(payload);
134 }
135
136
137
138
139 public Object getPayload()
140 {
141 return payload;
142 }
143
144 public SOAPMessage getSoapMessage()
145 {
146 return message;
147 }
148
149 public void addAttachment(String name, DataHandler dataHandler) throws Exception
150 {
151 if (null != message)
152 {
153 message.addAttachmentPart(new AttachmentPart(dataHandler));
154 }
155 super.addAttachment(name, dataHandler);
156 }
157
158 public void removeAttachment(String name) throws Exception
159 {
160 if ("all".equalsIgnoreCase(name))
161 {
162 message.removeAllAttachments();
163 attachments.clear();
164 }
165 else
166 {
167 throw new SOAPException(SoapMessages.cannotRemoveSingleAttachment().toString());
168 }
169 }
170
171 public ThreadSafeAccess newThreadCopy()
172 {
173 return new AxisMessageAdapter(this);
174 }
175
176 }