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

Print this page


   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  */
  25 
  26 package com.sun.xml.internal.ws.policy;
  27 
  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;
  33 
  34 import java.util.Collection;
  35 import java.util.HashMap;
  36 import java.util.LinkedList;

  37 import javax.xml.namespace.QName;
  38 
  39 /**
  40  * Utility methods that operate on a PolicyMap.
  41  *
  42  * @author Fabian Ritzmann
  43  */
  44 public class PolicyMapUtil {
  45 
  46     private static final PolicyLogger LOGGER = PolicyLogger.getLogger(PolicyMapUtil.class);
  47 
  48     private static final PolicyMerger MERGER = PolicyMerger.getMerger();
  49 
  50     /**
  51      * Prevent instantiation.
  52      */
  53     private PolicyMapUtil() {
  54     }
  55 
  56     /**


  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);
  89 
  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         }
 103 
 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);
 108 
 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         }
 129 
 130         LOGGER.exiting();
 131     }
 132 
 133 }
   1 /*
   2  * Copyright (c) 1997, 2014, 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.xml.internal.ws.policy;
  27 
  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;
  33 
  34 import java.util.Collection;
  35 import java.util.HashMap;
  36 import java.util.LinkedList;
  37 import java.util.Map.Entry;
  38 import javax.xml.namespace.QName;
  39 
  40 /**
  41  * Utility methods that operate on a PolicyMap.
  42  *
  43  * @author Fabian Ritzmann
  44  */
  45 public class PolicyMapUtil {
  46 
  47     private static final PolicyLogger LOGGER = PolicyLogger.getLogger(PolicyMapUtil.class);
  48 
  49     private static final PolicyMerger MERGER = PolicyMerger.getMerger();
  50 
  51     /**
  52      * Prevent instantiation.
  53      */
  54     private PolicyMapUtil() {
  55     }
  56 
  57     /**


  86      */
  87     public static void insertPolicies(final PolicyMap policyMap, final Collection<PolicySubject> policySubjects, QName serviceName, QName portName)
  88             throws PolicyException {
  89         LOGGER.entering(policyMap, policySubjects, serviceName, portName);
  90 
  91         final HashMap<WsdlBindingSubject, Collection<Policy>> subjectToPolicies = new HashMap<WsdlBindingSubject, Collection<Policy>>();
  92         for (PolicySubject subject: policySubjects) {
  93             final Object actualSubject = subject.getSubject();
  94             if (actualSubject instanceof WsdlBindingSubject) {
  95                 final WsdlBindingSubject wsdlSubject = (WsdlBindingSubject) actualSubject;
  96                 final Collection<Policy> subjectPolicies = new LinkedList<Policy>();
  97                 subjectPolicies.add(subject.getEffectivePolicy(MERGER));
  98                 final Collection<Policy> existingPolicies = subjectToPolicies.put(wsdlSubject, subjectPolicies);
  99                 if (existingPolicies != null) {
 100                     subjectPolicies.addAll(existingPolicies);
 101                 }
 102             }
 103         }
 104 
 105         final PolicyMapKeyConverter converter = new PolicyMapKeyConverter(serviceName, portName);
 106         for (Entry<WsdlBindingSubject, Collection<Policy>> entry : subjectToPolicies.entrySet()) {
 107             WsdlBindingSubject wsdlSubject = entry.getKey();
 108             Collection<Policy> policySet = entry.getValue();
 109             final PolicySubject newSubject = new PolicySubject(wsdlSubject, policySet);
 110             PolicyMapKey mapKey = converter.getPolicyMapKey(wsdlSubject);
 111 
 112             if (wsdlSubject.isBindingSubject()) {
 113                 policyMap.putSubject(ScopeType.ENDPOINT, mapKey, newSubject);
 114             } else if (wsdlSubject.isBindingOperationSubject()) {

 115                 policyMap.putSubject(ScopeType.OPERATION, mapKey, newSubject);
 116             } else if (wsdlSubject.isBindingMessageSubject()) {

 117                 switch (wsdlSubject.getMessageType()) {
 118                     case INPUT:
 119                         policyMap.putSubject(ScopeType.INPUT_MESSAGE, mapKey, newSubject);
 120                         break;
 121                     case OUTPUT:
 122                         policyMap.putSubject(ScopeType.OUTPUT_MESSAGE, mapKey, newSubject);
 123                         break;
 124                     case FAULT:
 125                         policyMap.putSubject(ScopeType.FAULT_MESSAGE, mapKey, newSubject);
 126                         break;
 127                     default:
 128                         break;
 129                 }
 130             }
 131         }
 132 
 133         LOGGER.exiting();
 134     }
 135 
 136 }