src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapUtil.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;
    28 import com.sun.xml.internal.ws.policy.PolicyMap.ScopeType;
    29 import com.sun.xml.internal.ws.policy.privateutil.LocalizationMessages;
    30 import com.sun.xml.internal.ws.policy.privateutil.PolicyLogger;
    31 import com.sun.xml.internal.ws.policy.subject.PolicyMapKeyConverter;
    32 import com.sun.xml.internal.ws.policy.subject.WsdlBindingSubject;
    34 import java.util.Collection;
    35 import java.util.HashMap;
    36 import java.util.LinkedList;
    37 import javax.xml.namespace.QName;
    39 /**
    40  * Utility methods that operate on a PolicyMap.
    41  *
    42  * @author Fabian Ritzmann
    43  */
    44 public class PolicyMapUtil {
    46     private static final PolicyLogger LOGGER = PolicyLogger.getLogger(PolicyMapUtil.class);
    48     private static final PolicyMerger MERGER = PolicyMerger.getMerger();
    50     /**
    51      * Prevent instantiation.
    52      */
    53     private PolicyMapUtil() {
    54     }
    56     /**
    57      * Throw an exception if the policy map contains any policy with at least two
    58      * policy alternatives.
    59      *
    60      * Optional assertions are not considered (unless they have been normalized into
    61      * two policy alternatives).
    62      *
    63      * @param map policy map to be processed
    64      * @throws PolicyException Thrown if the policy map contains at least one policy
    65      * with more than one policy alternative
    66      */
    67     public static void rejectAlternatives(final PolicyMap map) throws PolicyException {
    68         for (Policy policy : map) {
    69             if (policy.getNumberOfAssertionSets() > 1) {
    70                 throw LOGGER.logSevereException(new PolicyException(LocalizationMessages.WSP_0035_RECONFIGURE_ALTERNATIVES(policy.getIdOrName())));
    71             }
    72         }
    73     }
    75     /**
    76      * Inserts all PolicySubjects of type WsdlBindingSubject into the given policy map.
    77      *
    78      * @param policyMap The policy map
    79      * @param policySubjects The policy subjects. The actual subject must have the
    80      *   type WsdlBindingSubject, otherwise it will not be processed.
    81      * @param serviceName The name of the current WSDL service
    82      * @param portName The name of the current WSDL port
    83      * @throws PolicyException Thrown if the effective policy of a policy subject
    84      *   could not be computed
    85      */
    86     public static void insertPolicies(final PolicyMap policyMap, final Collection<PolicySubject> policySubjects, QName serviceName, QName portName)
    87             throws PolicyException {
    88         LOGGER.entering(policyMap, policySubjects, serviceName, portName);
    90         final HashMap<WsdlBindingSubject, Collection<Policy>> subjectToPolicies = new HashMap<WsdlBindingSubject, Collection<Policy>>();
    91         for (PolicySubject subject: policySubjects) {
    92             final Object actualSubject = subject.getSubject();
    93             if (actualSubject instanceof WsdlBindingSubject) {
    94                 final WsdlBindingSubject wsdlSubject = (WsdlBindingSubject) actualSubject;
    95                 final Collection<Policy> subjectPolicies = new LinkedList<Policy>();
    96                 subjectPolicies.add(subject.getEffectivePolicy(MERGER));
    97                 final Collection<Policy> existingPolicies = subjectToPolicies.put(wsdlSubject, subjectPolicies);
    98                 if (existingPolicies != null) {
    99                     subjectPolicies.addAll(existingPolicies);
   100                 }
   101             }
   102         }
   104         final PolicyMapKeyConverter converter = new PolicyMapKeyConverter(serviceName, portName);
   105         for (WsdlBindingSubject wsdlSubject : subjectToPolicies.keySet()) {
   106             final PolicySubject newSubject = new PolicySubject(wsdlSubject, subjectToPolicies.get(wsdlSubject));
   107             PolicyMapKey mapKey = converter.getPolicyMapKey(wsdlSubject);
   109             if (wsdlSubject.isBindingSubject()) {
   110                 policyMap.putSubject(ScopeType.ENDPOINT, mapKey, newSubject);
   111             }
   112             else if (wsdlSubject.isBindingOperationSubject()) {
   113                 policyMap.putSubject(ScopeType.OPERATION, mapKey, newSubject);
   114             }
   115             else if (wsdlSubject.isBindingMessageSubject()) {
   116                 switch (wsdlSubject.getMessageType()) {
   117                     case INPUT:
   118                         policyMap.putSubject(ScopeType.INPUT_MESSAGE, mapKey, newSubject);
   119                         break;
   120                     case OUTPUT:
   121                         policyMap.putSubject(ScopeType.OUTPUT_MESSAGE, mapKey, newSubject);
   122                         break;
   123                     case FAULT:
   124                         policyMap.putSubject(ScopeType.FAULT_MESSAGE, mapKey, newSubject);
   125                         break;
   126                 }
   127             }
   128         }
   130         LOGGER.exiting();
   131     }
   133 }

mercurial