src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/AbstractQNameValidator.java

Thu, 12 Oct 2017 19:44:07 +0800

author
aoqi
date
Thu, 12 Oct 2017 19:44:07 +0800
changeset 760
e530533619ec
parent 0
373ffda63c9a
permissions
-rw-r--r--

merge

     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  */
    26 package com.sun.xml.internal.ws.policy.spi;
    28 import com.sun.xml.internal.ws.policy.PolicyAssertion;
    29 import java.util.Collection;
    30 import java.util.HashSet;
    31 import java.util.Set;
    32 import javax.xml.namespace.QName;
    34 /**
    35  * This abstract policy assertion validator validates assertions by their qualified
    36  * name. Server and client side validation methods return {@link Fitness} based on
    37  * following schema:
    38  *
    39  * <ul>
    40  * <li>{@link Fitness#SUPPORTED} - if the assertion qualified name is in the list of
    41  * supported assertion names on the server/client side</li>
    42  * <li>{@link Fitness#UNSUPPORTED} - if the assertion qualified name is not in the list of
    43  * supported assertion names on the server/client side, however it is in the list of
    44  * assertion names supported on the other side</li>
    45  * <li>{@link Fitness#UNKNOWN} - if the assertion qualified name is not present in the any of
    46  * the lists of supported assertion names</li>
    47  * </ul>
    48  *
    49  * For some domains such validation may be sufficient enough. Other domains may
    50  * use functionality of this base class as a first step validation before any attempts
    51  * to validate content of the assertion. To do this one needs to override and reuse
    52  * the default behavior of {@link #validateClientSide(PolicyAssertion)} and
    53  * {@link #validateServerSide(PolicyAssertion)} methods.
    54  *
    55  * @author Marek Potociar (marek.potociar at sun.com)
    56  */
    57 public abstract class AbstractQNameValidator implements PolicyAssertionValidator {
    58     private final Set<String> supportedDomains = new HashSet<String>();
    59     private final Collection<QName> serverAssertions;
    60     private final Collection<QName> clientAssertions;
    62     /**
    63      * Constructor that takes two collections specifying qualified names of assertions
    64      * supported on either server or client side. The set of all assertion namespaces
    65      * defines list of all domains supported  by the assertion validator
    66      * (see {@link PolicyAssertionValidator#declareSupportedDomains}).
    67      *
    68      * @param serverSideAssertions The server-side assertions.
    69      * @param clientSideAssertions The client-side assertions.
    70      */
    71     protected AbstractQNameValidator(Collection<QName> serverSideAssertions, Collection<QName> clientSideAssertions) {
    72         if (serverSideAssertions != null) {
    73             this.serverAssertions = new HashSet<QName>(serverSideAssertions);
    74             for (QName assertion : this.serverAssertions) {
    75                 supportedDomains.add(assertion.getNamespaceURI());
    76             }
    77         } else {
    78             this.serverAssertions = new HashSet<QName>(0);
    79         }
    81         if (clientSideAssertions != null) {
    82             this.clientAssertions = new HashSet<QName>(clientSideAssertions);
    83             for (QName assertion : this.clientAssertions) {
    84                 supportedDomains.add(assertion.getNamespaceURI());
    85             }
    86         } else {
    87             this.clientAssertions = new HashSet<QName>(0);
    88         }
    89     }
    91     public String[] declareSupportedDomains() {
    92         return supportedDomains.toArray(new String[supportedDomains.size()]);
    93     }
    95     public Fitness validateClientSide(PolicyAssertion assertion) {
    96         return validateAssertion(assertion, clientAssertions, serverAssertions);
    97     }
    99     public Fitness validateServerSide(PolicyAssertion assertion) {
   100         return validateAssertion(assertion, serverAssertions, clientAssertions);
   101     }
   103     private Fitness validateAssertion(PolicyAssertion assertion, Collection<QName> thisSideAssertions, Collection<QName> otherSideAssertions) {
   104         QName assertionName = assertion.getName();
   105         if (thisSideAssertions.contains(assertionName)) {
   106             return Fitness.SUPPORTED;
   107         } else if (otherSideAssertions.contains(assertionName)) {
   108             return Fitness.UNSUPPORTED;
   109         } else {
   110             return Fitness.UNKNOWN;
   111         }
   112     }
   113 }

mercurial