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()); 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 } | 1 /* 2 * Copyright (c) 1997, 2013, 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.*; 44 import java.util.Iterator; 45 import java.util.Map; 46 47 48 /** 49 * @author Vivek Pandey 50 * 51 * jaxws:bindings exension handler. 52 * 53 */ 54 public class JAXWSBindingExtensionHandler extends AbstractExtensionHandler { 55 56 // xml security enabled always, xpath used for parsing "part" attribute 57 private static final XPathFactory xpf = XmlUtil.newXPathFactory(true); 58 private final XPath xpath = xpf.newXPath(); 59 60 public JAXWSBindingExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap) { 61 super(extensionHandlerMap); 62 } 63 64 /* (non-Javadoc) 65 * @see AbstractExtensionHandler#getNamespaceURI() 66 */ 67 @Override 68 public String getNamespaceURI() { 69 return JAXWSBindingsConstants.NS_JAXWS_BINDINGS; 70 } 71 72 /** 73 * @param context 74 * @param parent 75 * @param e 76 */ 77 private boolean parseGlobalJAXWSBindings(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 78 context.push(); 79 context.registerNamespaces(e); 80 81 JAXWSBinding jaxwsBinding = getJAXWSExtension(parent); 82 if(jaxwsBinding == null) { 83 jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 84 } 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 106 if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.PACKAGE)) { 107 parsePackage(context, jaxwsBinding, e2); 108 if ((jaxwsBinding.getJaxwsPackage() != null) && (jaxwsBinding.getJaxwsPackage().getJavaDoc() != null)) { 109 ((Definitions) parent).setDocumentation(new Documentation(jaxwsBinding.getJaxwsPackage().getJavaDoc())); 110 } 111 } else if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_WRAPPER_STYLE)) { 112 parseWrapperStyle(context, jaxwsBinding, e2); 113 } else if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ASYNC_MAPPING)) { 114 parseAsynMapping(context, jaxwsBinding, e2); 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 } 156 if (val.equals("false") || val.equals("0")) { 157 ((JAXWSBinding)parent).setProvider(Boolean.FALSE); 158 } else if(val.equals("true") || val.equals("1")) { 159 ((JAXWSBinding)parent).setProvider(Boolean.TRUE); 160 } 161 162 } 163 164 /** 165 * @param context 166 * @param parent 167 * @param e 168 */ 169 private void parsePackage(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { 170 //System.out.println("In handlePackageExtension: " + e.getNodeName()); 171 String packageName = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NAME_ATTR); 172 JAXWSBinding binding = (JAXWSBinding)parent; 173 binding.setJaxwsPackage(new CustomName(packageName, getJavaDoc(e))); 174 } 175 176 /** 177 * @param context 178 * @param parent 179 * @param e 180 */ 181 private void parseWrapperStyle(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { 182 //System.out.println("In handleWrapperStyleExtension: " + e.getNodeName()); 183 String val = e.getTextContent(); 184 if (val == null) { 185 return; 186 } 187 if (val.equals("false") || val.equals("0")) { 188 ((JAXWSBinding) parent).setEnableWrapperStyle(Boolean.FALSE); 189 } else if (val.equals("true") || val.equals("1")) { 190 ((JAXWSBinding) parent).setEnableWrapperStyle(Boolean.TRUE); 191 } 192 } 193 194 /** 195 * @param context 196 * @param parent 197 * @param e 198 */ 199 // private void parseAdditionalSOAPHeaderMapping(TWSDLParserContextImpl context, TWSDLExtensible parent, Element e) { 200 // //System.out.println("In handleAdditionalSOAPHeaderExtension: " + e.getNodeName()); 201 // String val = e.getTextContent(); 202 // if(val == null) 203 // return; 204 // if(val.equals("false") || val.equals("0")){ 205 // ((JAXWSBinding)parent).setEnableAdditionalHeaderMapping(Boolean.FALSE); 206 // }else if(val.equals("true") || val.equals("1")){ 207 // ((JAXWSBinding)parent).setEnableAdditionalHeaderMapping(Boolean.TRUE); 208 // } 209 // } 210 211 /** 212 * @param context 213 * @param parent 214 * @param e 215 */ 216 private void parseAsynMapping(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { 217 //System.out.println("In handleAsynMappingExtension: " + e.getNodeName()); 218 String val = e.getTextContent(); 219 if (val == null) { 220 return; 221 } 222 if (val.equals("false") || val.equals("0")) { 223 ((JAXWSBinding) parent).setEnableAsyncMapping(Boolean.FALSE); 224 } else if (val.equals("true") || val.equals("1")) { 225 ((JAXWSBinding) parent).setEnableAsyncMapping(Boolean.TRUE); 226 } 227 } 228 229 /** 230 * @param context 231 * @param parent 232 * @param e 233 */ 234 private void parseMimeContent(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { 235 //System.out.println("In handleMimeContentExtension: " + e.getNodeName()); 236 String val = e.getTextContent(); 237 if (val == null) { 238 return; 239 } 240 if (val.equals("false") || val.equals("0")) { 241 ((JAXWSBinding) parent).setEnableMimeContentMapping(Boolean.FALSE); 242 } else if (val.equals("true") || val.equals("1")) { 243 ((JAXWSBinding) parent).setEnableMimeContentMapping(Boolean.TRUE); 244 } 245 } 246 247 /** 248 * @param context 249 * @param jaxwsBinding 250 * @param e 251 */ 252 private void parseMethod(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding jaxwsBinding, Element e) { 253 String methodName = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NAME_ATTR); 254 String javaDoc = getJavaDoc(e); 255 CustomName name = new CustomName(methodName, javaDoc); 256 jaxwsBinding.setMethodName(name); 257 } 258 259 /** 260 * @param context 261 * @param jaxwsBinding 262 * @param e 263 */ 264 private void parseParameter(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding jaxwsBinding, Element e) { 265 String part = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.PART_ATTR); 266 Element msgPartElm = evaluateXPathNode(e.getOwnerDocument(), part, new NamespaceContextImpl(e)); 267 Node msgElm = msgPartElm.getParentNode(); 268 //MessagePart msgPart = new MessagePart(); 269 270 String partName = XmlUtil.getAttributeOrNull(msgPartElm, "name"); 271 String msgName = XmlUtil.getAttributeOrNull((Element)msgElm, "name"); 272 if ((partName == null) || (msgName == null)) { 273 return; 274 } 275 276 String element = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.ELEMENT_ATTR); 277 String name = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NAME_ATTR); 278 279 QName elementName = null; 280 if(element != null){ 281 String uri = e.lookupNamespaceURI(XmlUtil.getPrefix(element)); 282 elementName = (uri == null)?null:new QName(uri, XmlUtil.getLocalPart(element)); 283 } 284 285 jaxwsBinding.addParameter(new Parameter(msgName, partName, elementName, name)); 286 } 287 288 private Element evaluateXPathNode(Node target, String expression, NamespaceContext namespaceContext) { 289 NodeList nlst; 290 try { 291 xpath.setNamespaceContext(namespaceContext); 292 nlst = (NodeList)xpath.evaluate(expression, target, XPathConstants.NODESET); 293 } catch (XPathExpressionException e) { 294 Util.fail("internalizer.XPathEvaluationError", e.getMessage()); 308 Node rnode = nlst.item(0); 309 if(!(rnode instanceof Element )) { 310 Util.fail("internalizer.XPathEvaluatesToNonElement", new Object[]{expression}); 311 return null; // abort 312 } 313 return (Element)rnode; 314 } 315 316 /** 317 * @param context 318 * @param jaxwsBinding 319 * @param e 320 */ 321 private void parseClass(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding jaxwsBinding, Element e) { 322 String className = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NAME_ATTR); 323 String javaDoc = getJavaDoc(e); 324 jaxwsBinding.setClassName(new CustomName(className, javaDoc)); 325 } 326 327 328 @Override 329 public boolean handleDefinitionsExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 330 return parseGlobalJAXWSBindings(context, parent, e); 331 } 332 333 @Override 334 public boolean handlePortTypeExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 335 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 336 context.push(); 337 context.registerNamespaces(e); 338 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 339 340 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 341 Element e2 = Util.nextElement(iter); 342 if (e2 == null) { 343 break; 344 } 345 346 if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_WRAPPER_STYLE)) { 347 parseWrapperStyle(context, jaxwsBinding, e2); 348 } else if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ASYNC_MAPPING)) { 349 parseAsynMapping(context, jaxwsBinding, e2); 350 } else if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.CLASS)) { 351 parseClass(context, jaxwsBinding, e2); 352 if ((jaxwsBinding.getClassName() != null) && (jaxwsBinding.getClassName().getJavaDoc() != null) && (parent instanceof PortType)) { 353 ((PortType) parent).setDocumentation(new Documentation(jaxwsBinding.getClassName().getJavaDoc())); 354 } 355 } else { 356 Util.fail( 357 "parsing.invalidExtensionElement", 358 e2.getTagName(), 359 e2.getNamespaceURI()); 360 return false; 361 } 362 } 363 parent.addExtension(jaxwsBinding); 364 context.pop(); 365 // context.fireDoneParsingEntity( 366 // JAXWSBindingsConstants.JAXWS_BINDINGS, 367 // jaxwsBinding); 368 return true; 369 }else { 370 Util.fail( 371 "parsing.invalidExtensionElement", 372 e.getTagName(), 373 e.getNamespaceURI()); 374 return false; 375 } 376 } 377 378 @Override 379 public boolean handleOperationExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 380 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 381 if(parent instanceof Operation){ 382 return handlePortTypeOperation(context, (Operation)parent, e); 383 }else if(parent instanceof BindingOperation){ 384 return handleBindingOperation(context, (BindingOperation)parent, e); 385 } 386 }else { 387 Util.fail( 388 "parsing.invalidExtensionElement", 389 e.getTagName(), 390 e.getNamespaceURI()); 391 return false; 392 } 393 return false; 394 } 395 396 private boolean handleBindingOperation(TWSDLParserContext context, BindingOperation operation, Element e) { 397 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 398 context.push(); 399 context.registerNamespaces(e); 400 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 401 402 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 403 Element e2 = Util.nextElement(iter); 404 if (e2 == null) { 405 break; 406 } 407 408 // if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ADDITIONAL_SOAPHEADER_MAPPING)){ 409 // parseAdditionalSOAPHeaderMapping(context, jaxwsBinding, e2); 410 // }else 411 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_MIME_CONTENT)){ 412 parseMimeContent(context, jaxwsBinding, e2); 413 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.PARAMETER)){ 414 parseParameter(context, jaxwsBinding, e2); 415 }else{ 416 Util.fail( 417 "parsing.invalidExtensionElement", 418 e2.getTagName(), 419 e2.getNamespaceURI()); 420 return false; 421 } 422 } 423 operation.addExtension(jaxwsBinding); 424 context.pop(); 425 // context.fireDoneParsingEntity( 426 // JAXWSBindingsConstants.JAXWS_BINDINGS, 427 // jaxwsBinding); 428 return true; 429 }else { 430 Util.fail( 431 "parsing.invalidExtensionElement", 432 e.getTagName(), 433 e.getNamespaceURI()); 434 return false; 435 } 436 } 437 438 private boolean handlePortTypeOperation(TWSDLParserContext context, Operation parent, Element e) { 439 context.push(); 440 context.registerNamespaces(e); 441 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 442 443 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 444 Element e2 = Util.nextElement(iter); 445 if (e2 == null) { 446 break; 447 } 448 449 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_WRAPPER_STYLE)){ 450 parseWrapperStyle(context, jaxwsBinding, e2); 451 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ASYNC_MAPPING)){ 452 parseAsynMapping(context, jaxwsBinding, e2); 453 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.METHOD)){ 454 parseMethod(context, jaxwsBinding, e2); 455 if((jaxwsBinding.getMethodName() != null) && (jaxwsBinding.getMethodName().getJavaDoc() != null)){ 456 parent.setDocumentation(new Documentation(jaxwsBinding.getMethodName().getJavaDoc())); 457 } 458 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.PARAMETER)){ 459 parseParameter(context, jaxwsBinding, e2); 460 }else{ 461 Util.fail( 462 "parsing.invalidExtensionElement", 463 e2.getTagName(), 464 e2.getNamespaceURI()); 465 return false; 466 } 467 } 468 parent.addExtension(jaxwsBinding); 469 context.pop(); 470 // context.fireDoneParsingEntity( 471 // JAXWSBindingsConstants.JAXWS_BINDINGS, 472 // jaxwsBinding); 473 return true; 474 } 475 476 @Override 477 public boolean handleBindingExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 478 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 479 context.push(); 480 context.registerNamespaces(e); 481 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 482 483 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 484 Element e2 = Util.nextElement(iter); 485 if (e2 == null) { 486 break; 487 } 488 489 // if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ADDITIONAL_SOAPHEADER_MAPPING)){ 490 // parseAdditionalSOAPHeaderMapping(context, jaxwsBinding, e2); 491 // }else 492 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_MIME_CONTENT)){ 493 parseMimeContent(context, jaxwsBinding, e2); 494 }else{ 495 Util.fail( 496 "parsing.invalidExtensionElement", 497 e2.getTagName(), 498 e2.getNamespaceURI()); 499 return false; 500 } 501 } 502 parent.addExtension(jaxwsBinding); 503 context.pop(); 504 // context.fireDoneParsingEntity( 505 // JAXWSBindingsConstants.JAXWS_BINDINGS, 506 // jaxwsBinding); 507 return true; 508 }else { 509 Util.fail( 510 "parsing.invalidExtensionElement", 511 e.getTagName(), 512 e.getNamespaceURI()); 513 return false; 514 } 515 } 516 517 /* (non-Javadoc) 518 * @see ExtensionHandlerBase#handleFaultExtension(TWSDLParserContextImpl, TWSDLExtensible, org.w3c.dom.Element) 519 */ 520 @Override 521 public boolean handleFaultExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 522 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 523 context.push(); 524 context.registerNamespaces(e); 525 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 526 527 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 528 Element e2 = Util.nextElement(iter); 529 if (e2 == null) { 530 break; 531 } 532 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.CLASS)){ 533 parseClass(context, jaxwsBinding, e2); 534 if((jaxwsBinding.getClassName() != null) && (jaxwsBinding.getClassName().getJavaDoc() != null)){ 535 ((Fault)parent).setDocumentation(new Documentation(jaxwsBinding.getClassName().getJavaDoc())); 536 } 537 }else{ 538 Util.fail( 539 "parsing.invalidExtensionElement", 540 e2.getTagName(), 541 e2.getNamespaceURI()); 542 return false; 543 } 544 } 545 parent.addExtension(jaxwsBinding); 546 context.pop(); 547 // context.fireDoneParsingEntity( 548 // JAXWSBindingsConstants.JAXWS_BINDINGS, 549 // jaxwsBinding); 550 return true; 551 }else { 552 Util.fail( 553 "parsing.invalidExtensionElement", 554 e.getTagName(), 555 e.getNamespaceURI()); 556 return false; 557 } 558 } 559 560 @Override 561 public boolean handleServiceExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 562 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 563 context.push(); 564 context.registerNamespaces(e); 565 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 566 567 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 568 Element e2 = Util.nextElement(iter); 569 if (e2 == null) { 570 break; 571 } 572 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.CLASS)){ 573 parseClass(context, jaxwsBinding, e2); 574 if((jaxwsBinding.getClassName() != null) && (jaxwsBinding.getClassName().getJavaDoc() != null)){ 575 ((Service)parent).setDocumentation(new Documentation(jaxwsBinding.getClassName().getJavaDoc())); 576 } 577 }else{ 578 Util.fail( 579 "parsing.invalidExtensionElement", 580 e2.getTagName(), 581 e2.getNamespaceURI()); 582 return false; 583 } 584 } 585 parent.addExtension(jaxwsBinding); 586 context.pop(); 587 // context.fireDoneParsingEntity( 588 // JAXWSBindingsConstants.JAXWS_BINDINGS, 589 // jaxwsBinding); 590 return true; 591 }else { 592 Util.fail( 593 "parsing.invalidExtensionElement", 594 e.getTagName(), 595 e.getNamespaceURI()); 596 return false; 597 } 598 } 599 600 @Override 601 public boolean handlePortExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 602 if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ 603 context.push(); 604 context.registerNamespaces(e); 605 JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); 606 607 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 608 Element e2 = Util.nextElement(iter); 609 if (e2 == null) { 610 break; 611 } 612 613 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.PROVIDER)){ 614 parseProvider(context, jaxwsBinding, e2); 615 }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.METHOD)){ 616 parseMethod(context, jaxwsBinding, e2); 617 if((jaxwsBinding.getMethodName() != null) && (jaxwsBinding.getMethodName().getJavaDoc() != null)){ 618 ((Port)parent).setDocumentation(new Documentation(jaxwsBinding.getMethodName().getJavaDoc())); 619 } 620 }else{ 621 Util.fail( 622 "parsing.invalidExtensionElement", 623 e2.getTagName(), 624 e2.getNamespaceURI()); 625 return false; 626 } 627 } 628 parent.addExtension(jaxwsBinding); 629 context.pop(); 630 // context.fireDoneParsingEntity( 631 // JAXWSBindingsConstants.JAXWS_BINDINGS, 632 // jaxwsBinding); 633 return true; 634 }else { 635 Util.fail( 636 "parsing.invalidExtensionElement", 637 e.getTagName(), 638 e.getNamespaceURI()); 639 return false; 640 } 641 } 642 643 private String getJavaDoc(Element e){ 644 for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ 645 Element e2 = Util.nextElement(iter); 646 if (e2 == null) { 647 break; 648 } 649 if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.JAVADOC)){ 650 return XmlUtil.getTextForNode(e2); 651 } 652 } 653 return null; 654 } 655 } |