/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.axis2.util; import org.apache.axis2.description.AxisBinding; import org.apache.axis2.description.AxisBindingMessage; import org.apache.axis2.description.AxisBindingOperation; import org.apache.axis2.description.AxisDescription; import org.apache.axis2.description.AxisEndpoint; import org.apache.axis2.description.AxisMessage; import org.apache.axis2.description.AxisOperation; import org.apache.axis2.description.AxisService; import org.apache.axis2.description.AxisServiceGroup; import org.apache.axis2.description.PolicyInclude; import org.apache.axis2.description.PolicySubject; import org.apache.axis2.engine.AxisConfiguration; import org.apache.neethi.Policy; import org.apache.neethi.PolicyComponent; import org.apache.neethi.PolicyRegistry; public class AxisPolicyLocator implements PolicyRegistry { AxisDescription subject = null; private static final short AXIS_BINDING_MESSAGE = 1; private static final short AXIS_MESSAGE = 2; private static final short AXIS_BINDING_OPERATION = 3; private static final short AXIS_OPERATION = 4; private static final short AXIS_BINDING = 5; private static final short AXIS_ENDPOINT = 6; private static final short AXIS_SERVICE = 7; private static final short AXIS_SERVICE_GROUP = 8; private static final short AXIS_CONFIGURATION = 9; public AxisPolicyLocator(AxisDescription subject) { this.subject = subject; } public Policy lookup(String key) { if (subject == null) { return null; } Policy policy = null; PolicySubject policySubject = subject.getPolicySubject(); PolicyComponent attachedPolicyComponent = policySubject .getAttachedPolicyComponent(key); if (attachedPolicyComponent != null && attachedPolicyComponent instanceof Policy) { policy = (Policy) attachedPolicyComponent; if (policy != null) { return policy; } } if (subject instanceof AxisService) { policy = ((AxisService) subject).lookupPolicy(key); if (policy != null) { return policy; } } short type = getType(subject); /* * processing the parallel level */ AxisDescription parallelLevel = null; switch (type) { case AXIS_BINDING_MESSAGE: parallelLevel = ((AxisBindingMessage) subject).getAxisMessage(); break; case AXIS_BINDING_OPERATION: parallelLevel = ((AxisBindingOperation) subject).getAxisOperation(); break; default: break; } if (parallelLevel != null) { policy = (new AxisPolicyLocator(parallelLevel)).lookup(key); if (policy != null) { return policy; } } AxisDescription upperLevel = getUpperLevel(type, subject); if (upperLevel != null) { policy = (new AxisPolicyLocator(upperLevel)).lookup(key); return policy; } return null; } public void register(String key, Policy policy) { throw new UnsupportedOperationException(); } public void remove(String key) { throw new UnsupportedOperationException(); } private AxisDescription getUpperLevel(short type, AxisDescription thisLevel) { switch (type) { case AXIS_BINDING_MESSAGE: return ((AxisBindingMessage) thisLevel).getAxisBindingOperation(); case AXIS_BINDING_OPERATION: return ((AxisBindingOperation) thisLevel).getAxisBinding(); case AXIS_BINDING: return ((AxisBinding) thisLevel).getAxisEndpoint(); case AXIS_ENDPOINT: return ((AxisEndpoint) thisLevel).getAxisService(); case AXIS_MESSAGE: return ((AxisMessage) thisLevel).getAxisOperation(); case AXIS_OPERATION: return ((AxisOperation) thisLevel).getAxisService(); case AXIS_SERVICE: return ((AxisService) thisLevel).getAxisServiceGroup(); case AXIS_SERVICE_GROUP: return ((AxisServiceGroup) thisLevel).getAxisConfiguration(); default: return null; } } private short getType(AxisDescription description) { if (description instanceof AxisBindingMessage) { return AXIS_BINDING_MESSAGE; } else if (description instanceof AxisMessage) { return AXIS_MESSAGE; } else if (description instanceof AxisBindingOperation) { return AXIS_BINDING_OPERATION; } else if (description instanceof AxisOperation) { return AXIS_OPERATION; } else if (description instanceof AxisBinding) { return AXIS_BINDING; } else if (description instanceof AxisEndpoint) { return AXIS_ENDPOINT; } else if (description instanceof AxisService) { return AXIS_SERVICE; } else if (description instanceof AxisServiceGroup) { return AXIS_SERVICE_GROUP; } else if (description instanceof AxisConfiguration) { return AXIS_CONFIGURATION; } return -1; } }