KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > bus > bindings > soap > SoapBindingImplTest


1 package org.objectweb.celtix.bus.bindings.soap;
2
3 import java.io.ByteArrayInputStream JavaDoc;
4 import java.io.InputStream JavaDoc;
5 import java.lang.reflect.Method JavaDoc;
6
7 import javax.xml.namespace.QName JavaDoc;
8 import javax.xml.soap.Detail JavaDoc;
9 import javax.xml.soap.SOAPException JavaDoc;
10 import javax.xml.soap.SOAPFault JavaDoc;
11 import javax.xml.soap.SOAPMessage JavaDoc;
12 import javax.xml.ws.WebFault;
13 import javax.xml.ws.soap.SOAPFaultException;
14
15 import org.w3c.dom.Node JavaDoc;
16 import org.w3c.dom.NodeList JavaDoc;
17
18
19 import junit.framework.TestCase;
20
21 import org.objectweb.celtix.bindings.DataBindingCallback;
22 import org.objectweb.celtix.bus.bindings.TestInputStreamContext;
23 import org.objectweb.celtix.bus.bindings.TestOutputStreamContext;
24 import org.objectweb.celtix.bus.jaxws.JAXBDataBindingCallback;
25 import org.objectweb.celtix.context.GenericMessageContext;
26 import org.objectweb.celtix.context.ObjectMessageContext;
27 import org.objectweb.celtix.context.ObjectMessageContextImpl;
28 import org.objectweb.hello_world_soap_http.BadRecordLitFault;
29 import org.objectweb.hello_world_soap_http.Greeter;
30 import org.objectweb.hello_world_soap_http.NoSuchCodeLitFault;
31 import org.objectweb.hello_world_soap_http.types.ErrorCode;
32 import org.objectweb.hello_world_soap_http.types.NoSuchCodeLit;
33 import org.objectweb.type_test.doc.TypeTestPortType;
34
35 public class SoapBindingImplTest extends TestCase {
36     private SOAPBindingImpl binding;
37     private ObjectMessageContextImpl objContext;
38     private SOAPMessageContextImpl soapContext;
39     public SoapBindingImplTest(String JavaDoc arg0) {
40         super(arg0);
41     }
42
43     public static void main(String JavaDoc[] args) {
44         junit.textui.TestRunner.run(SoapBindingImplTest.class);
45     }
46     
47     protected void setUp() throws Exception JavaDoc {
48         super.setUp();
49         
50         binding = new SOAPBindingImpl(false);
51         objContext = new ObjectMessageContextImpl();
52         soapContext = new SOAPMessageContextImpl(new GenericMessageContext());
53         
54         objContext.setMethod(SOAPMessageUtil.getMethod(Greeter.class, "greetMe"));
55     }
56     
57     public void testCreateBindingMessageContext() throws Exception JavaDoc {
58         binding = new SOAPBindingImpl(false);
59         byte[] bArray = new byte[0];
60         TestInputStreamContext inCtx = new TestInputStreamContext(bArray);
61         assertNotNull(binding.createBindingMessageContext(inCtx));
62     }
63
64     public void testGetMessageFactory() throws Exception JavaDoc {
65         assertNotNull(binding.getSOAPFactory());
66     }
67     
68     public void testMarshalWrapDocLitInputMessage() throws Exception JavaDoc {
69         //Test The InputMessage of GreetMe Operation
70
soapContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
71
72         String JavaDoc arg0 = new String JavaDoc("TestSOAPInputPMessage");
73         objContext.setMessageObjects(arg0);
74
75         binding.marshal(objContext,
76                          soapContext,
77                          new JAXBDataBindingCallback(objContext.getMethod(),
78                                                      DataBindingCallback.Mode.PARTS,
79                                                      null));
80         SOAPMessage JavaDoc msg = soapContext.getMessage();
81         assertNotNull(msg);
82
83         assertTrue(msg.getSOAPBody().hasChildNodes());
84         NodeList JavaDoc list = msg.getSOAPBody().getChildNodes();
85         assertEquals(1, list.getLength());
86         Node JavaDoc wrappedNode = list.item(0).getFirstChild();
87         assertTrue(wrappedNode.hasChildNodes());
88         assertEquals(arg0, wrappedNode.getFirstChild().getNodeValue());
89     }
90
91     public void testMarshalWrapDocLitMessageForInOutVar() throws Exception JavaDoc {
92         //Test The InputMessage of GreetMe Operation
93
soapContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
94         Method JavaDoc testInt = SOAPMessageUtil.getMethod(TypeTestPortType.class, "testInt");
95         assertNotNull(testInt);
96         objContext.setMethod(testInt);
97         
98         Object JavaDoc[] methodArg = SOAPMessageUtil.getMessageObjects(testInt);
99         int arg0 = 5;
100         methodArg[0] = arg0;
101         //INOUT Variable
102
methodArg[1].getClass().getField("value").set(methodArg[1], arg0);
103         objContext.setMessageObjects(methodArg);
104
105         binding.marshal(objContext,
106                          soapContext,
107                          new JAXBDataBindingCallback(objContext.getMethod(),
108                                                      DataBindingCallback.Mode.PARTS,
109                                                      null));
110         SOAPMessage JavaDoc msg = soapContext.getMessage();
111         assertNotNull(msg);
112
113         assertTrue(msg.getSOAPBody().hasChildNodes());
114         NodeList JavaDoc list = msg.getSOAPBody().getChildNodes();
115         assertEquals(1, list.getLength());
116         list = list.item(0).getChildNodes();
117         assertEquals(2, list.getLength());
118         Node JavaDoc wrappedNode = list.item(0);
119         assertEquals(String.valueOf(arg0), wrappedNode.getFirstChild().getNodeValue());
120         
121         wrappedNode = list.item(1);
122         assertEquals(String.valueOf(arg0), wrappedNode.getFirstChild().getNodeValue());
123     }
124     
125     public void testMarshalWrapDocLitOutputMessage() throws Exception JavaDoc {
126         //Test The Output of GreetMe Operation
127
soapContext.put(ObjectMessageContext.MESSAGE_INPUT, true);
128         objContext.setMessageObjects(new Object JavaDoc[0]);
129
130         String JavaDoc arg0 = new String JavaDoc("TestSOAPOutputMessage");
131         objContext.setReturn(arg0);
132         
133         binding.marshal(objContext,
134                         soapContext,
135                          new JAXBDataBindingCallback(objContext.getMethod(),
136                                                      DataBindingCallback.Mode.PARTS,
137                                                      null));
138         SOAPMessage JavaDoc msg = soapContext.getMessage();
139         assertNotNull(msg);
140         assertTrue(msg.getSOAPBody().hasChildNodes());
141         NodeList JavaDoc list = msg.getSOAPBody().getChildNodes();
142         assertEquals(1, list.getLength());
143         Node JavaDoc wrappedNode = list.item(0).getFirstChild();
144         assertTrue(wrappedNode.hasChildNodes());
145         assertEquals(arg0, wrappedNode.getFirstChild().getNodeValue());
146     }
147
148     public void testParseWrapDocLitInputMessage() throws Exception JavaDoc {
149         //Test The InputMessage of GreetMe Operation
150
//Assumption the Wrapper element and the inner element are in the same namespace
151
//elementFormDefault is qualified
152

153         QName JavaDoc wrapName = new QName JavaDoc("http://objectweb.org/hello_world_soap_http/types", "greetMe");
154         QName JavaDoc elName = new QName JavaDoc("http://objectweb.org/hello_world_soap_http/types", "requestType");
155         String JavaDoc data = new String JavaDoc("TestSOAPInputMessage");
156         String JavaDoc str = SOAPMessageUtil.createWrapDocLitSOAPMessage(wrapName, elName, data);
157         
158         TestInputStreamContext inCtx = new TestInputStreamContext(str.getBytes());
159         binding.read(inCtx, soapContext);
160
161         SOAPMessage JavaDoc msg = soapContext.getMessage();
162         assertNotNull(msg);
163         assertTrue(msg.getSOAPBody().hasChildNodes());
164         NodeList JavaDoc list = msg.getSOAPBody().getChildNodes();
165
166         assertEquals(1, list.getLength());
167         Node JavaDoc wrappedNode = list.item(0).getFirstChild();
168         assertTrue(wrappedNode.hasChildNodes());
169         assertEquals(data, wrappedNode.getFirstChild().getNodeValue());
170         
171         //Parse SOAP 1.2 message
172
InputStream JavaDoc is = getClass().getResourceAsStream("resources/Soap12message.xml");
173         inCtx.setInputStream(is);
174         try {
175             binding.read(inCtx, soapContext);
176             fail("Should have received a SOAP FaultException");
177         } catch (SOAPFaultException sfe) {
178             SOAPFault JavaDoc sf = sfe.getFault();
179             assertNotNull("Should have a non null soap fault", sf);
180             assertEquals(SOAPConstants.FAULTCODE_VERSIONMISMATCH, sf.getFaultCodeAsQName());
181         }
182     }
183     public void testUnmarshalWrapDocLitInputMessage() throws Exception JavaDoc {
184         //Test The InputMessage of GreetMe Operation
185
QName JavaDoc wrapName = new QName JavaDoc("http://objectweb.org/hello_world_soap_http/types", "greetMe");
186         QName JavaDoc elName = new QName JavaDoc("http://objectweb.org/hello_world_soap_http/types", "requestType");
187         String JavaDoc data = new String JavaDoc("TestSOAPInputMessage");
188         String JavaDoc str = SOAPMessageUtil.createWrapDocLitSOAPMessage(wrapName, elName, data);
189         InputStream JavaDoc in = new ByteArrayInputStream JavaDoc(str.getBytes());
190         soapContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
191
192         assertNotNull(binding.getMessageFactory());
193         SOAPMessage JavaDoc soapMessage = binding.getMessageFactory().createMessage(null, in);
194         soapContext.setMessage(soapMessage);
195
196         //GreetMe method has a IN parameter
197
objContext.setMessageObjects(new Object JavaDoc[1]);
198         binding.unmarshal(soapContext,
199                           objContext,
200                           new JAXBDataBindingCallback(objContext.getMethod(),
201                                                       DataBindingCallback.Mode.PARTS,
202                                                       null));
203         
204         Object JavaDoc[] params = objContext.getMessageObjects();
205         assertNotNull(params);
206         assertNull(objContext.getReturn());
207         assertEquals(1, params.length);
208         assertEquals(data, (String JavaDoc)params[0]);
209     }
210     public void testUnmarshalWrapDocLitMessageWithInOutVar() throws Exception JavaDoc {
211         //Test The testInt Operation of TypeTestPortType SEI
212
Method JavaDoc testInt = SOAPMessageUtil.getMethod(TypeTestPortType.class, "testInt");
213         assertNotNull(testInt);
214         objContext.setMethod(testInt);
215         
216         InputStream JavaDoc is = getClass().getResourceAsStream("resources/TestIntDocLitTypeTestReq.xml");
217         assertNotNull(binding.getMessageFactory());
218         SOAPMessage JavaDoc faultMsg = binding.getMessageFactory().createMessage(null, is);
219         soapContext.setMessage(faultMsg);
220         soapContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
221
222         Object JavaDoc[] methodArg = SOAPMessageUtil.getMessageObjects(testInt);
223         assertNotNull(methodArg);
224         objContext.setMessageObjects(methodArg);
225         
226         binding.unmarshal(soapContext,
227                           objContext,
228                           new JAXBDataBindingCallback(objContext.getMethod(),
229                                                       DataBindingCallback.Mode.PARTS,
230                                                       null));
231
232         assertNotNull(objContext.getMessageObjects());
233         methodArg = objContext.getMessageObjects();
234
235         assertNull(objContext.getReturn());
236         assertEquals(3, methodArg.length);
237         assertEquals("5", String.valueOf(methodArg[0]));
238     }
239   
240     public void testUnmarshalWrapDocLiteralOutputMessage() throws Exception JavaDoc {
241
242         QName JavaDoc wrapName =
243             new QName JavaDoc("http://objectweb.org/hello_world_soap_http/types", "greetMeResponse");
244         QName JavaDoc elName =
245             new QName JavaDoc("http://objectweb.org/hello_world_soap_http/types", "responseType");
246         String JavaDoc data = new String JavaDoc("TestSOAPOutputMessage");
247         String JavaDoc str = SOAPMessageUtil.createWrapDocLitSOAPMessage(wrapName, elName, data);
248         ByteArrayInputStream JavaDoc in = new ByteArrayInputStream JavaDoc(str.getBytes());
249
250         soapContext.put(ObjectMessageContext.MESSAGE_INPUT, true);
251         assertNotNull(binding.getMessageFactory());
252         SOAPMessage JavaDoc soapMessage = binding.getMessageFactory().createMessage(null, in);
253         soapContext.setMessage(soapMessage);
254
255         binding.unmarshal(soapContext,
256                           objContext,
257                           new JAXBDataBindingCallback(objContext.getMethod(),
258                                                       DataBindingCallback.Mode.PARTS,
259                                                       null));
260         
261         assertNull(objContext.getMessageObjects());
262         assertNotNull(objContext.getReturn());
263         assertEquals(data, (String JavaDoc)objContext.getReturn());
264     }
265     
266     public void testMarshalDocLiteralUserFaults() throws Exception JavaDoc {
267         //Test The InputMessage of GreetMe Operation
268
soapContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
269
270         String JavaDoc exMessage = new String JavaDoc("Test Exception");
271         ErrorCode ec = new ErrorCode();
272         ec.setMajor((short)1);
273         ec.setMinor((short)1);
274         NoSuchCodeLit nscl = new NoSuchCodeLit();
275         nscl.setCode(ec);
276         NoSuchCodeLitFault ex = new NoSuchCodeLitFault(exMessage, nscl);
277         objContext.setException(ex);
278
279         binding.marshalFault(objContext,
280                              soapContext,
281                              new JAXBDataBindingCallback(objContext.getMethod(),
282                                                          DataBindingCallback.Mode.PARTS,
283                                                          null));
284         SOAPMessage JavaDoc msg = soapContext.getMessage();
285
286         assertNotNull(msg);
287         Node JavaDoc xmlNode = msg.getSOAPBody();
288         assertNotNull(xmlNode);
289         assertEquals(1, xmlNode.getChildNodes().getLength());
290         assertTrue(msg.getSOAPBody().hasFault());
291         SOAPFault JavaDoc fault = msg.getSOAPBody().getFault();
292         assertNotNull(fault);
293         assertEquals(
294                      getExceptionString(ex, exMessage),
295                      fault.getFaultString());
296         assertTrue(fault.hasChildNodes());
297         Detail JavaDoc detail = fault.getDetail();
298         assertNotNull(detail);
299         
300         NodeList JavaDoc list = detail.getChildNodes();
301         assertEquals(1, list.getLength());
302         
303         WebFault wfAnnotation = ex.getClass().getAnnotation(WebFault.class);
304         assertEquals(wfAnnotation.targetNamespace(), list.item(0).getNamespaceURI());
305         assertEquals(wfAnnotation.name(), list.item(0).getLocalName());
306     }
307     
308     public void testMarshalSystemFaults() throws Exception JavaDoc {
309         //Test The InputMessage of GreetMe Operation
310
soapContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
311
312         SOAPException JavaDoc se = new SOAPException JavaDoc("SAAJ Exception");
313         objContext.setException(se);
314
315         binding.marshalFault(objContext,
316                              soapContext,
317                              new JAXBDataBindingCallback(objContext.getMethod(),
318                                                          DataBindingCallback.Mode.PARTS,
319                                                          null));
320         SOAPMessage JavaDoc msg = soapContext.getMessage();
321         
322         assertNotNull(msg);
323         Node JavaDoc xmlNode = msg.getSOAPBody();
324         assertNotNull(xmlNode);
325         assertEquals(1, xmlNode.getChildNodes().getLength());
326
327         assertTrue(msg.getSOAPBody().hasFault());
328         SOAPFault JavaDoc fault = msg.getSOAPBody().getFault();
329         assertNotNull(fault);
330         assertEquals(
331                      getExceptionString(se, se.getMessage()),
332                      fault.getFaultString());
333         assertTrue(fault.hasChildNodes());
334         NodeList JavaDoc list = fault.getChildNodes();
335         assertEquals(2, list.getLength());
336     }
337
338     public void testUnmarshalDocLiteralUserFaults() throws Exception JavaDoc {
339         //Test The InputMessage of GreetMe Operation
340
soapContext.put(ObjectMessageContext.MESSAGE_INPUT, true);
341         objContext.setMethod(SOAPMessageUtil.getMethod(Greeter.class, "testDocLitFault"));
342
343         InputStream JavaDoc is = getClass().getResourceAsStream("resources/NoSuchCodeDocLiteral.xml");
344         SOAPMessage JavaDoc faultMsg = binding.getMessageFactory().createMessage(null, is);
345         soapContext.setMessage(faultMsg);
346
347         binding.unmarshalFault(soapContext, objContext,
348                                new JAXBDataBindingCallback(objContext.getMethod(),
349                                                            DataBindingCallback.Mode.PARTS,
350                                                            null));
351         assertNotNull(objContext.getException());
352         Object JavaDoc faultEx = objContext.getException();
353         assertTrue(NoSuchCodeLitFault.class.isAssignableFrom(faultEx.getClass()));
354         NoSuchCodeLitFault nscf = (NoSuchCodeLitFault)faultEx;
355         assertNotNull(nscf.getFaultInfo());
356         NoSuchCodeLit faultInfo = nscf.getFaultInfo();
357
358         assertNotNull(faultInfo.getCode());
359         ErrorCode ec = faultInfo.getCode();
360         assertEquals(ec.getMajor(), (short)666);
361         assertEquals(ec.getMinor(), (short)999);
362         
363         assertEquals(nscf.getMessage(), "Test Exception");
364         
365         is = getClass().getResourceAsStream("resources/BadRecordDocLiteral.xml");
366         faultMsg = binding.getMessageFactory().createMessage(null, is);
367         soapContext.setMessage(faultMsg);
368         binding.unmarshalFault(soapContext, objContext,
369                                new JAXBDataBindingCallback(objContext.getMethod(),
370                                                            DataBindingCallback.Mode.PARTS,
371                                                            null));
372         assertNotNull(objContext.getException());
373         faultEx = objContext.getException();
374         assertTrue(BadRecordLitFault.class.isAssignableFrom(faultEx.getClass()));
375         BadRecordLitFault brlf = (BadRecordLitFault)faultEx;
376         assertEquals(brlf.getFaultInfo(), "BadRecordTested");
377         
378         is = getClass().getResourceAsStream("resources/SystemFault.xml");
379         faultMsg = binding.getMessageFactory().createMessage(null, is);
380         soapContext.setMessage(faultMsg);
381         binding.unmarshalFault(soapContext, objContext,
382                                new JAXBDataBindingCallback(objContext.getMethod(),
383                                                            DataBindingCallback.Mode.PARTS,
384                                                            null));
385         assertNotNull(objContext.getException());
386         faultEx = objContext.getException();
387         assertTrue("Should be a SOAPFaultException",
388                    SOAPFaultException.class.isAssignableFrom(faultEx.getClass()));
389         SOAPFaultException sfe = (SOAPFaultException)faultEx;
390         SOAPFault JavaDoc sf = sfe.getFault();
391         assertNotNull(sf);
392     }
393     
394     //Bare Doc Literal Tests
395
public void testMarshalBareDocLitInputMessage() throws Exception JavaDoc {
396         //Test The InputMessage of testDocLitBare Operation
397
soapContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
398         objContext.setMethod(SOAPMessageUtil.getMethod(Greeter.class, "testDocLitBare"));
399         
400         String JavaDoc arg0 = new String JavaDoc("DocLitBareDocumentInputMessage");
401         objContext.setMessageObjects(arg0);
402
403         binding.marshal(objContext,
404                         soapContext,
405                         new JAXBDataBindingCallback(objContext.getMethod(),
406                                                     DataBindingCallback.Mode.PARTS,
407                                                     null));
408         SOAPMessage JavaDoc msg = soapContext.getMessage();
409         assertNotNull(msg);
410         //msg.writeTo(System.out);
411
assertTrue(msg.getSOAPBody().hasChildNodes());
412         NodeList JavaDoc list = msg.getSOAPBody().getChildNodes();
413         assertEquals(1, list.getLength());
414         Node JavaDoc msgnode = list.item(0).getFirstChild();
415         assertTrue(!msgnode.hasChildNodes());
416         assertEquals(arg0, msgnode.getNodeValue());
417     }
418     
419     public void testUnmarshalBareDocLitInputMessage() throws Exception JavaDoc {
420         //Test The InputMessage of testDocLitBare Operation
421
objContext.setMethod(SOAPMessageUtil.getMethod(Greeter.class, "testDocLitBare"));
422         QName JavaDoc elName = new QName JavaDoc("http://objectweb.org/hello_world_soap_http/types", "BareDocument");
423
424         String JavaDoc data = new String JavaDoc("DocLitBareDocumentInputMessage");
425         String JavaDoc str = SOAPMessageUtil.createBareDocLitSOAPMessage(elName, data);
426         
427         ByteArrayInputStream JavaDoc in = new ByteArrayInputStream JavaDoc(str.getBytes());
428         soapContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
429
430         assertNotNull(binding.getMessageFactory());
431         SOAPMessage JavaDoc soapMessage = binding.getMessageFactory().createMessage(null, in);
432         soapContext.setMessage(soapMessage);
433
434         //testDocLitBare method has a IN parameter
435
objContext.setMessageObjects(new Object JavaDoc[1]);
436         binding.unmarshal(soapContext, objContext,
437                           new JAXBDataBindingCallback(objContext.getMethod(),
438                                                       DataBindingCallback.Mode.PARTS,
439                                                       null));
440         
441         Object JavaDoc[] params = objContext.getMessageObjects();
442         assertNotNull(params);
443         assertNull(objContext.getReturn());
444         assertEquals(1, params.length);
445         assertEquals(data, (String JavaDoc)params[0]);
446     }
447     
448     public void testMarshalEmptyBody() throws Exception JavaDoc {
449        
450         soapContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
451
452         binding.marshal(objContext,
453                         soapContext,
454                         null);
455         SOAPMessage JavaDoc msg = soapContext.getMessage();
456         assertNotNull(msg);
457         assertTrue(!msg.getSOAPBody().hasChildNodes());
458         
459         TestOutputStreamContext ostreamCtx = new TestOutputStreamContext(null, soapContext);
460         
461         binding.write(soapContext, ostreamCtx);
462         
463     }
464     
465     public void testUnmarshalEmptyBody() throws Exception JavaDoc {
466         TestInputStreamContext inCtx = new TestInputStreamContext(null);
467         InputStream JavaDoc is = getClass().getResourceAsStream("resources/EmptyBody.xml");
468         inCtx.setInputStream(is);
469         binding.read(inCtx, soapContext);
470
471         SOAPMessage JavaDoc msg = soapContext.getMessage();
472         assertNotNull(msg);
473         assertTrue(!msg.getSOAPBody().hasChildNodes());
474         
475         assertNull(objContext.getMessageObjects());
476         assertNull(objContext.getReturn());
477         binding.unmarshal(soapContext, objContext, null);
478         assertNull(objContext.getMessageObjects());
479         assertNull(objContext.getReturn());
480     }
481     
482     
483     private String JavaDoc getExceptionString(Exception JavaDoc ex, String JavaDoc faultString) {
484         StringBuffer JavaDoc str = new StringBuffer JavaDoc();
485         if (ex != null) {
486             str.append(ex.getClass().getName());
487             str.append(": ");
488         }
489         str.append(faultString);
490         
491         if (!ex.getClass().isAnnotationPresent(WebFault.class)) {
492             str.append("\n");
493             for (StackTraceElement JavaDoc s : ex.getStackTrace()) {
494                 str.append(s.toString());
495                 str.append("\n");
496             }
497         }
498         return str.toString();
499     }
500 }
501
Popular Tags