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 arg0) { 31 super(arg0); 32 } 33 34 public static void main(String [] args) { 35 junit.textui.TestRunner.run(XMLBindingImplTest.class); 36 } 37 38 protected void setUp() throws Exception { 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 { 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 { 57 JAXBDataBindingCallback callback = new JAXBDataBindingCallback(objContext.getMethod(), 58 DataBindingCallback.Mode.PARTS, 59 null); 60 String operationName = callback.getOperationName(); 61 assertNotNull(operationName); 62 assertEquals("greetMe", operationName); 63 } 64 65 public void testMarshalWrapInputMessage() throws Exception { 67 xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, false); 68 String arg0 = new String ("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 public void testMarshalWrapNoPart() throws Exception { 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 public void testMarshalWrapOutputMessage() throws Exception { 107 xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, true); 108 objContext.setMessageObjects(new Object [0]); 109 110 String 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 public void testUnmarshalWrapInputMessage() throws Exception { 130 String 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 objContext.setMessageObjects(new Object [1]); 139 binding.unmarshal(xmlContext, 140 objContext, 141 new JAXBDataBindingCallback(objContext.getMethod(), 142 DataBindingCallback.Mode.PARTS, 143 null)); 144 145 Object [] params = objContext.getMessageObjects(); 146 assertNotNull(params); 147 assertNull(objContext.getReturn()); 148 assertEquals(1, params.length); 149 assertEquals(data, (String )params[0]); 150 } 151 152 public void testUnmarshalWrapOutputMessage() throws Exception { 153 xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, true); 154 String data = new String ("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 )objContext.getReturn()); 170 } 171 172 public void testMethodAnnotation() throws Exception { 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 { 181 182 xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, false); 183 184 String exMessage = new String ("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 { 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 { 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 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 getExceptionString(Exception ex, String faultString) { 277 StringBuffer str = new StringBuffer (); 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 s : ex.getStackTrace()) { 287 str.append(s.toString()); 288 str.append("\n"); 289 } 290 } 291 return str.toString(); 292 } 293 } 294 | Popular Tags |