src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/JAXWSBindingExtensionHandler.java

Print this page


   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 }