Thu, 12 Oct 2017 19:44:07 +0800
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 }