/*
 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package com.sun.xml.internal.ws.policy.jaxws;

import com.sun.xml.internal.ws.api.policy.AlternativeSelector;
import com.sun.xml.internal.ws.api.policy.PolicyResolver;
import com.sun.xml.internal.ws.api.policy.ValidationProcessor;
import com.sun.xml.internal.ws.policy.AssertionSet;
import com.sun.xml.internal.ws.policy.EffectivePolicyModifier;
import com.sun.xml.internal.ws.policy.Policy;
import com.sun.xml.internal.ws.policy.PolicyAssertion;
import com.sun.xml.internal.ws.policy.PolicyException;
import com.sun.xml.internal.ws.policy.PolicyMap;
import com.sun.xml.internal.ws.policy.spi.PolicyAssertionValidator.Fitness;
import com.sun.xml.internal.ws.resources.PolicyMessages;

import javax.xml.ws.WebServiceException;

This default implementation runs the policy validators on the server side and selects a policy alternative on the client side.
Author:Rama Pulavarthi, Fabian Ritzmann
/** * This default implementation runs the policy validators on the server side and * selects a policy alternative on the client side. * * @author Rama Pulavarthi * @author Fabian Ritzmann */
public class DefaultPolicyResolver implements PolicyResolver { public PolicyMap resolve(ServerContext context) { PolicyMap map = context.getPolicyMap(); if(map != null) validateServerPolicyMap(map); return map; } public PolicyMap resolve(ClientContext context) { PolicyMap map = context.getPolicyMap(); if(map != null) map = doAlternativeSelection(map); return map; }
Checks if the PolicyMap has only single alternative in the scope.
Params:
  • policyMap – PolicyMap that needs to be validated.
/** * Checks if the PolicyMap has only single alternative in the scope. * * @param policyMap * PolicyMap that needs to be validated. */
private void validateServerPolicyMap(PolicyMap policyMap) { try { final ValidationProcessor validationProcessor = ValidationProcessor.getInstance(); for (Policy policy : policyMap) { // TODO: here is a good place to check if the actual policy has only one alternative... for (AssertionSet assertionSet : policy) { for (PolicyAssertion assertion : assertionSet) { Fitness validationResult = validationProcessor.validateServerSide(assertion); if (validationResult != Fitness.SUPPORTED) { throw new PolicyException(PolicyMessages.WSP_1015_SERVER_SIDE_ASSERTION_VALIDATION_FAILED( assertion.getName(), validationResult)); } } } } } catch (PolicyException e) { throw new WebServiceException(e); } }
Selects a best alternative if there are multiple policy alternatives.
Params:
  • policyMap –
Returns:
/** * Selects a best alternative if there are multiple policy alternatives. * * @param policyMap * @return */
private PolicyMap doAlternativeSelection(PolicyMap policyMap) { final EffectivePolicyModifier modifier = EffectivePolicyModifier.createEffectivePolicyModifier(); modifier.connect(policyMap); try { AlternativeSelector.doSelection(modifier); } catch (PolicyException e) { throw new WebServiceException(e); } return policyMap; } }