1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.soap.axis;
12
13 import org.mule.api.MessagingException;
14 import org.mule.api.ThreadSafeAccess;
15 import org.mule.api.transformer.Transformer;
16 import org.mule.transformer.simple.SerializableToByteArray;
17 import org.mule.transport.AbstractMessageAdapter;
18 import org.mule.transport.soap.MuleSoapHeaders;
19 import org.mule.transport.soap.i18n.SoapMessages;
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 soapMessage;
45 private Transformer 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.soapMessage = ctx.getMessage();
78 int x = 1;
79 try
80 {
81 for (Iterator i = this.soapMessage.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.soapMessage = 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 soapMessage = template.soapMessage;
108 payload = template.payload;
109 trans = template.trans;
110 }
111
112
113 public Object getPayload()
114 {
115 return payload;
116 }
117
118 public SOAPMessage getSoapMessage()
119 {
120 return soapMessage;
121 }
122
123 public void addAttachment(String name, DataHandler dataHandler) throws Exception
124 {
125 if (null != soapMessage)
126 {
127 soapMessage.addAttachmentPart(new AttachmentPart(dataHandler));
128 }
129 super.addAttachment(name, dataHandler);
130 }
131
132 public void removeAttachment(String name) throws Exception
133 {
134 if ("all".equalsIgnoreCase(name))
135 {
136 soapMessage.removeAllAttachments();
137 attachments.clear();
138 }
139 else
140 {
141 throw new SOAPException(SoapMessages.cannotRemoveSingleAttachment().toString());
142 }
143 }
144
145 public ThreadSafeAccess newThreadCopy()
146 {
147 return new AxisMessageAdapter(this);
148 }
149
150 }