1 package org.objectweb.celtix.bus.bindings.soap; 2 3 import java.io.ByteArrayInputStream ; 4 import java.io.IOException ; 5 import java.io.InputStream ; 6 import java.io.OutputStream ; 7 import java.lang.reflect.Method ; 8 import java.net.URL ; 9 import java.util.List ; 10 import java.util.Map ; 11 import java.util.concurrent.ConcurrentHashMap ; 12 import java.util.concurrent.Executor ; 13 14 import javax.jws.WebMethod; 15 import javax.jws.soap.SOAPBinding.Style; 16 import javax.xml.namespace.QName ; 17 18 import javax.xml.soap.Detail ; 19 import javax.xml.soap.MessageFactory ; 20 import javax.xml.soap.SOAPFault ; 21 import javax.xml.soap.SOAPMessage ; 22 23 import javax.xml.transform.Source ; 24 import javax.xml.transform.dom.DOMSource ; 25 import javax.xml.ws.Binding; 26 import javax.xml.ws.Endpoint; 27 import javax.xml.ws.Provider; 28 import javax.xml.ws.WebFault; 29 import javax.xml.ws.WebServiceProvider; 30 import javax.xml.ws.handler.Handler; 31 import javax.xml.ws.handler.MessageContext; 32 33 import org.w3c.dom.Node ; 34 import org.w3c.dom.NodeList ; 35 36 import junit.framework.TestCase; 37 38 import org.objectweb.celtix.Bus; 39 import org.objectweb.celtix.bindings.DataBindingCallback; 40 import org.objectweb.celtix.bindings.DataBindingCallback.Mode; 41 import org.objectweb.celtix.bindings.ServerBindingEndpointCallback; 42 import org.objectweb.celtix.bindings.ServerDataBindingCallback; 43 import org.objectweb.celtix.bus.bindings.TestInputStreamContext; 44 import org.objectweb.celtix.bus.bindings.TestOutputStreamContext; 45 import org.objectweb.celtix.bus.jaxws.EndpointUtils; 46 import org.objectweb.celtix.bus.jaxws.JAXBDataBindingCallback; 47 import org.objectweb.celtix.bus.jaxws.ServerDynamicDataBindingCallback; 48 import org.objectweb.celtix.context.InputStreamMessageContext; 49 import org.objectweb.celtix.context.ObjectMessageContext; 50 import org.objectweb.celtix.context.OutputStreamMessageContext; 51 import org.objectweb.celtix.transports.ServerTransport; 52 import org.objectweb.celtix.transports.ServerTransportCallback; 53 import org.objectweb.celtix.ws.addressing.EndpointReferenceType; 54 import org.objectweb.celtix.wsdl.EndpointReferenceUtils; 55 56 import org.objectweb.hello_world_soap_http.DocLitBareImpl; 57 import org.objectweb.hello_world_soap_http.HWSoapMessageProvider; 58 import org.objectweb.hello_world_soap_http.HWSourcePayloadProvider; 59 import org.objectweb.hello_world_soap_http.HelloWorldServiceProvider; 60 import org.objectweb.hello_world_soap_http.NoSuchCodeLitFault; 61 import org.objectweb.hello_world_soap_http.NotAnnotatedGreeterImpl; 62 import org.objectweb.hello_world_soap_http.NotAnnotatedGreeterImplRPCLit; 63 64 public class SOAPServerBindingTest extends TestCase { 65 Bus bus; 66 EndpointReferenceType epr; 67 68 public SOAPServerBindingTest(String arg0) { 69 super(arg0); 70 } 71 72 public static void main(String [] args) { 73 junit.textui.TestRunner.run(SOAPServerBindingTest.class); 74 } 75 76 protected void setUp() throws Exception { 77 super.setUp(); 78 bus = Bus.init(); 79 epr = new EndpointReferenceType(); 80 81 URL wsdlUrl = getClass().getResource("/wsdl/hello_world.wsdl"); 82 QName serviceName = new QName ("http://objectweb.org/hello_world_soap_http", "SOAPService"); 83 epr = EndpointReferenceUtils.getEndpointReference(wsdlUrl, serviceName, "SoapPort"); 84 } 85 86 public void testGetBinding() throws Exception { 87 SOAPServerBinding serverBinding = new SOAPServerBinding(bus, epr, null); 88 assertNotNull(serverBinding.getBinding()); 89 } 90 91 public void testProviderDispatchMessageModeSourceData() throws Exception { 92 HelloWorldServiceProvider provider = new HelloWorldServiceProvider(); 93 TestEndpointImpl testEndpoint 94 = new TestEndpointImpl( 95 provider, 96 DataBindingCallback.Mode.MESSAGE, 97 DOMSource .class, 98 new QName []{ 99 new QName ("http://objectweb.org/hello_world_soap_http/types", 100 "sayHi") 101 }); 102 TestServerBinding serverBinding = new TestServerBinding(bus, epr, testEndpoint, testEndpoint); 103 TestServerTransport serverTransport = new TestServerTransport(bus, epr); 104 TestInputStreamContext inCtx = new TestInputStreamContext(null); 105 106 InputStream is = getClass().getResourceAsStream("resources/sayHiDocLiteralReq.xml"); 107 inCtx.setInputStream(is); 108 109 serverBinding.testDispatch(inCtx, serverTransport); 110 111 assertEquals(1, provider.getInvokeCount()); 112 assertNotNull(serverTransport.getOutputStreamContext()); 113 assertFalse(serverTransport.getOutputStreamContext().isFault()); 114 OutputStream os = serverTransport.getOutputStreamContext().getOutputStream(); 115 assertNotNull(os); 116 } 117 118 public void testProviderDispatchMessageModeSOAPMessageData() throws Exception { 119 HWSoapMessageProvider provider = new HWSoapMessageProvider(); 120 TestEndpointImpl testEndpoint = new TestEndpointImpl( 121 provider, 122 DataBindingCallback.Mode.MESSAGE, 123 SOAPMessage .class, 124 new QName []{ 125 new QName ("http://objectweb.org/hello_world_soap_http/types", 126 "sayHi") 127 }); 128 TestServerBinding serverBinding = new TestServerBinding(bus, epr, testEndpoint, testEndpoint); 129 TestServerTransport serverTransport = new TestServerTransport(bus, epr); 130 TestInputStreamContext inCtx = new TestInputStreamContext(null); 131 132 InputStream is = getClass().getResourceAsStream("resources/sayHiDocLiteralReq.xml"); 133 inCtx.setInputStream(is); 134 135 serverBinding.testDispatch(inCtx, serverTransport); 136 137 assertEquals(1, provider.getInvokeCount()); 138 assertNotNull(serverTransport.getOutputStreamContext()); 139 assertFalse(serverTransport.getOutputStreamContext().isFault()); 140 OutputStream os = serverTransport.getOutputStreamContext().getOutputStream(); 141 assertNotNull(os); 142 } 143 144 public void testProviderDispatchPayloadModeSourceData() throws Exception { 145 HWSourcePayloadProvider provider = new HWSourcePayloadProvider(); 146 TestEndpointImpl testEndpoint = new TestEndpointImpl( 147 provider, 148 DataBindingCallback.Mode.PAYLOAD, 149 DOMSource .class, 150 new QName []{ 151 new QName ("http://objectweb.org/hello_world_soap_http/types", 152 "sayHi") 153 }); 154 TestServerBinding serverBinding = new TestServerBinding(bus, epr, testEndpoint, testEndpoint); 155 TestServerTransport serverTransport = new TestServerTransport(bus, epr); 156 TestInputStreamContext inCtx = new TestInputStreamContext(null); 157 158 InputStream is = getClass().getResourceAsStream("resources/sayHiDocLiteralReq.xml"); 159 inCtx.setInputStream(is); 160 161 serverBinding.testDispatch(inCtx, serverTransport); 162 163 assertEquals(1, provider.getInvokeCount()); 164 assertNotNull(serverTransport.getOutputStreamContext()); 165 assertFalse(serverTransport.getOutputStreamContext().isFault()); 166 OutputStream os = serverTransport.getOutputStreamContext().getOutputStream(); 167 assertNotNull(os); 168 } 169 public void testDocLitDispatch() throws Exception { 170 QName wrapName = new QName ("http://objectweb.org/hello_world_soap_http/types", "greetMe"); 171 QName wrapName2 = new QName ("http://objectweb.org/hello_world_soap_http/types", "sayHi"); 172 173 TestEndpointImpl testEndpoint = new TestEndpointImpl(new NotAnnotatedGreeterImpl(), 174 new QName []{wrapName, wrapName2}); 175 TestServerBinding serverBinding = new TestServerBinding(bus, epr, testEndpoint, testEndpoint); 176 177 TestServerTransport serverTransport = new TestServerTransport(bus, epr); 178 179 QName elName = new QName ("http://objectweb.org/hello_world_soap_http/types", "requestType"); 180 String data = new String ("TestSOAPInputMessage"); 181 182 byte[] bArray = SOAPMessageUtil.createWrapDocLitSOAPMessage(wrapName, elName, data).getBytes(); 183 TestInputStreamContext inCtx = new TestInputStreamContext(bArray); 184 185 serverBinding.testDispatch(inCtx, serverTransport); 186 187 assertNotNull(serverTransport.getOutputStreamContext()); 188 assertFalse(serverTransport.getOutputStreamContext().isFault()); 189 OutputStream os = serverTransport.getOutputStreamContext().getOutputStream(); 190 assertNotNull(os); 191 192 wrapName = new QName ("http://objectweb.org/hello_world_soap_http/types", "greetMeResponse"); 193 elName = new QName ("http://objectweb.org/hello_world_soap_http/types", "responseType"); 194 195 String ref = SOAPMessageUtil.createWrapDocLitSOAPMessage(wrapName, elName, data); 196 197 assertEquals(ref, os.toString()); 198 199 inCtx.clear(); 201 InputStream is = getClass().getResourceAsStream("resources/sayHiDocLiteralReq.xml"); 202 inCtx.setInputStream(is); 203 serverBinding.testDispatch(inCtx, serverTransport); 204 assertNotNull(serverTransport.getOutputStreamContext()); 205 assertFalse(serverTransport.getOutputStreamContext().isFault()); 206 is.close(); 207 } 208 209 public void testRPCLitDispatch() throws Exception { 210 QName qn = new QName ("http://objectweb.org/hello_world_rpclit", "sayHi"); 211 TestEndpointImpl testEndpoint = new TestEndpointImpl(new NotAnnotatedGreeterImplRPCLit(), 212 new QName []{qn}); 213 TestServerBinding serverBinding = new TestServerBinding(bus, epr, testEndpoint, testEndpoint); 214 TestServerTransport serverTransport = new TestServerTransport(bus, epr); 215 TestInputStreamContext inCtx = new TestInputStreamContext(null); 216 217 InputStream is = getClass().getResourceAsStream("resources/sayHiRpcLiteralReq.xml"); 218 inCtx.setInputStream(is); 219 serverBinding.testDispatch(inCtx, serverTransport); 220 is.close(); 221 222 TestOutputStreamContext osc = 223 (TestOutputStreamContext)serverTransport.getOutputStreamContext(); 224 assertNotNull(osc); 225 assertFalse(osc.isFault()); 226 227 ByteArrayInputStream bais = new ByteArrayInputStream (osc.getOutputStreamBytes()); 228 229 231 SOAPMessage msg = MessageFactory.newInstance().createMessage(null, bais); 232 assertNotNull(msg); 233 assertFalse(msg.getSOAPBody().hasFault()); 234 Node xmlNode = msg.getSOAPBody(); 235 assertNotNull(xmlNode); 236 assertEquals(1, xmlNode.getChildNodes().getLength()); 237 xmlNode = xmlNode.getFirstChild(); 239 assertEquals("sayHiResponse", xmlNode.getLocalName()); 240 } 241 242 public void testDispatchOneway() throws Exception { 243 QName wrapName = new QName ("http://objectweb.org/hello_world_soap_http/types", "greetMeOneWay"); 244 TestEndpointImpl testEndpoint = new TestEndpointImpl(new NotAnnotatedGreeterImpl(), 245 new QName []{wrapName}); 246 TestServerBinding serverBinding = new TestServerBinding(bus, epr, testEndpoint, testEndpoint); 247 TestServerTransport serverTransport = new TestServerTransport(bus, epr); 248 249 QName elName = new QName ("http://objectweb.org/hello_world_soap_http/types", "requestType"); 250 String data = new String ("TestSOAPInputMessage"); 251 252 byte[] bArray = SOAPMessageUtil.createWrapDocLitSOAPMessage(wrapName, elName, data).getBytes(); 253 254 TestInputStreamContext inCtx = new TestInputStreamContext(bArray); 255 serverBinding.testDispatch(inCtx, serverTransport); 256 257 assertNotNull(serverTransport.getOutputStreamContext()); 258 OutputStream os = serverTransport.getOutputStreamContext().getOutputStream(); 259 assertNotNull(os); 260 261 assertEquals("", os.toString()); 262 263 } 264 265 public void testDocLitBareDispatch() throws Exception { 266 DocLitBareImpl dc = new DocLitBareImpl(); 267 TestEndpointImpl testEndpoint = new TestEndpointImpl(dc, null); 268 TestServerBinding serverBinding = new TestServerBinding(bus, epr, testEndpoint, testEndpoint); 269 TestServerTransport serverTransport = new TestServerTransport(bus, epr); 270 TestInputStreamContext inCtx = new TestInputStreamContext(null); 271 272 InputStream is = getClass().getResourceAsStream("resources/sayHiDocLiteralBareReq.xml"); 273 inCtx.setInputStream(is); 274 serverBinding.testDispatch(inCtx, serverTransport); 275 is.close(); 276 277 assertEquals(1, dc.getSayHiInvocationCount()); 278 assertNotNull(serverTransport.getOutputStreamContext()); 279 assertFalse("Should not have a SOAP Fault", serverTransport.getOutputStreamContext().isFault()); 280 } 281 public void testDocLitBareNoParamDispatch() throws Exception { 282 DocLitBareImpl dc = new DocLitBareImpl(); 283 TestEndpointImpl testEndpoint = new TestEndpointImpl(dc, null); 284 TestServerBinding serverBinding = new TestServerBinding(bus, epr, testEndpoint, testEndpoint); 285 TestServerTransport serverTransport = new TestServerTransport(bus, epr); 286 TestInputStreamContext inCtx = new TestInputStreamContext(null); 287 288 InputStream is = getClass().getResourceAsStream("resources/EmptyBody.xml"); 289 inCtx.setInputStream(is); 290 serverBinding.testDispatch(inCtx, serverTransport); 291 is.close(); 292 293 assertEquals(1, dc.getBareNoParamCount()); 294 assertNotNull(serverTransport.getOutputStreamContext()); 295 assertFalse("Should not have a SOAP Fault", serverTransport.getOutputStreamContext().isFault()); 296 } 297 public void testUserFaultDispatch() throws Exception { 298 QName qn = new QName ("http://objectweb.org/hello_world_soap_http/types", "testDocLitFault"); 299 TestEndpointImpl testEndpoint = new TestEndpointImpl(new NotAnnotatedGreeterImpl(), 300 new QName []{qn}); 301 TestServerBinding serverBinding = new TestServerBinding(bus, epr, testEndpoint, testEndpoint); 302 TestServerTransport serverTransport = new TestServerTransport(bus, epr); 303 InputStream is = getClass().getResourceAsStream("resources/TestDocLitFaultReq.xml"); 304 305 TestInputStreamContext inCtx = new TestInputStreamContext(null); 306 inCtx.setInputStream(is); 307 serverBinding.testDispatch(inCtx, serverTransport); 308 309 assertNotNull(serverTransport.getOutputStreamContext()); 310 assertTrue("Expecting a SOAP Fault", serverTransport.getOutputStreamContext().isFault()); 311 312 TestOutputStreamContext osc = (TestOutputStreamContext)serverTransport.getOutputStreamContext(); 313 ByteArrayInputStream bais = new ByteArrayInputStream (osc.getOutputStreamBytes()); 314 checkUserFaultMessage(bais, NoSuchCodeLitFault.class, "TestException"); 315 } 316 317 public void testSystemFaultDispatch() throws Exception { 318 TestEndpointImpl testEndpoint = new TestEndpointImpl(new NotAnnotatedGreeterImpl(), 319 new QName []{}); 320 TestServerBinding serverBinding = new TestServerBinding(bus, epr, testEndpoint, testEndpoint); 321 TestServerTransport serverTransport = new TestServerTransport(bus, epr); 322 InputStream is = getClass().getResourceAsStream("resources/BadSoapMessage.xml"); 323 324 TestInputStreamContext inCtx = new TestInputStreamContext(null); 325 inCtx.setInputStream(is); 326 serverBinding.testDispatch(inCtx, serverTransport); 327 328 assertNotNull(serverTransport.getOutputStreamContext()); 329 assertTrue("Expecting a SOAP Fault", serverTransport.getOutputStreamContext().isFault()); 330 331 TestOutputStreamContext osc = (TestOutputStreamContext)serverTransport.getOutputStreamContext(); 332 ByteArrayInputStream bais = new ByteArrayInputStream (osc.getOutputStreamBytes()); 333 checkSystemFaultMessage(bais); 334 } 335 336 private void checkSystemFaultMessage(ByteArrayInputStream bais) throws Exception { 337 SOAPMessage msg = MessageFactory.newInstance().createMessage(null, bais); 338 assertNotNull(msg); 339 Node xmlNode = msg.getSOAPBody(); 340 assertNotNull(xmlNode); 341 assertEquals(1, xmlNode.getChildNodes().getLength()); 342 343 assertTrue(msg.getSOAPBody().hasFault()); 344 345 SOAPFault fault = msg.getSOAPBody().getFault(); 346 assertNotNull(fault); 347 assertTrue(fault.hasChildNodes()); 348 349 Detail detail = fault.getDetail(); 351 if (detail != null) { 352 assertFalse("Detail should be non-existent or empty", detail.hasChildNodes()); 353 } 354 } 355 356 private void checkUserFaultMessage(ByteArrayInputStream bais, 357 Class <? extends Exception > clazz, 358 String faultString) throws Exception { 359 360 SOAPMessage msg = MessageFactory.newInstance().createMessage(null, bais); 361 assertNotNull(msg); 362 assertTrue(msg.getSOAPBody().hasFault()); 363 SOAPFault fault = msg.getSOAPBody().getFault(); 364 assertNotNull(fault); 365 366 StringBuffer str = new StringBuffer (clazz.getName()); 367 str.append(": "); 368 str.append(faultString); 369 assertEquals(str.toString(), fault.getFaultString()); 370 assertTrue(fault.hasChildNodes()); 371 Detail detail = fault.getDetail(); 372 assertNotNull(detail); 373 374 NodeList list = detail.getChildNodes(); 375 assertEquals(1, list.getLength()); 376 377 WebFault wfAnnotation = clazz.getAnnotation(WebFault.class); 378 assertNotNull(wfAnnotation); 379 assertEquals(wfAnnotation.targetNamespace(), list.item(0).getNamespaceURI()); 380 assertEquals(wfAnnotation.name(), list.item(0).getLocalName()); 381 } 382 383 class TestServerBinding extends SOAPServerBinding { 384 385 private QName qn; 386 387 public TestServerBinding(Bus b, EndpointReferenceType ref, Endpoint ep, 388 ServerBindingEndpointCallback cbFactory) { 389 super(b, ref, cbFactory); 390 } 391 392 public ServerTransport getTransport(EndpointReferenceType ref) throws Exception { 393 return createTransport(ref); 394 } 395 396 public void testDispatch(InputStreamMessageContext inCtx, ServerTransport t) { 397 super.dispatch(inCtx, t); 398 } 399 400 public QName getOperationName(MessageContext ctx) { 401 qn = super.getOperationName(ctx); 402 return qn; 403 } 404 405 public QName getInvokedMethod() { 406 return qn; 407 } 408 } 409 410 class TestServerTransport implements ServerTransport { 411 private OutputStreamMessageContext osmc; 412 public TestServerTransport(Bus b, EndpointReferenceType ref) { 413 } 414 415 public void shutdown() { 416 } 418 419 public OutputStreamMessageContext rebase(MessageContext context, 420 EndpointReferenceType decoupledResponseEndpoint) 421 throws IOException { 422 return null; 423 } 424 425 public OutputStreamMessageContext createOutputStreamContext(MessageContext context) 426 throws IOException { 427 osmc = new TestOutputStreamContext(null, context); 428 return osmc; 429 } 430 431 public void finalPrepareOutputStreamContext(OutputStreamMessageContext context) throws IOException { 432 } 433 434 public void postDispatch(MessageContext bindingContext, 435 OutputStreamMessageContext context) throws IOException { 436 } 437 438 public void activate(ServerTransportCallback callback) throws IOException { } 439 440 public void deactivate() throws IOException { } 441 442 public OutputStreamMessageContext getOutputStreamContext() { 443 return osmc; 444 } 445 } 446 447 final class TestEndpointImpl extends javax.xml.ws.Endpoint implements ServerBindingEndpointCallback { 448 449 private final Object implementor; 450 private WebServiceProvider wsProvider; 451 private DataBindingCallback.Mode mode; 452 private Class <?> dataClazz; 453 private Map <QName , ServerDataBindingCallback> callbackMap 454 = new ConcurrentHashMap <QName , ServerDataBindingCallback>(); 455 456 TestEndpointImpl(Object impl, QName ops[]) { 457 implementor = impl; 458 mode = DataBindingCallback.Mode.PARTS; 459 initOpMap(ops); 460 } 461 462 TestEndpointImpl(Object impl, 463 DataBindingCallback.Mode dataMode, 464 Class <?> clazz, 465 QName ops[]) { 466 implementor = impl; 467 mode = dataMode; 468 dataClazz = clazz; 469 initOpMap(ops); 470 } 471 472 473 private void initOpMap(QName ops[]) { 474 if (ops != null) { 475 for (QName op : ops) { 476 callbackMap.put(op, getDataBindingCallback(op, mode)); 477 } 478 } else { 479 addMethods(implementor.getClass()); 480 } 481 } 482 private void addMethods(Class <?> cls) { 483 if (cls == null) { 484 return; 485 } 486 for (Method meth : cls.getMethods()) { 487 WebMethod wm = meth.getAnnotation(WebMethod.class); 488 if (wm != null) { 489 QName op = new QName ("", wm.operationName()); 490 ServerDataBindingCallback cb = getDataBindingCallback(op, mode); 491 callbackMap.put(op, cb); 492 } 493 } 494 for (Class <?> cls2 : cls.getInterfaces()) { 495 addMethods(cls2); 496 } 497 addMethods(cls.getSuperclass()); 498 } 499 500 @SuppressWarnings ("unchecked") 501 private ServerDataBindingCallback getDataBindingCallback(QName operationName, 502 Mode dataMode) { 503 if (dataMode == DataBindingCallback.Mode.PARTS) { 504 return new JAXBDataBindingCallback(getMethod(operationName), 505 mode, 506 null, 507 null, 508 implementor); 509 } 510 511 return new ServerDynamicDataBindingCallback(dataClazz, mode, (Provider<?>)implementor); 512 } 513 514 public ServerDataBindingCallback getDataBindingCallback(QName operationName, 515 ObjectMessageContext objContext, 516 Mode dataMode) { 517 if (operationName == null) { 518 return null; 519 } 520 return callbackMap.get(operationName); 521 } 522 523 public Binding getBinding() { 524 return null; 525 } 526 527 public List <Handler> getHandlerChain() { 528 return null; 529 } 530 531 public Object getImplementor() { 532 return implementor; 533 } 534 535 public List <Source > getMetadata() { 536 return null; 537 } 538 539 public Executor getExecutor() { 540 return null; 541 } 542 543 public boolean isPublished() { 544 return false; 545 } 546 547 public void publish(Object serverContext) { } 548 549 public void publish(String address) { } 550 551 public void setHandlerChain(List <Handler> h) { 552 } 553 554 public void setMetadata(List <Source > m) { 555 } 556 557 public void setExecutor(Executor ex) { 558 } 559 560 public void stop() { } 561 562 @Override 563 public Map <String , Object > getProperties() { 564 return null; 566 } 567 568 @Override 569 public void setProperties(Map <String , Object > arg0) { 570 572 } 573 574 public Method getMethod(QName operationName) { 575 if (wsProvider != null) { 576 try { 577 return implementor.getClass().getDeclaredMethod( 578 operationName.getLocalPart(), dataClazz); 579 } catch (Exception ex) { 580 } 582 } 583 return EndpointUtils.getMethod(implementor.getClass(), operationName); 584 } 585 586 public DataBindingCallback.Mode getServiceMode() { 587 return mode; 588 } 589 590 public WebServiceProvider getWebServiceProvider() { 591 if (wsProvider == null) { 592 wsProvider = this.getImplementor().getClass().getAnnotation(WebServiceProvider.class); 593 } 594 return wsProvider; 595 } 596 597 598 public Map <QName , ? extends DataBindingCallback> getOperations() { 599 return callbackMap; 600 } 601 602 public Style getStyle() { 603 return Style.DOCUMENT; 605 } 606 607 public DataBindingCallback getFaultDataBindingCallback(ObjectMessageContext objContext) { 608 return new JAXBDataBindingCallback(null, DataBindingCallback.Mode.PARTS, null); 609 } 610 611 } 612 613 } 614 | Popular Tags |