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

Thu, 31 Aug 2017 15:18:52 +0800

author
aoqi
date
Thu, 31 Aug 2017 15:18:52 +0800
changeset 637
9c07ef4934dd
parent 368
0989ad8c0860
parent 0
373ffda63c9a
permissions
-rw-r--r--

merge

     1 /*
     2  * Copyright (c) 1997, 2012, 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  */
    26 package com.sun.tools.internal.ws.wsdl.parser;
    28 import com.sun.tools.internal.ws.api.wsdl.TWSDLExtensible;
    29 import com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext;
    30 import com.sun.tools.internal.ws.util.xml.XmlUtil;
    31 import com.sun.tools.internal.ws.wsdl.document.soap.*;
    32 import com.sun.tools.internal.ws.wsdl.framework.TWSDLParserContextImpl;
    33 import org.w3c.dom.Element;
    34 import org.xml.sax.Locator;
    36 import javax.xml.namespace.QName;
    37 import java.util.Iterator;
    38 import java.util.Map;
    40 /**
    41  * The SOAP extension handler for WSDL.
    42  *
    43  * @author WS Development Team
    44  */
    45 public class SOAPExtensionHandler extends AbstractExtensionHandler {
    47     public SOAPExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap) {
    48         super(extensionHandlerMap);
    49     }
    51     public String getNamespaceURI() {
    52         return Constants.NS_WSDL_SOAP;
    53     }
    55     public boolean handleDefinitionsExtension(
    56         TWSDLParserContext context,
    57         TWSDLExtensible parent,
    58         Element e) {
    59         Util.fail(
    60             "parsing.invalidExtensionElement",
    61             e.getTagName(),
    62             e.getNamespaceURI());
    63         return false; // keep compiler happy
    64     }
    66     public boolean handleTypesExtension(
    67         com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context,
    68         TWSDLExtensible parent,
    69         Element e) {
    70         Util.fail(
    71             "parsing.invalidExtensionElement",
    72             e.getTagName(),
    73             e.getNamespaceURI());
    74         return false; // keep compiler happy
    75     }
    77     protected SOAPBinding getSOAPBinding(Locator location){
    78         return new SOAPBinding(location);
    79     }
    81     public boolean handleBindingExtension(
    82         TWSDLParserContext context,
    83         TWSDLExtensible parent,
    84         Element e) {
    85         if (XmlUtil.matchesTagNS(e, getBindingQName())) {
    86             context.push();
    87             context.registerNamespaces(e);
    89             SOAPBinding binding = getSOAPBinding(context.getLocation(e));
    91             // NOTE - the "transport" attribute is required according to section 3.3 of the WSDL 1.1 spec,
    92             // but optional according to the schema in appendix A 4.2 of the same document!
    93             String transport =
    94                 Util.getRequiredAttribute(e, Constants.ATTR_TRANSPORT);
    95             binding.setTransport(transport);
    97             String style = XmlUtil.getAttributeOrNull(e, Constants.ATTR_STYLE);
    98             if (style != null) {
    99                 if (style.equals(Constants.ATTRVALUE_RPC)) {
   100                     binding.setStyle(SOAPStyle.RPC);
   101                 } else if (style.equals(Constants.ATTRVALUE_DOCUMENT)) {
   102                     binding.setStyle(SOAPStyle.DOCUMENT);
   103                 } else {
   104                     Util.fail(
   105                         "parsing.invalidAttributeValue",
   106                         Constants.ATTR_STYLE,
   107                         style);
   108                 }
   109             }
   110             parent.addExtension(binding);
   111             context.pop();
   112 //            context.fireDoneParsingEntity(getBindingQName(), binding);
   113             return true;
   114         } else {
   115             Util.fail(
   116                 "parsing.invalidExtensionElement",
   117                 e.getTagName(),
   118                 e.getNamespaceURI());
   119             return false; // keep compiler happy
   120         }
   121     }
   123     public boolean handleOperationExtension(
   124         TWSDLParserContext context,
   125         TWSDLExtensible parent,
   126         Element e) {
   127         if (XmlUtil.matchesTagNS(e, getOperationQName())) {
   128             context.push();
   129             context.registerNamespaces(e);
   131             SOAPOperation operation = new SOAPOperation(context.getLocation(e));
   133             String soapAction =
   134                 XmlUtil.getAttributeOrNull(e, Constants.ATTR_SOAP_ACTION);
   135             if (soapAction != null) {
   136                 operation.setSOAPAction(soapAction);
   137             }
   139             String style = XmlUtil.getAttributeOrNull(e, Constants.ATTR_STYLE);
   140             if (style != null) {
   141                 if (style.equals(Constants.ATTRVALUE_RPC)) {
   142                     operation.setStyle(SOAPStyle.RPC);
   143                 } else if (style.equals(Constants.ATTRVALUE_DOCUMENT)) {
   144                     operation.setStyle(SOAPStyle.DOCUMENT);
   145                 } else {
   146                     Util.fail(
   147                         "parsing.invalidAttributeValue",
   148                         Constants.ATTR_STYLE,
   149                         style);
   150                 }
   151             }
   152             parent.addExtension(operation);
   153             context.pop();
   154 //            context.fireDoneParsingEntity(
   155 //                getOperationQName(),
   156 //                operation);
   157             return true;
   158         } else {
   159             Util.fail(
   160                 "parsing.invalidExtensionElement",
   161                 e.getTagName(),
   162                 e.getNamespaceURI());
   163             return false; // keep compiler happy
   164         }
   165     }
   167     public boolean handleInputExtension(
   168         TWSDLParserContext context,
   169         TWSDLExtensible parent,
   170         Element e) {
   171         return handleInputOutputExtension(context, parent, e);
   172     }
   173     public boolean handleOutputExtension(
   174         TWSDLParserContext context,
   175         TWSDLExtensible parent,
   176         Element e) {
   177         return handleInputOutputExtension(context, parent, e);
   178     }
   180     @Override
   181     protected boolean handleMIMEPartExtension(
   182         TWSDLParserContext context,
   183         TWSDLExtensible parent,
   184         Element e) {
   185         return handleInputOutputExtension(context, parent, e);
   186     }
   188     protected boolean handleInputOutputExtension(
   189         TWSDLParserContext contextif,
   190         TWSDLExtensible parent,
   191         Element e) {
   192         TWSDLParserContextImpl context = (TWSDLParserContextImpl)contextif;
   193         if (XmlUtil.matchesTagNS(e, getBodyQName())) {
   194             context.push();
   195             context.registerNamespaces(e);
   197             SOAPBody body = new SOAPBody(context.getLocation(e));
   199             String use = XmlUtil.getAttributeOrNull(e, Constants.ATTR_USE);
   200             if (use != null) {
   201                 if (use.equals(Constants.ATTRVALUE_LITERAL)) {
   202                     body.setUse(SOAPUse.LITERAL);
   203                 } else if (use.equals(Constants.ATTRVALUE_ENCODED)) {
   204                     body.setUse(SOAPUse.ENCODED);
   205                 } else {
   206                     Util.fail(
   207                         "parsing.invalidAttributeValue",
   208                         Constants.ATTR_USE,
   209                         use);
   210                 }
   211             }
   213             String namespace =
   214                 XmlUtil.getAttributeOrNull(e, Constants.ATTR_NAMESPACE);
   215             if (namespace != null) {
   216                 body.setNamespace(namespace);
   217             }
   219             String encodingStyle =
   220                 XmlUtil.getAttributeOrNull(e, Constants.ATTR_ENCODING_STYLE);
   221             if (encodingStyle != null) {
   222                 body.setEncodingStyle(encodingStyle);
   223             }
   225             String parts = XmlUtil.getAttributeOrNull(e, Constants.ATTR_PARTS);
   226             if (parts != null) {
   227                 body.setParts(parts);
   228             }
   230             parent.addExtension(body);
   231             context.pop();
   232 //            context.fireDoneParsingEntity(getBodyQName(), body);
   233             return true;
   234         } else if (XmlUtil.matchesTagNS(e, getHeaderQName())) {
   235             return handleHeaderElement(parent, e, context);
   236         } else {
   237             Util.fail("parsing.invalidExtensionElement", e.getTagName(), e.getNamespaceURI());
   238             return false; // keep compiler happy
   239         }
   240     }
   242     private boolean handleHeaderElement(TWSDLExtensible parent, Element e, TWSDLParserContextImpl context) {
   243         context.push();
   244         context.registerNamespaces(e);
   246         SOAPHeader header = new SOAPHeader(context.getLocation(e));
   248         String use = XmlUtil.getAttributeOrNull(e, Constants.ATTR_USE);
   249         if (use != null) {
   250             if (use.equals(Constants.ATTRVALUE_LITERAL)) {
   251                 header.setUse(SOAPUse.LITERAL);
   252             } else if (use.equals(Constants.ATTRVALUE_ENCODED)) {
   253                 header.setUse(SOAPUse.ENCODED);
   254             } else {
   255                 Util.fail("parsing.invalidAttributeValue", Constants.ATTR_USE, use);
   256             }
   257         }
   259         String namespace = XmlUtil.getAttributeOrNull(e, Constants.ATTR_NAMESPACE);
   260         if (namespace != null) {
   261             header.setNamespace(namespace);
   262         }
   264         String encodingStyle = XmlUtil.getAttributeOrNull(e, Constants.ATTR_ENCODING_STYLE);
   265         if (encodingStyle != null) {
   266             header.setEncodingStyle(encodingStyle);
   267         }
   269         String part = XmlUtil.getAttributeOrNull(e, Constants.ATTR_PART);
   270         if (part != null) {
   271             header.setPart(part);
   272         }
   274         String messageAttr = XmlUtil.getAttributeOrNull(e, Constants.ATTR_MESSAGE);
   275         if (messageAttr != null) {
   276             header.setMessage(context.translateQualifiedName(context.getLocation(e), messageAttr));
   277         }
   279         for (Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();) {
   280             Element e2 = Util.nextElement(iter);
   281             if (e2 == null)
   282                 break;
   284             if (XmlUtil.matchesTagNS(e2, getHeaderfaultQName())) {
   285                 handleHeaderFaultElement(e, context, header, use, e2);
   286             } else {
   287                 Util.fail("parsing.invalidElement", e2.getTagName(), e2.getNamespaceURI());
   288             }
   289         }
   291         parent.addExtension(header);
   292         context.pop();
   293         context.fireDoneParsingEntity(getHeaderQName(), header);
   294         return true;
   295     }
   297     private void handleHeaderFaultElement(Element e, TWSDLParserContextImpl context, SOAPHeader header, String use, Element e2) {
   298         context.push();
   299         context.registerNamespaces(e);
   301         SOAPHeaderFault headerfault = new SOAPHeaderFault(context.getLocation(e));
   303         String use2 = XmlUtil.getAttributeOrNull(e2, Constants.ATTR_USE);
   304         if (use2 != null) {
   305             if (use2.equals(Constants.ATTRVALUE_LITERAL)) {
   306                 headerfault.setUse(SOAPUse.LITERAL);
   307             } else if (use.equals(Constants.ATTRVALUE_ENCODED)) {
   308                 headerfault.setUse(SOAPUse.ENCODED);
   309             } else {
   310                 Util.fail("parsing.invalidAttributeValue", Constants.ATTR_USE, use2);
   311             }
   312         }
   314         String namespace2 = XmlUtil.getAttributeOrNull(e2, Constants.ATTR_NAMESPACE);
   315         if (namespace2 != null) {
   316             headerfault.setNamespace(namespace2);
   317         }
   319         String encodingStyle2 = XmlUtil.getAttributeOrNull(e2, Constants.ATTR_ENCODING_STYLE);
   320         if (encodingStyle2 != null) {
   321             headerfault.setEncodingStyle(encodingStyle2);
   322         }
   324         String part2 = XmlUtil.getAttributeOrNull(e2, Constants.ATTR_PART);
   325         if (part2 != null) {
   326             headerfault.setPart(part2);
   327         }
   329         String messageAttr2 = XmlUtil.getAttributeOrNull(e2, Constants.ATTR_MESSAGE);
   330         if (messageAttr2 != null) {
   331             headerfault.setMessage(
   332                 context.translateQualifiedName(context.getLocation(e2), messageAttr2));
   333         }
   335         header.add(headerfault);
   336         context.pop();
   337     }
   339     public boolean handleFaultExtension(
   340         TWSDLParserContext context,
   341         TWSDLExtensible parent,
   342         Element e) {
   343         if (XmlUtil.matchesTagNS(e, getFaultQName())) {
   344             context.push();
   345             context.registerNamespaces(e);
   347             SOAPFault fault = new SOAPFault(context.getLocation(e));
   349             String name = XmlUtil.getAttributeOrNull(e, Constants.ATTR_NAME);
   350             if (name != null) {
   351                 fault.setName(name);
   352             }
   354             String use = XmlUtil.getAttributeOrNull(e, Constants.ATTR_USE);
   355             if (use != null) {
   356                 if (use.equals(Constants.ATTRVALUE_LITERAL)) {
   357                     fault.setUse(SOAPUse.LITERAL);
   358                 } else if (use.equals(Constants.ATTRVALUE_ENCODED)) {
   359                     fault.setUse(SOAPUse.ENCODED);
   360                 } else {
   361                     Util.fail(
   362                         "parsing.invalidAttributeValue",
   363                         Constants.ATTR_USE,
   364                         use);
   365                 }
   366             }
   368             String namespace =
   369                 XmlUtil.getAttributeOrNull(e, Constants.ATTR_NAMESPACE);
   370             if (namespace != null) {
   371                 fault.setNamespace(namespace);
   372             }
   374             String encodingStyle =
   375                 XmlUtil.getAttributeOrNull(e, Constants.ATTR_ENCODING_STYLE);
   376             if (encodingStyle != null) {
   377                 fault.setEncodingStyle(encodingStyle);
   378             }
   380             parent.addExtension(fault);
   381             context.pop();
   382 //            context.fireDoneParsingEntity(getFaultQName(), fault);
   383             return true;
   384         } else if (XmlUtil.matchesTagNS(e, getHeaderQName())) {
   385             // although SOAP spec doesn't define meaning of this extension; it is allowed
   386             // to be here, so we have to accept it, not fail (bug 13576977)
   387             return handleHeaderElement(parent, e, (TWSDLParserContextImpl) context);
   388         } else {
   389             Util.fail(
   390                 "parsing.invalidExtensionElement",
   391                 e.getTagName(),
   392                 e.getNamespaceURI());
   393             return false; // keep compiler happy
   394         }
   395     }
   397     public boolean handleServiceExtension(
   398         TWSDLParserContext context,
   399         TWSDLExtensible parent,
   400         Element e) {
   401         Util.fail(
   402             "parsing.invalidExtensionElement",
   403             e.getTagName(),
   404             e.getNamespaceURI());
   405         return false; // keep compiler happy
   406     }
   408     @Override
   409     public boolean handlePortExtension(
   410         TWSDLParserContext context,
   411         TWSDLExtensible parent,
   412         Element e) {
   413         if (XmlUtil.matchesTagNS(e, getAddressQName())) {
   414             context.push();
   415             context.registerNamespaces(e);
   417             SOAPAddress address = new SOAPAddress(context.getLocation(e));
   419             String location =
   420                 Util.getRequiredAttribute(e, Constants.ATTR_LOCATION);
   421             address.setLocation(location);
   423             parent.addExtension(address);
   424             context.pop();
   425 //            context.fireDoneParsingEntity(getAddressQName(), address);
   426             return true;
   427         } else {
   428             Util.fail(
   429                 "parsing.invalidExtensionElement",
   430                 e.getTagName(),
   431                 e.getNamespaceURI());
   432             return false; // keep compiler happy
   433         }
   434     }
   436     public boolean handlePortTypeExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) {
   437        Util.fail(
   438             "parsing.invalidExtensionElement",
   439             e.getTagName(),
   440             e.getNamespaceURI());
   441         return false; // keep compiler happy
   442     }
   444     protected QName getBodyQName(){
   445         return SOAPConstants.QNAME_BODY;
   446     }
   448     protected QName getHeaderQName(){
   449         return SOAPConstants.QNAME_HEADER;
   450     }
   452     protected QName getHeaderfaultQName(){
   453         return SOAPConstants.QNAME_HEADERFAULT;
   454     }
   456     protected QName getOperationQName(){
   457         return SOAPConstants.QNAME_OPERATION;
   458     }
   460     protected QName getFaultQName(){
   461         return SOAPConstants.QNAME_FAULT;
   462     }
   464     protected QName getAddressQName(){
   465         return SOAPConstants.QNAME_ADDRESS;
   466     }
   468     protected QName getBindingQName(){
   469         return SOAPConstants.QNAME_BINDING;
   470     }
   471 }

mercurial