KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > systest > ws > rm > MessageFlow


1 package org.objectweb.celtix.systest.ws.rm;
2
3 import java.io.ByteArrayOutputStream JavaDoc;
4 import java.util.Iterator JavaDoc;
5 import java.util.List JavaDoc;
6
7 import javax.xml.namespace.QName JavaDoc;
8 import javax.xml.soap.Name JavaDoc;
9 import javax.xml.soap.SOAPElement JavaDoc;
10 import javax.xml.soap.SOAPEnvelope JavaDoc;
11 import javax.xml.soap.SOAPHeader JavaDoc;
12 import javax.xml.soap.SOAPHeaderElement JavaDoc;
13 import javax.xml.soap.SOAPMessage JavaDoc;
14 import javax.xml.ws.handler.LogicalMessageContext;
15
16 import junit.framework.Assert;
17
18 import org.objectweb.celtix.bus.ws.addressing.ContextUtils;
19 import org.objectweb.celtix.bus.ws.rm.Names;
20 import org.objectweb.celtix.bus.ws.rm.RMContextUtils;
21 import org.objectweb.celtix.ws.addressing.AddressingProperties;
22 import org.objectweb.celtix.ws.rm.RMProperties;
23 import org.objectweb.celtix.ws.rm.SequenceAcknowledgement;
24 import org.objectweb.celtix.ws.rm.SequenceType;
25
26
27 public class MessageFlow extends Assert {
28     private List JavaDoc<SOAPMessage JavaDoc> outboundMessages;
29     private List JavaDoc<LogicalMessageContext> inboundContexts;
30     
31     public MessageFlow(List JavaDoc<SOAPMessage JavaDoc> o, List JavaDoc<LogicalMessageContext> i) {
32         outboundMessages = o;
33         inboundContexts = i;
34     }
35     
36     public List JavaDoc<SOAPMessage JavaDoc> getOutboundMessages() {
37         return outboundMessages;
38     }
39     
40     public List JavaDoc<LogicalMessageContext> getInboundContexts() {
41         return inboundContexts;
42     }
43     
44     public void clear() {
45         getOutboundMessages().clear();
46         getInboundContexts().clear();
47     }
48     
49     public void verifyActions(String JavaDoc[] expectedActions, boolean outbound) throws Exception JavaDoc {
50
51         assertEquals(expectedActions.length, outbound ? outboundMessages.size() : inboundContexts.size());
52
53         for (int i = 0; i < expectedActions.length; i++) {
54             String JavaDoc action = outbound ? getAction(outboundMessages.get(i)) : getAction(inboundContexts.get(i));
55             if (null == expectedActions[i]) {
56                 assertNull((outbound ? "Outbound " : "Inbound") + " message " + i
57                            + " has unexpected action: " + action, action);
58             } else {
59                 assertEquals((outbound ? "Outbound " : "Inbound") + " message " + i
60                              + " does not contain expected action header"
61                              + System.getProperty("line.separator"), expectedActions[i], action);
62             }
63         }
64     }
65     
66     public boolean checkActions(String JavaDoc[] expectedActions, boolean outbound) throws Exception JavaDoc {
67
68         if (expectedActions.length != (outbound ? outboundMessages.size() : inboundContexts.size())) {
69             return false;
70         }
71
72         for (int i = 0; i < expectedActions.length; i++) {
73             String JavaDoc action = outbound ? getAction(outboundMessages.get(i)) : getAction(inboundContexts.get(i));
74             if (null == expectedActions[i]) {
75                 if (action != null) {
76                     return false;
77                 }
78             } else {
79                 if (!expectedActions[i].equals(action)) {
80                     return false;
81                 }
82             }
83         }
84         return true;
85     }
86
87
88     public void verifyMessageNumbers(String JavaDoc[] expectedMessageNumbers, boolean outbound) throws Exception JavaDoc {
89
90         assertEquals(expectedMessageNumbers.length, outbound ? outboundMessages.size()
91             : inboundContexts.size());
92
93         for (int i = 0; i < expectedMessageNumbers.length; i++) {
94             if (outbound) {
95                 SOAPElement JavaDoc se = getSequence(outboundMessages.get(i));
96                 if (null == expectedMessageNumbers[i]) {
97                     assertNull("Outbound message " + i + " contains unexpected message number ", se);
98                 } else {
99                     assertEquals("Outbound message " + i + " does not contain expected message number "
100                                  + expectedMessageNumbers[i], expectedMessageNumbers[i],
101                                  getMessageNumber(se));
102                 }
103             } else {
104                 SequenceType s = getSequence(inboundContexts.get(i));
105                 String JavaDoc messageNumber = null == s ? null : s.getMessageNumber().toString();
106                 if (null == expectedMessageNumbers[i]) {
107                     assertNull("Inbound message " + i + " contains unexpected message number ",
108                                messageNumber);
109                 } else {
110                     assertEquals("Inbound message " + i + " does not contain expected message number "
111                                  + expectedMessageNumbers[i], expectedMessageNumbers[i], messageNumber);
112                 }
113             }
114         }
115     }
116
117     public void verifyLastMessage(boolean[] expectedLastMessages, boolean outbound) throws Exception JavaDoc {
118         
119         assertEquals(expectedLastMessages.length, outbound ? outboundMessages.size()
120             : inboundContexts.size());
121         
122         for (int i = 0; i < expectedLastMessages.length; i++) {
123             boolean lastMessage;
124             if (outbound) {
125                 SOAPElement JavaDoc se = getSequence(outboundMessages.get(i));
126                 lastMessage = null == se ? false : getLastMessage(se);
127             } else {
128                 SequenceType s = getSequence(inboundContexts.get(i));
129                 lastMessage = null == s ? false : null != s.getLastMessage();
130             }
131             assertEquals("Outbound message " + i
132                          + (expectedLastMessages[i] ? " does not contain expected last message element."
133                              : " contains last message element."),
134                          expectedLastMessages[i], lastMessage);
135         
136         }
137     }
138     
139     public void verifyAcknowledgements(boolean[] expectedAcks, boolean outbound) throws Exception JavaDoc {
140         assertEquals(expectedAcks.length, outbound ? outboundMessages.size()
141             : inboundContexts.size());
142         
143         for (int i = 0; i < expectedAcks.length; i++) {
144             boolean ack = outbound ? (null != getAcknowledgment(outboundMessages.get(i)))
145                 : (null != getAcknowledgment(inboundContexts.get(i)));
146             
147             if (expectedAcks[i]) {
148                 assertTrue((outbound ? "Outbound" : "Inbound") + " message " + i
149                            + " does not contain expected acknowledgement", ack);
150             } else {
151                 assertFalse((outbound ? "Outbound" : "Inbound") + " message " + i
152                            + " contains unexpected acknowledgement", ack);
153             }
154         }
155     }
156
157     public void verifyAckRequestedOutbound() throws Exception JavaDoc {
158         boolean found = false;
159         for (SOAPMessage JavaDoc m : outboundMessages) {
160             SOAPElement JavaDoc se = getAckRequested(m);
161             if (se != null) {
162                 found = true;
163                 break;
164             }
165         }
166         assertTrue("expected AckRequested", found);
167     }
168     
169     public void verifyAckRequestedInbound(List JavaDoc<LogicalMessageContext> contexts) throws Exception JavaDoc {
170         boolean found = false;
171         for (LogicalMessageContext context : contexts) {
172             RMProperties rmps = RMContextUtils.retrieveRMProperties(context, false);
173             if (null != rmps
174                 && rmps.getAcksRequested() != null
175                 && rmps.getAcksRequested().size() > 0) {
176                 found = true;
177                 break;
178             }
179         }
180         assertTrue("expected AckRequested", found);
181     }
182
183     protected String JavaDoc getAction(SOAPMessage JavaDoc msg) throws Exception JavaDoc {
184         SOAPEnvelope JavaDoc env = msg.getSOAPPart().getEnvelope();
185         SOAPHeader JavaDoc header = env.getHeader();
186         Iterator JavaDoc headerElements = header.examineAllHeaderElements();
187         while (headerElements.hasNext()) {
188             SOAPHeaderElement JavaDoc headerElement = (SOAPHeaderElement JavaDoc)headerElements.next();
189             Name JavaDoc headerName = headerElement.getElementName();
190             String JavaDoc localName = headerName.getLocalName();
191             if ((headerName.getURI().equals(org.objectweb.celtix.bus.ws.addressing.Names.WSA_NAMESPACE_NAME)
192                 || headerName.getURI().equals(org.objectweb.celtix.bus.ws.addressing.VersionTransformer
193                                               .Names200408.WSA_NAMESPACE_NAME))
194                 && localName.equals(org.objectweb.celtix.bus.ws.addressing.Names.WSA_ACTION_NAME)) {
195                 return headerElement.getTextContent();
196             }
197         }
198         return null;
199     }
200
201     protected String JavaDoc getAction(LogicalMessageContext context) {
202         AddressingProperties maps = ContextUtils.retrieveMAPs(context, false, false);
203         if (null != maps && null != maps.getAction()) {
204             return maps.getAction().getValue();
205         }
206         return null;
207     }
208
209     protected SOAPElement JavaDoc getSequence(SOAPMessage JavaDoc msg) throws Exception JavaDoc {
210         SOAPEnvelope JavaDoc env = msg.getSOAPPart().getEnvelope();
211         SOAPHeader JavaDoc header = env.getHeader();
212         Iterator JavaDoc headerElements = header.examineAllHeaderElements();
213         while (headerElements.hasNext()) {
214             SOAPHeaderElement JavaDoc headerElement = (SOAPHeaderElement JavaDoc)headerElements.next();
215             Name JavaDoc headerName = headerElement.getElementName();
216             String JavaDoc localName = headerName.getLocalName();
217             if (headerName.getURI().equals(Names.WSRM_NAMESPACE_NAME)
218                 && localName.equals(Names.WSRM_SEQUENCE_NAME)) {
219                 return (SOAPElement JavaDoc)header.getChildElements().next();
220             }
221         }
222         return null;
223     }
224
225     public String JavaDoc getMessageNumber(SOAPElement JavaDoc elem) throws Exception JavaDoc {
226         SOAPElement JavaDoc se = (SOAPElement JavaDoc)elem.getChildElements(
227                                                             new QName JavaDoc(Names.WSRM_NAMESPACE_NAME,
228                                                                       "MessageNumber")).next();
229         return se.getTextContent();
230     }
231
232     protected SequenceType getSequence(LogicalMessageContext context) {
233         RMProperties rmps = RMContextUtils.retrieveRMProperties(context, false);
234         return rmps == null ? null : rmps.getSequence();
235     }
236
237     private boolean getLastMessage(SOAPElement JavaDoc elem) throws Exception JavaDoc {
238         return elem.getChildElements(new QName JavaDoc(Names.WSRM_NAMESPACE_NAME, "LastMessage")).hasNext();
239     }
240
241     protected SOAPElement JavaDoc getAcknowledgment(SOAPMessage JavaDoc msg) throws Exception JavaDoc {
242         SOAPEnvelope JavaDoc env = msg.getSOAPPart().getEnvelope();
243         SOAPHeader JavaDoc header = env.getHeader();
244         Iterator JavaDoc headerElements = header.examineAllHeaderElements();
245         while (headerElements.hasNext()) {
246             SOAPHeaderElement JavaDoc headerElement = (SOAPHeaderElement JavaDoc)headerElements.next();
247             Name JavaDoc headerName = headerElement.getElementName();
248             String JavaDoc localName = headerName.getLocalName();
249             if (headerName.getURI().equals(Names.WSRM_NAMESPACE_NAME)
250                 && localName.equals(Names.WSRM_SEQUENCE_ACK_NAME)) {
251                 return (SOAPElement JavaDoc)header.getChildElements().next();
252             }
253         }
254         return null;
255     }
256     
257     protected SequenceAcknowledgement getAcknowledgment(LogicalMessageContext context) {
258         RMProperties rmps = RMContextUtils.retrieveRMProperties(context, false);
259         if (null != rmps && null != rmps.getAcks() && rmps.getAcks().size() > 0) {
260             return rmps.getAcks().iterator().next();
261         }
262         return null;
263     }
264
265     private SOAPElement JavaDoc getAckRequested(SOAPMessage JavaDoc msg) throws Exception JavaDoc {
266         SOAPEnvelope JavaDoc env = msg.getSOAPPart().getEnvelope();
267         SOAPHeader JavaDoc header = env.getHeader();
268         Iterator JavaDoc headerElements = header.examineAllHeaderElements();
269         while (headerElements.hasNext()) {
270             SOAPHeaderElement JavaDoc headerElement = (SOAPHeaderElement JavaDoc)headerElements.next();
271             Name JavaDoc headerName = headerElement.getElementName();
272             String JavaDoc localName = headerName.getLocalName();
273             if (headerName.getURI().equals(Names.WSRM_NAMESPACE_NAME)
274                 && localName.equals(Names.WSRM_ACK_REQUESTED_NAME)) {
275                 return (SOAPElement JavaDoc)header.getChildElements().next();
276             }
277         }
278         return null;
279     }
280     
281     public void verifyMessages(int nExpected, boolean outbound) {
282         if (outbound) {
283             assertEquals("Unexpected number of outbound messages" + outboundDump(),
284                          nExpected, outboundMessages.size());
285         } else {
286             assertEquals("Unexpected number of inbound messages", nExpected, inboundContexts.size());
287         }
288     }
289     
290     public void verifyMessages(int nExpected, boolean outbound, int interval, int attempts) {
291         for (int i = 0; i < attempts; i++) {
292             if ((outbound && outboundMessages.size() < nExpected)
293                 || (!outbound && inboundContexts.size() < nExpected)) {
294                 try {
295                     Thread.sleep(1000);
296                 } catch (InterruptedException JavaDoc ex) {
297                     // ignore
298
}
299             } else {
300                 break;
301             }
302         }
303         if (outbound) {
304             assertEquals("Did not send the expected number of outbound messages." + outboundDump(),
305                          nExpected, outboundMessages.size());
306         } else {
307             assertEquals("Did not receive the expected number of inbound messages.",
308                          nExpected, inboundContexts.size());
309         }
310     }
311     
312     public void purgePartialResponses() {
313         for (int i = inboundContexts.size() - 1; i >= 0; i--) {
314             if (null == getAction(inboundContexts.get(i))) {
315                 inboundContexts.remove(i);
316             }
317         }
318     }
319     
320     private String JavaDoc outboundDump() {
321         StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
322         try {
323             buf.append(System.getProperty("line.separator"));
324             for (int i = 0; i < outboundMessages.size(); i++) {
325                 SOAPMessage JavaDoc sm = outboundMessages.get(i);
326                 buf.append("[");
327                 buf.append(i);
328                 buf.append("] : ");
329                 ByteArrayOutputStream JavaDoc bos = new ByteArrayOutputStream JavaDoc();
330                 sm.writeTo(bos);
331                 buf.append(bos.toString());
332                 buf.append(System.getProperty("line.separator"));
333             }
334         } catch (Exception JavaDoc ex) {
335             return "";
336         }
337         
338         return buf.toString();
339     }
340 }
341
Popular Tags