KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > bus > bindings > xml > XMLBindingImplTest


1 package org.objectweb.celtix.bus.bindings.xml;
2
3 import java.io.*;
4 import java.net.*;
5 import java.util.*;
6 import javax.jws.WebResult;
7 import javax.xml.ws.WebFault;
8
9 import org.w3c.dom.*;
10
11 import junit.framework.TestCase;
12
13 import org.objectweb.celtix.bindings.DataBindingCallback;
14 import org.objectweb.celtix.bus.bindings.TestInputStreamContext;
15 import org.objectweb.celtix.bus.jaxws.JAXBDataBindingCallback;
16 import org.objectweb.celtix.context.GenericMessageContext;
17 import org.objectweb.celtix.context.ObjectMessageContext;
18 import org.objectweb.celtix.context.ObjectMessageContextImpl;
19 import org.objectweb.celtix.helpers.XMLUtils;
20 import org.objectweb.hello_world_xml_http.wrapped.Greeter;
21 import org.objectweb.hello_world_xml_http.wrapped.PingMeFault;
22 import org.objectweb.hello_world_xml_http.wrapped.types.FaultDetail;
23
24 public class XMLBindingImplTest extends TestCase {
25     private XMLBindingImpl binding;
26     private ObjectMessageContextImpl objContext;
27     private XMLMessageContextImpl xmlContext;
28     private XMLUtils xmlUtils;
29     
30     public XMLBindingImplTest(String JavaDoc arg0) {
31         super(arg0);
32     }
33
34     public static void main(String JavaDoc[] args) {
35         junit.textui.TestRunner.run(XMLBindingImplTest.class);
36     }
37     
38     protected void setUp() throws Exception JavaDoc {
39         super.setUp();
40         
41         xmlUtils = new XMLUtils();
42         binding = new XMLBindingImpl(false);
43         objContext = new ObjectMessageContextImpl();
44         xmlContext = new XMLMessageContextImpl(new GenericMessageContext());
45         
46         objContext.setMethod(ClassUtils.getMethod(Greeter.class, "greetMe"));
47     }
48     
49     public void testCreateBindingMessageContext() throws Exception JavaDoc {
50         binding = new XMLBindingImpl(false);
51         byte[] bArray = new byte[0];
52         TestInputStreamContext inCtx = new TestInputStreamContext(bArray);
53         assertNotNull(binding.createBindingMessageContext(inCtx));
54     }
55     
56     public void testOperationName() throws Exception JavaDoc {
57         JAXBDataBindingCallback callback = new JAXBDataBindingCallback(objContext.getMethod(),
58                                                                         DataBindingCallback.Mode.PARTS,
59                                                                         null);
60         String JavaDoc operationName = callback.getOperationName();
61         assertNotNull(operationName);
62         assertEquals("greetMe", operationName);
63     }
64     
65     //Test The InputMessage of GreetMe Operation -- wrapped style
66
public void testMarshalWrapInputMessage() throws Exception JavaDoc {
67         xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
68         String JavaDoc arg0 = new String JavaDoc("TestXMLInputMessage");
69         objContext.setMessageObjects(arg0);
70
71         binding.marshal(objContext,
72                         xmlContext,
73                         new JAXBDataBindingCallback(objContext.getMethod(),
74                                                     DataBindingCallback.Mode.PARTS,
75                                                     null));
76         XMLMessage msg = xmlContext.getMessage();
77         assertNotNull(msg);
78
79         InputStream is = getClass().getResourceAsStream("resources/GreetMeWrappedReq.xml");
80         Document expectDOM = xmlUtils.parse(is);
81         Document resultDOM = msg.getRoot();
82         is.close();
83         assertTrue(expectDOM.isEqualNode(resultDOM));
84     }
85
86     // Test sayHi operation which don't have part in request message.
87
public void testMarshalWrapNoPart() throws Exception JavaDoc {
88         xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
89         objContext.setMethod(ClassUtils.getMethod(Greeter.class, "sayHi"));
90         binding.marshal(objContext,
91                         xmlContext,
92                         new JAXBDataBindingCallback(objContext.getMethod(),
93                                                     DataBindingCallback.Mode.PARTS,
94                                                     null));
95         XMLMessage msg = xmlContext.getMessage();
96         assertNotNull(msg);
97
98         InputStream is = getClass().getResourceAsStream("resources/SayHiWrappedReq.xml");
99         Document expectDOM = xmlUtils.parse(is);
100         Document resultDOM = msg.getRoot();
101         is.close();
102         assertTrue(expectDOM.isEqualNode(resultDOM));
103     }
104     
105     //Test the Output of GreetMe Operation
106
public void testMarshalWrapOutputMessage() throws Exception JavaDoc {
107         xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, true);
108         objContext.setMessageObjects(new Object JavaDoc[0]);
109         
110         String JavaDoc arg0 = "TestXMLOutputMessage";
111         objContext.setReturn(arg0);
112         
113         binding.marshal(objContext,
114                         xmlContext,
115                         new JAXBDataBindingCallback(objContext.getMethod(),
116                                                     DataBindingCallback.Mode.PARTS,
117                                                     null));
118         XMLMessage msg = xmlContext.getMessage();
119         assertNotNull(msg);
120         assertTrue(msg.getRoot().hasChildNodes());
121         NodeList list = msg.getRoot().getChildNodes();
122         assertEquals(1, list.getLength());
123         Node wrappedNode = list.item(0).getFirstChild();
124         assertTrue(wrappedNode.hasChildNodes());
125         assertEquals(arg0, wrappedNode.getFirstChild().getNodeValue());
126     }
127
128     // Test unmashall greetMe method
129
public void testUnmarshalWrapInputMessage() throws Exception JavaDoc {
130         String JavaDoc data = "TestXMLInputMessage";
131         InputStream in = getClass().getResourceAsStream("resources/GreetMeWrappedReq.xml");
132         assertNotNull(binding.getMessageFactory());
133         XMLMessage xmlMessage = binding.getMessageFactory().createMessage(in);
134         xmlContext.setMessage(xmlMessage);
135         xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
136         
137         //GreetMe method has a IN parameter
138
objContext.setMessageObjects(new Object JavaDoc[1]);
139         binding.unmarshal(xmlContext,
140                           objContext,
141                           new JAXBDataBindingCallback(objContext.getMethod(),
142                                                       DataBindingCallback.Mode.PARTS,
143                                                       null));
144         
145         Object JavaDoc[] params = objContext.getMessageObjects();
146         assertNotNull(params);
147         assertNull(objContext.getReturn());
148         assertEquals(1, params.length);
149         assertEquals(data, (String JavaDoc)params[0]);
150     }
151
152     public void testUnmarshalWrapOutputMessage() throws Exception JavaDoc {
153         xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, true);
154         String JavaDoc data = new String JavaDoc("TestXMLOutputMessage");
155         
156         InputStream in = getClass().getResourceAsStream("resources/GreetMeWrappedResp.xml");
157         assertNotNull(binding.getMessageFactory());
158         XMLMessage xmlMessage = binding.getMessageFactory().createMessage(in);
159         xmlContext.setMessage(xmlMessage);
160
161         binding.unmarshal(xmlContext,
162                           objContext,
163                           new JAXBDataBindingCallback(objContext.getMethod(),
164                                                       DataBindingCallback.Mode.PARTS,
165                                                       null));
166         
167         assertNull(objContext.getMessageObjects());
168         assertNotNull(objContext.getReturn());
169         assertEquals(data, (String JavaDoc)objContext.getReturn());
170     }
171
172     public void testMethodAnnotation() throws Exception JavaDoc {
173         JAXBDataBindingCallback callback = new JAXBDataBindingCallback(objContext.getMethod(),
174                                                                        DataBindingCallback.Mode.PARTS,
175                                                                        null);
176         WebResult resultAnnotation = callback.getWebResult();
177         assertEquals("responseType", resultAnnotation.name());
178     }
179
180     public void testWrappedMarshalFault() throws Exception JavaDoc {
181
182         xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
183
184         String JavaDoc exMessage = new String JavaDoc("Test Exception");
185         FaultDetail ec = new FaultDetail();
186         ec.setMajor((short)2);
187         ec.setMinor((short)1);
188         PingMeFault ex = new PingMeFault(exMessage, ec);
189         objContext.setException(ex);
190
191         binding.marshalFault(objContext,
192                              xmlContext,
193                              new JAXBDataBindingCallback(objContext.getMethod(),
194                                                          DataBindingCallback.Mode.PARTS,
195                                                          null));
196         XMLMessage msg = xmlContext.getMessage();
197
198         assertNotNull(msg);
199         Node xmlNode = msg.getRoot();
200
201         assertNotNull(xmlNode);
202         assertEquals(1, xmlNode.getChildNodes().getLength());
203         assertTrue(msg.hasFault());
204         XMLFault fault = msg.getFault();
205         assertNotNull(fault);
206         assertEquals(getExceptionString(ex, exMessage),
207                      fault.getFaultString());
208
209         assertTrue(fault.hasChildNodes());
210         Node detail = fault.getFaultDetail();
211         assertNotNull(detail);
212         
213         NodeList list = detail.getChildNodes();
214         assertEquals(1, list.getLength());
215         
216         WebFault wfAnnotation = ex.getClass().getAnnotation(WebFault.class);
217         assertEquals(wfAnnotation.targetNamespace(), list.item(0).getNamespaceURI());
218         assertEquals(wfAnnotation.name(), list.item(0).getLocalName());
219     }
220
221     public void testMarshalSystemFaults() throws Exception JavaDoc {
222         xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
223
224         XMLBindingException se = new XMLBindingException("XML Binding Exception");
225         objContext.setException(se);
226
227         binding.marshalFault(objContext,
228                              xmlContext,
229                              new JAXBDataBindingCallback(objContext.getMethod(),
230                                                          DataBindingCallback.Mode.PARTS,
231                                                          null));
232         XMLMessage msg = xmlContext.getMessage();
233         
234         assertNotNull(msg);
235         Node xmlNode = msg.getRoot();
236         assertNotNull(xmlNode);
237         assertEquals(1, xmlNode.getChildNodes().getLength());
238
239         assertTrue(msg.hasFault());
240         XMLFault fault = msg.getFault();
241         assertNotNull(fault);
242         assertEquals(getExceptionString(se, se.getMessage()),
243                      fault.getFaultString());
244         assertTrue(fault.hasChildNodes());
245         NodeList list = fault.getFaultRoot().getChildNodes();
246         assertEquals(1, list.getLength());
247     }
248
249     public void testUnmarshalDocLiteralUserFaults() throws Exception JavaDoc {
250         xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, true);
251         objContext.setMethod(ClassUtils.getMethod(Greeter.class, "pingMe"));
252
253         InputStream is = getClass().getResourceAsStream("resources/xmlfault.xml");
254         XMLMessage faultMsg = binding.getMessageFactory().createMessage(is);
255         xmlContext.setMessage(faultMsg);
256
257         binding.unmarshalFault(xmlContext,
258                                objContext,
259                                new JAXBDataBindingCallback(objContext.getMethod(),
260                                                            DataBindingCallback.Mode.PARTS,
261                                                            null));
262         assertNotNull(objContext.getException());
263         Object JavaDoc faultEx = objContext.getException();
264         
265         assertTrue(PingMeFault.class.isAssignableFrom(faultEx.getClass()));
266         PingMeFault nscf = (PingMeFault)faultEx;
267         assertNotNull(nscf.getFaultInfo());
268         FaultDetail faultInfo = nscf.getFaultInfo();
269
270         assertEquals(faultInfo.getMajor(), (short)2);
271         assertEquals(faultInfo.getMinor(), (short)1);
272         assertEquals("org.objectweb.hello_world_xml_http.wrapped.PingMeFault: PingMeFault raised by server",
273                      nscf.getMessage());
274     }
275
276     private String JavaDoc getExceptionString(Exception JavaDoc ex, String JavaDoc faultString) {
277         StringBuffer JavaDoc str = new StringBuffer JavaDoc();
278         if (ex != null) {
279             str.append(ex.getClass().getName());
280             str.append(": ");
281         }
282         str.append(faultString);
283         
284         if (!ex.getClass().isAnnotationPresent(WebFault.class)) {
285             str.append("\n");
286             for (StackTraceElement JavaDoc s : ex.getStackTrace()) {
287                 str.append(s.toString());
288                 str.append("\n");
289             }
290         }
291         return str.toString();
292     }
293 }
294
Popular Tags