1 /* 2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.tools.internal.ws.wsdl.parser; 27 28 import com.sun.tools.internal.ws.api.wsdl.TWSDLExtensible; 29 import com.sun.tools.internal.ws.api.wsdl.TWSDLExtension; 30 import com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext; 31 import com.sun.tools.internal.ws.util.xml.XmlUtil; 32 import com.sun.tools.internal.ws.wsdl.document.*; 33 import com.sun.tools.internal.ws.wsdl.document.jaxws.CustomName; 34 import com.sun.tools.internal.ws.wsdl.document.jaxws.JAXWSBinding; 35 import com.sun.tools.internal.ws.wsdl.document.jaxws.JAXWSBindingsConstants; 36 import com.sun.tools.internal.ws.wsdl.document.jaxws.Parameter; 37 import org.w3c.dom.Element; 38 import org.w3c.dom.Node; 39 import org.w3c.dom.NodeList; 40 41 import javax.xml.namespace.NamespaceContext; 42 import javax.xml.namespace.QName; 43 import javax.xml.xpath.XPath; 44 import javax.xml.xpath.XPathConstants; 45 import javax.xml.xpath.XPathExpressionException; 46 import javax.xml.xpath.XPathFactory; 47 import java.util.Iterator; 48 import java.util.Map; 49 50 51 /** 52 * @author Vivek Pandey 53 * 54 * jaxws:bindings exension handler. 55 * 56 */ 57 public class JAXWSBindingExtensionHandler extends AbstractExtensionHandler { 58 59 private static final XPathFactory xpf = XPathFactory.newInstance(); 60 private final XPath xpath = xpf.newXPath(); 61 62 public JAXWSBindingExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap) { 63 super(extensionHandlerMap); 64 } 65 66 /* (non-Javadoc) 67 * @see AbstractExtensionHandler#getNamespaceURI() 68 */ 69 public String getNamespaceURI() { 70 return JAXWSBindingsConstants.NS_JAXWS_BINDINGS; 71 } 72 73 /** 74 * @param context 75 * @param parent 76 * @param e 77 */ 78 private boolean parseGlobalJAXWSBindings(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 79 context.push(); 80 context.registerNamespaces(e); 81 82 JAXWSBinding jaxwsBinding = getJAXWSExtension(parent); 83 if(jaxwsBinding == null) 84 jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 85 String attr = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.WSDL_LOCATION_ATTR); 86 if (attr != null) { 87 jaxwsBinding.setWsdlLocation(attr); 88 } 89 90 attr = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NODE_ATTR); 91 if (attr != null) { 92 jaxwsBinding.setNode(attr); 93 } 94 95 attr = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.VERSION_ATTR); 96 if (attr != null) { 97 jaxwsBinding.setVersion(attr); 98 } 99 100 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 101 Element e2 = Util.nextElement(iter); 102 if (e2 == null) 103 break; 104 105 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.PACKAGE)){ 106 parsePackage(context, jaxwsBinding, e2); 107 if((jaxwsBinding.getJaxwsPackage() != null) && (jaxwsBinding.getJaxwsPackage().getJavaDoc() != null)){ 108 ((Definitions)parent).setDocumentation(new Documentation(jaxwsBinding.getJaxwsPackage().getJavaDoc())); 109 } 110 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_WRAPPER_STYLE)){ 111 parseWrapperStyle(context, jaxwsBinding, e2); 112 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ASYNC_MAPPING)){ 113 parseAsynMapping(context, jaxwsBinding, e2); 114 } 115 // else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ADDITIONAL_SOAPHEADER_MAPPING)){ 116 // parseAdditionalSOAPHeaderMapping(context, jaxwsBinding, e2); 117 // } 118 else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_MIME_CONTENT)){ 119 parseMimeContent(context, jaxwsBinding, e2); 120 }else{ 121 Util.fail( 122 "parsing.invalidExtensionElement", 123 e2.getTagName(), 124 e2.getNamespaceURI()); 125 return false; 126 } 127 } 128 parent.addExtension(jaxwsBinding); 129 context.pop(); 130 // context.fireDoneParsingEntity( 131 // JAXWSBindingsConstants.JAXWS_BINDINGS, 132 // jaxwsBinding); 133 return true; 134 } 135 136 private static JAXWSBinding getJAXWSExtension(TWSDLExtensible extensible) { 137 for (TWSDLExtension extension:extensible.extensions()) { 138 if (extension.getClass().equals(JAXWSBinding.class)) { 139 return (JAXWSBinding)extension; 140 } 141 } 142 143 return null; 144 } 145 146 /** 147 * @param context 148 * @param parent 149 * @param e 150 */ 151 private void parseProvider(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { 152 String val = e.getTextContent(); 153 if(val == null) 154 return; 155 if(val.equals("false") || val.equals("0")){ 156 ((JAXWSBinding)parent).setProvider(Boolean.FALSE); 157 }else if(val.equals("true") || val.equals("1")){ 158 ((JAXWSBinding)parent).setProvider(Boolean.TRUE); 159 } 160 161 } 162 163 /** 164 * 165 * @param context 166 * @param parent 167 * @param e 168 */ 169 private void parseJAXBBindings(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, TWSDLExtensible parent, Element e) { 170 JAXWSBinding binding = (JAXWSBinding)parent; 171 binding.addJaxbBindings(e); 172 } 173 174 /** 175 * @param context 176 * @param parent 177 * @param e 178 */ 179 private void parsePackage(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { 180 //System.out.println("In handlePackageExtension: " + e.getNodeName()); 181 String packageName = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NAME_ATTR); 182 JAXWSBinding binding = (JAXWSBinding)parent; 183 binding.setJaxwsPackage(new CustomName(packageName, getJavaDoc(e))); 184 } 185 186 /** 187 * @param context 188 * @param parent 189 * @param e 190 */ 191 private void parseWrapperStyle(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { 192 //System.out.println("In handleWrapperStyleExtension: " + e.getNodeName()); 193 String val = e.getTextContent(); 194 if(val == null) 195 return; 196 if(val.equals("false") || val.equals("0")){ 197 ((JAXWSBinding)parent).setEnableWrapperStyle(Boolean.FALSE); 198 }else if(val.equals("true") || val.equals("1")){ 199 ((JAXWSBinding)parent).setEnableWrapperStyle(Boolean.TRUE); 200 } 201 } 202 203 /** 204 * @param context 205 * @param parent 206 * @param e 207 */ 208 // private void parseAdditionalSOAPHeaderMapping(TWSDLParserContextImpl context, TWSDLExtensible parent, Element e) { 209 // //System.out.println("In handleAdditionalSOAPHeaderExtension: " + e.getNodeName()); 210 // String val = e.getTextContent(); 211 // if(val == null) 212 // return; 213 // if(val.equals("false") || val.equals("0")){ 214 // ((JAXWSBinding)parent).setEnableAdditionalHeaderMapping(Boolean.FALSE); 215 // }else if(val.equals("true") || val.equals("1")){ 216 // ((JAXWSBinding)parent).setEnableAdditionalHeaderMapping(Boolean.TRUE); 217 // } 218 // } 219 220 /** 221 * @param context 222 * @param parent 223 * @param e 224 */ 225 private void parseAsynMapping(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { 226 //System.out.println("In handleAsynMappingExtension: " + e.getNodeName()); 227 String val = e.getTextContent(); 228 if(val == null) 229 return; 230 if(val.equals("false") || val.equals("0")){ 231 ((JAXWSBinding)parent).setEnableAsyncMapping(Boolean.FALSE); 232 }else if(val.equals("true") || val.equals("1")){ 233 ((JAXWSBinding)parent).setEnableAsyncMapping(Boolean.TRUE); 234 } 235 } 236 237 /** 238 * @param context 239 * @param parent 240 * @param e 241 */ 242 private void parseMimeContent(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { 243 //System.out.println("In handleMimeContentExtension: " + e.getNodeName()); 244 String val = e.getTextContent(); 245 if(val == null) 246 return; 247 if(val.equals("false") || val.equals("0")){ 248 ((JAXWSBinding)parent).setEnableMimeContentMapping(Boolean.FALSE); 249 }else if(val.equals("true") || val.equals("1")){ 250 ((JAXWSBinding)parent).setEnableMimeContentMapping(Boolean.TRUE); 251 } 252 } 253 254 /** 255 * @param context 256 * @param jaxwsBinding 257 * @param e 258 */ 259 private void parseMethod(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding jaxwsBinding, Element e) { 260 String methodName = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NAME_ATTR); 261 String javaDoc = getJavaDoc(e); 262 CustomName name = new CustomName(methodName, javaDoc); 263 jaxwsBinding.setMethodName(name); 264 } 265 266 /** 267 * @param context 268 * @param jaxwsBinding 269 * @param e 270 */ 271 private void parseParameter(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding jaxwsBinding, Element e) { 272 String part = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.PART_ATTR); 273 Element msgPartElm = evaluateXPathNode(e.getOwnerDocument(), part, new NamespaceContextImpl(e)); 274 Node msgElm = msgPartElm.getParentNode(); 275 //MessagePart msgPart = new MessagePart(); 276 277 String partName = XmlUtil.getAttributeOrNull(msgPartElm, "name"); 278 String msgName = XmlUtil.getAttributeOrNull((Element)msgElm, "name"); 279 if((partName == null) || (msgName == null)) 280 return; 281 282 String val = XmlUtil.getAttributeOrNull(msgPartElm, "element"); 283 284 String element = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.ELEMENT_ATTR); 285 String name = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NAME_ATTR); 286 287 QName elementName = null; 288 if(element != null){ 289 String uri = e.lookupNamespaceURI(XmlUtil.getPrefix(element)); 290 elementName = (uri == null)?null:new QName(uri, XmlUtil.getLocalPart(element)); 291 } 292 293 jaxwsBinding.addParameter(new Parameter(msgName, partName, elementName, name)); 294 } 295 296 private Element evaluateXPathNode(Node target, String expression, NamespaceContext namespaceContext) { 297 NodeList nlst; 298 try { 299 xpath.setNamespaceContext(namespaceContext); 300 nlst = (NodeList)xpath.evaluate(expression, target, XPathConstants.NODESET); 301 } catch (XPathExpressionException e) { 302 Util.fail("internalizer.XPathEvaluationError", e.getMessage()); 303 return null; // abort processing this <jaxb:bindings> 304 } 305 306 if( nlst.getLength()==0 ) { 307 Util.fail("internalizer.XPathEvaluatesToNoTarget", new Object[]{expression}); 308 return null; // abort 309 } 310 311 if( nlst.getLength()!=1 ) { 312 Util.fail("internalizer.XPathEvaulatesToTooManyTargets", new Object[]{expression, nlst.getLength()}); 313 return null; // abort 314 } 315 316 Node rnode = nlst.item(0); 317 if(!(rnode instanceof Element )) { 318 Util.fail("internalizer.XPathEvaluatesToNonElement", new Object[]{expression}); 319 return null; // abort 320 } 321 return (Element)rnode; 322 } 323 324 /** 325 * @param context 326 * @param jaxwsBinding 327 * @param e 328 */ 329 private void parseClass(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding jaxwsBinding, Element e) { 330 String className = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NAME_ATTR); 331 String javaDoc = getJavaDoc(e); 332 jaxwsBinding.setClassName(new CustomName(className, javaDoc)); 333 } 334 335 336 /** 337 * @param context 338 * @param jaxwsBinding 339 * @param e 340 */ 341 private void parseException(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding jaxwsBinding, Element e) { 342 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 343 Element e2 = Util.nextElement(iter); 344 if (e2 == null) 345 break; 346 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.CLASS)){ 347 String className = XmlUtil.getAttributeOrNull(e2, JAXWSBindingsConstants.NAME_ATTR); 348 String javaDoc = getJavaDoc(e2); 349 jaxwsBinding.setException(new com.sun.tools.internal.ws.wsdl.document.jaxws.Exception(new CustomName(className, javaDoc))); 350 } 351 } 352 } 353 354 public boolean handleDefinitionsExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 355 return parseGlobalJAXWSBindings(context, parent, e); 356 } 357 358 public boolean handlePortTypeExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 359 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 360 context.push(); 361 context.registerNamespaces(e); 362 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 363 364 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 365 Element e2 = Util.nextElement(iter); 366 if (e2 == null) 367 break; 368 369 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_WRAPPER_STYLE)){ 370 parseWrapperStyle(context, jaxwsBinding, e2); 371 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ASYNC_MAPPING)){ 372 parseAsynMapping(context, jaxwsBinding, e2); 373 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.CLASS)){ 374 parseClass(context, jaxwsBinding, e2); 375 if((jaxwsBinding.getClassName() != null) && (jaxwsBinding.getClassName().getJavaDoc() != null)){ 376 ((PortType)parent).setDocumentation(new Documentation(jaxwsBinding.getClassName().getJavaDoc())); 377 } 378 }else{ 379 Util.fail( 380 "parsing.invalidExtensionElement", 381 e2.getTagName(), 382 e2.getNamespaceURI()); 383 return false; 384 } 385 } 386 parent.addExtension(jaxwsBinding); 387 context.pop(); 388 // context.fireDoneParsingEntity( 389 // JAXWSBindingsConstants.JAXWS_BINDINGS, 390 // jaxwsBinding); 391 return true; 392 }else { 393 Util.fail( 394 "parsing.invalidExtensionElement", 395 e.getTagName(), 396 e.getNamespaceURI()); 397 return false; 398 } 399 } 400 401 public boolean handleOperationExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 402 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 403 if(parent instanceof Operation){ 404 return handlePortTypeOperation(context, (Operation)parent, e); 405 }else if(parent instanceof BindingOperation){ 406 return handleBindingOperation(context, (BindingOperation)parent, e); 407 } 408 }else { 409 Util.fail( 410 "parsing.invalidExtensionElement", 411 e.getTagName(), 412 e.getNamespaceURI()); 413 return false; 414 } 415 return false; 416 } 417 418 private boolean handleBindingOperation(TWSDLParserContext context, BindingOperation operation, Element e) { 419 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 420 context.push(); 421 context.registerNamespaces(e); 422 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 423 424 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 425 Element e2 = Util.nextElement(iter); 426 if (e2 == null) 427 break; 428 429 // if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ADDITIONAL_SOAPHEADER_MAPPING)){ 430 // parseAdditionalSOAPHeaderMapping(context, jaxwsBinding, e2); 431 // }else 432 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_MIME_CONTENT)){ 433 parseMimeContent(context, jaxwsBinding, e2); 434 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.PARAMETER)){ 435 parseParameter(context, jaxwsBinding, e2); 436 }else{ 437 Util.fail( 438 "parsing.invalidExtensionElement", 439 e2.getTagName(), 440 e2.getNamespaceURI()); 441 return false; 442 } 443 } 444 operation.addExtension(jaxwsBinding); 445 context.pop(); 446 // context.fireDoneParsingEntity( 447 // JAXWSBindingsConstants.JAXWS_BINDINGS, 448 // jaxwsBinding); 449 return true; 450 }else { 451 Util.fail( 452 "parsing.invalidExtensionElement", 453 e.getTagName(), 454 e.getNamespaceURI()); 455 return false; 456 } 457 } 458 459 private boolean handlePortTypeOperation(TWSDLParserContext context, Operation parent, Element e) { 460 context.push(); 461 context.registerNamespaces(e); 462 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 463 464 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 465 Element e2 = Util.nextElement(iter); 466 if (e2 == null) 467 break; 468 469 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_WRAPPER_STYLE)){ 470 parseWrapperStyle(context, jaxwsBinding, e2); 471 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ASYNC_MAPPING)){ 472 parseAsynMapping(context, jaxwsBinding, e2); 473 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.METHOD)){ 474 parseMethod(context, jaxwsBinding, e2); 475 if((jaxwsBinding.getMethodName() != null) && (jaxwsBinding.getMethodName().getJavaDoc() != null)){ 476 parent.setDocumentation(new Documentation(jaxwsBinding.getMethodName().getJavaDoc())); 477 } 478 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.PARAMETER)){ 479 parseParameter(context, jaxwsBinding, e2); 480 }else{ 481 Util.fail( 482 "parsing.invalidExtensionElement", 483 e2.getTagName(), 484 e2.getNamespaceURI()); 485 return false; 486 } 487 } 488 parent.addExtension(jaxwsBinding); 489 context.pop(); 490 // context.fireDoneParsingEntity( 491 // JAXWSBindingsConstants.JAXWS_BINDINGS, 492 // jaxwsBinding); 493 return true; 494 } 495 496 public boolean handleBindingExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 497 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 498 context.push(); 499 context.registerNamespaces(e); 500 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 501 502 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 503 Element e2 = Util.nextElement(iter); 504 if (e2 == null) 505 break; 506 507 // if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ADDITIONAL_SOAPHEADER_MAPPING)){ 508 // parseAdditionalSOAPHeaderMapping(context, jaxwsBinding, e2); 509 // }else 510 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_MIME_CONTENT)){ 511 parseMimeContent(context, jaxwsBinding, e2); 512 }else{ 513 Util.fail( 514 "parsing.invalidExtensionElement", 515 e2.getTagName(), 516 e2.getNamespaceURI()); 517 return false; 518 } 519 } 520 parent.addExtension(jaxwsBinding); 521 context.pop(); 522 // context.fireDoneParsingEntity( 523 // JAXWSBindingsConstants.JAXWS_BINDINGS, 524 // jaxwsBinding); 525 return true; 526 }else { 527 Util.fail( 528 "parsing.invalidExtensionElement", 529 e.getTagName(), 530 e.getNamespaceURI()); 531 return false; 532 } 533 } 534 535 /* (non-Javadoc) 536 * @see ExtensionHandlerBase#handleFaultExtension(TWSDLParserContextImpl, TWSDLExtensible, org.w3c.dom.Element) 537 */ 538 public boolean handleFaultExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 539 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 540 context.push(); 541 context.registerNamespaces(e); 542 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 543 544 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 545 Element e2 = Util.nextElement(iter); 546 if (e2 == null) 547 break; 548 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.CLASS)){ 549 parseClass(context, jaxwsBinding, e2); 550 if((jaxwsBinding.getClassName() != null) && (jaxwsBinding.getClassName().getJavaDoc() != null)){ 551 ((Fault)parent).setDocumentation(new Documentation(jaxwsBinding.getClassName().getJavaDoc())); 552 } 553 }else{ 554 Util.fail( 555 "parsing.invalidExtensionElement", 556 e2.getTagName(), 557 e2.getNamespaceURI()); 558 return false; 559 } 560 } 561 parent.addExtension(jaxwsBinding); 562 context.pop(); 563 // context.fireDoneParsingEntity( 564 // JAXWSBindingsConstants.JAXWS_BINDINGS, 565 // jaxwsBinding); 566 return true; 567 }else { 568 Util.fail( 569 "parsing.invalidExtensionElement", 570 e.getTagName(), 571 e.getNamespaceURI()); 572 return false; 573 } 574 } 575 576 public boolean handleServiceExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 577 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 578 context.push(); 579 context.registerNamespaces(e); 580 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 581 582 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 583 Element e2 = Util.nextElement(iter); 584 if (e2 == null) 585 break; 586 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.CLASS)){ 587 parseClass(context, jaxwsBinding, e2); 588 if((jaxwsBinding.getClassName() != null) && (jaxwsBinding.getClassName().getJavaDoc() != null)){ 589 ((Service)parent).setDocumentation(new Documentation(jaxwsBinding.getClassName().getJavaDoc())); 590 } 591 }else{ 592 Util.fail( 593 "parsing.invalidExtensionElement", 594 e2.getTagName(), 595 e2.getNamespaceURI()); 596 return false; 597 } 598 } 599 parent.addExtension(jaxwsBinding); 600 context.pop(); 601 // context.fireDoneParsingEntity( 602 // JAXWSBindingsConstants.JAXWS_BINDINGS, 603 // jaxwsBinding); 604 return true; 605 }else { 606 Util.fail( 607 "parsing.invalidExtensionElement", 608 e.getTagName(), 609 e.getNamespaceURI()); 610 return false; 611 } 612 } 613 614 public boolean handlePortExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 615 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 616 context.push(); 617 context.registerNamespaces(e); 618 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 619 620 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 621 Element e2 = Util.nextElement(iter); 622 if (e2 == null) 623 break; 624 625 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.PROVIDER)){ 626 parseProvider(context, jaxwsBinding, e2); 627 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.METHOD)){ 628 parseMethod(context, jaxwsBinding, e2); 629 if((jaxwsBinding.getMethodName() != null) && (jaxwsBinding.getMethodName().getJavaDoc() != null)){ 630 ((Port)parent).setDocumentation(new Documentation(jaxwsBinding.getMethodName().getJavaDoc())); 631 } 632 }else{ 633 Util.fail( 634 "parsing.invalidExtensionElement", 635 e2.getTagName(), 636 e2.getNamespaceURI()); 637 return false; 638 } 639 } 640 parent.addExtension(jaxwsBinding); 641 context.pop(); 642 // context.fireDoneParsingEntity( 643 // JAXWSBindingsConstants.JAXWS_BINDINGS, 644 // jaxwsBinding); 645 return true; 646 }else { 647 Util.fail( 648 "parsing.invalidExtensionElement", 649 e.getTagName(), 650 e.getNamespaceURI()); 651 return false; 652 } 653 } 654 655 private String getJavaDoc(Element e){ 656 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 657 Element e2 = Util.nextElement(iter); 658 if (e2 == null) 659 break; 660 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.JAVADOC)){ 661 return XmlUtil.getTextForNode(e2); 662 } 663 } 664 return null; 665 } 666 }