You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by an...@apache.org on 2007/03/28 18:08:25 UTC

svn commit: r523385 [1/2] - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/ws/policy/ api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/ api/src/test/java/org/apache/cxf/ws/policy/ rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ r...

Author: andreasmyth
Date: Wed Mar 28 09:08:23 2007
New Revision: 523385

URL: http://svn.apache.org/viewvc?view=rev&rev=523385
Log:
[JIRA CXF-473] Adding more policy APIs so clients can access effective policies associated with a message/endpoint.
Used EndpointInfo instead of Endpoint to key effective policies.
Removed cxf-rt-ws-rm dependency on cxf-rt-ws-policy.

Added:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties   (with props)
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EffectivePolicy.java   (with props)
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EndpointPolicy.java   (with props)
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java   (with props)
    incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/AssertionInfoMapTest.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EffectivePolicyImpl.java
      - copied, changed from r523191, incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/OutPolicyInfo.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyImpl.java
      - copied, changed from r523191, incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyInfo.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java
      - copied, changed from r523191, incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/EffectivePolicyImplTest.java
      - copied, changed from r523191, incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/OutPolicyInfoTest.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/EndpointPolicyImplTest.java
      - copied, changed from r523191, incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/EndpointPolicyInfoTest.java
Removed:
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyInfo.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/OutPolicyInfo.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/EndpointPolicyInfoTest.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/OutPolicyInfoTest.java
Modified:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/AssertionInfoMap.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistry.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertion.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInFaultInterceptor.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInInterceptor.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyOutInterceptor.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistryImpl.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyVerificationInFaultInterceptor.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyVerificationInInterceptor.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyInInterceptor.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutFaultInterceptor.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutInterceptor.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/spring/InitializingPolicyEngine.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyEngineTest.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyExtensionsTest.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyInterceptorsTest.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyVerificationInFaultInterceptorTest.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyVerificationInInterceptorTest.java
    incubator/cxf/trunk/rt/ws/rm/pom.xml
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java
    incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMEndpointTest.java

Added: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties?view=auto&rev=523385
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties (added)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties Wed Mar 28 09:08:23 2007
@@ -0,0 +1,21 @@
+#
+#
+#    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.
+#
+#
+NO_ALTERNATIVE_EXC = None of the policy alternatives can be satisfied.
\ No newline at end of file

Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/AssertionInfoMap.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/AssertionInfoMap.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/AssertionInfoMap.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/AssertionInfoMap.java Wed Mar 28 09:08:23 2007
@@ -22,15 +22,25 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ResourceBundle;
 
 import javax.xml.namespace.QName;
 
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.helpers.CastUtils;
 import org.apache.neethi.Assertion;
+import org.apache.neethi.Policy;
 
 /**
  * 
  */
 public class AssertionInfoMap extends HashMap<QName, Collection<AssertionInfo>> {
+    
+    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(AssertionInfoMap.class, "APIMessages");
+    
     public AssertionInfoMap(Collection<Assertion> assertions) {
         super(assertions.size());
         for (Assertion a : assertions) {
@@ -42,5 +52,38 @@
             }
             ais.add(ai);
         }
+    }
+    
+    public boolean supportsAlternative(Collection<Assertion> alternative) {
+        
+        for (Assertion a : alternative) {
+            boolean asserted = false;
+            Collection<AssertionInfo> ais = get(a.getName());
+            if (null != ais) {
+                for (AssertionInfo ai : ais) {
+                    // if (ai.getAssertion() == a && ai.isAsserted()) {
+                    if (ai.getAssertion().equal(a) && ai.isAsserted()) {
+                        asserted = true;
+                        break;
+                    }
+                }
+            }
+            if (!asserted) {
+                return false;
+            }
+        }
+        
+        return true;
+    }
+    
+    public void checkEffectivePolicy(Policy policy) {
+        Iterator alternatives = policy.getAlternatives();
+        while (alternatives.hasNext()) {      
+            List<Assertion> alternative = CastUtils.cast((List)alternatives.next(), Assertion.class);
+            if (supportsAlternative(alternative)) {
+                return;
+            }
+        }
+        throw new PolicyException(new Message("NO_ALTERNATIVE_EXC", BUNDLE));
     }
 }

Added: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EffectivePolicy.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EffectivePolicy.java?view=auto&rev=523385
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EffectivePolicy.java (added)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EffectivePolicy.java Wed Mar 28 09:08:23 2007
@@ -0,0 +1,39 @@
+/**
+ * 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.cxf.ws.policy;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.Policy;
+
+/**
+ * Describes the effective policy of an outbound message. 
+ */
+public interface EffectivePolicy {
+    
+    Policy getPolicy();
+    
+    Collection<Assertion> getChosenAlternative();
+    
+    List<Interceptor> getInterceptors();
+}

Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EffectivePolicy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EffectivePolicy.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EndpointPolicy.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EndpointPolicy.java?view=auto&rev=523385
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EndpointPolicy.java (added)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EndpointPolicy.java Wed Mar 28 09:08:23 2007
@@ -0,0 +1,48 @@
+/**
+ * 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.cxf.ws.policy;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.Policy;
+
+/**
+ * Describes the policy of an inbound message. As the underlying message
+ * type is not known, only the effective endpoint policy is calculated. 
+ * The total of all assertions that may apply to an inbound message for an endpoint
+ * (and hence the required interceptors) are available as vocabulary.
+ */
+public interface EndpointPolicy {
+    
+    Policy getPolicy();
+    
+    Collection<Assertion> getChosenAlternative();
+    
+    Collection<Assertion> getVocabulary();
+    
+    Collection<Assertion> getFaultVocabulary();
+    
+    List<Interceptor> getInterceptors();
+    
+    List<Interceptor> getFaultInterceptors();
+}

Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EndpointPolicy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/EndpointPolicy.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java?view=auto&rev=523385
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java (added)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java Wed Mar 28 09:08:23 2007
@@ -0,0 +1,75 @@
+/**
+ * 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.cxf.ws.policy;
+
+import org.apache.cxf.service.model.BindingFaultInfo;
+import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.Conduit;
+import org.apache.cxf.transport.Destination;
+import org.apache.neethi.PolicyRegistry;
+
+/**
+ * 
+ */
+public interface PolicyEngine {
+
+    // available throughout the outbound path
+    
+    EffectivePolicy getEffectiveClientRequestPolicy(EndpointInfo ei, BindingOperationInfo boi, Conduit c);
+    
+    void setEffectiveClientRequestPolicy(EndpointInfo ei, BindingOperationInfo boi, EffectivePolicy ep);
+    
+    EffectivePolicy getEffectiveServerResponsePolicy(EndpointInfo ei, BindingOperationInfo boi, 
+                                                     Destination d);
+    
+    void setEffectiveServerResponsePolicy(EndpointInfo ei, BindingOperationInfo boi, EffectivePolicy ep);
+    
+    EffectivePolicy getEffectiveServerFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi, Destination d);
+    
+    void setEffectiveServerFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi, EffectivePolicy ep); 
+    
+    // available throughout the inbound path
+        
+    EndpointPolicy getClientEndpointPolicy(EndpointInfo ei, Conduit conduit);
+    
+    EndpointPolicy getServerEndpointPolicy(EndpointInfo ei, Destination destination);
+    
+    void setEndpointPolicy(EndpointInfo ei, EndpointPolicy ep);  
+    
+    // only available after message type has been determined
+    
+    EffectivePolicy getEffectiveServerRequestPolicy(EndpointInfo ei, BindingOperationInfo boi);
+    
+    void setEffectiveServerRequestPolicy(EndpointInfo ei, BindingOperationInfo boi, EffectivePolicy ep);
+    
+    EffectivePolicy getEffectiveClientResponsePolicy(EndpointInfo ei, BindingOperationInfo boi);
+    
+    void setEffectiveClientResponsePolicy(EndpointInfo ei, BindingOperationInfo boi, EffectivePolicy ep);
+    
+    EffectivePolicy getEffectiveClientFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi);
+    
+    void setEffectiveClientFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi, EffectivePolicy ep);
+    
+    
+    
+    PolicyRegistry getRegistry();
+    
+}

Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistry.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistry.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistry.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistry.java Wed Mar 28 09:08:23 2007
@@ -19,9 +19,14 @@
 
 package org.apache.cxf.ws.policy;
 
+import java.util.Collection;
+import java.util.List;
+
 import javax.xml.namespace.QName;
 
 import org.apache.cxf.extension.Registry;
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.neethi.Assertion;
 
 
 /**
@@ -30,4 +35,7 @@
  */
 public interface PolicyInterceptorProviderRegistry 
     extends Registry<QName, PolicyInterceptorProvider> {
+    
+    List<Interceptor> getInterceptors(Collection<Assertion> alterative, boolean out, boolean fault);
+
 }

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertion.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertion.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertion.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertion.java Wed Mar 28 09:08:23 2007
@@ -62,5 +62,15 @@
         a.setData(data);
         return a;        
     } 
+    
+    @SuppressWarnings("unchecked")
+    public static <T> JaxbAssertion<T> cast(Assertion a) {
+        return (JaxbAssertion<T>)a;
+    }
+    
+    @SuppressWarnings("unchecked")
+    public static <T> JaxbAssertion<T> cast(Assertion a, Class<T> type) {
+        return (JaxbAssertion<T>)a;
+    }
 
 }

Added: incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/AssertionInfoMapTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/AssertionInfoMapTest.java?view=auto&rev=523385
==============================================================================
--- incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/AssertionInfoMapTest.java (added)
+++ incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/AssertionInfoMapTest.java Wed Mar 28 09:08:23 2007
@@ -0,0 +1,138 @@
+/**
+ * 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.cxf.ws.policy;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.ws.policy.builder.primitive.PrimitiveAssertion;
+import org.apache.neethi.All;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.ExactlyOne;
+import org.apache.neethi.Policy;
+import org.easymock.classextension.EasyMock;
+import org.easymock.classextension.IMocksControl;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * 
+ */
+public class AssertionInfoMapTest extends Assert {
+
+    private IMocksControl control;
+    
+    @Before
+    public void setUp() {
+        control = EasyMock.createNiceControl();        
+    } 
+    
+    @Test
+    public void testAlternativeSupported() {
+        Assertion a1 = control.createMock(Assertion.class);
+        QName aqn = new QName("http://x.y.z", "a");
+        EasyMock.expect(a1.getName()).andReturn(aqn).anyTimes();
+        Assertion a2 = control.createMock(Assertion.class);
+        EasyMock.expect(a2.getName()).andReturn(aqn).anyTimes();
+        Assertion b = control.createMock(Assertion.class);
+        QName bqn = new QName("http://x.y.z", "b");
+        EasyMock.expect(b.getName()).andReturn(bqn).anyTimes();
+        Assertion c = control.createMock(Assertion.class);
+        QName cqn = new QName("http://x.y.z", "c");
+        EasyMock.expect(c.getName()).andReturn(cqn).anyTimes();
+        AssertionInfoMap aim = new AssertionInfoMap(CastUtils.cast(Collections.EMPTY_LIST, Assertion.class));
+        AssertionInfo ai1 = new AssertionInfo(a1);
+        AssertionInfo ai2 = new AssertionInfo(a2);
+        Collection<AssertionInfo> ais = new ArrayList<AssertionInfo>();
+        AssertionInfo bi = new AssertionInfo(b);
+        AssertionInfo ci = new AssertionInfo(c);
+        ais.add(ai1);
+        ais.add(ai2);
+        aim.put(aqn, ais);
+        aim.put(bqn, Collections.singleton(bi));
+        aim.put(cqn, Collections.singleton(ci));
+        ai2.setAsserted(true);
+        bi.setAsserted(true);
+        ci.setAsserted(true);
+        EasyMock.expect(a1.equal(a1)).andReturn(true).anyTimes();
+        EasyMock.expect(a2.equal(a2)).andReturn(true).anyTimes();
+        EasyMock.expect(b.equal(b)).andReturn(true).anyTimes();
+        EasyMock.expect(c.equal(c)).andReturn(true).anyTimes();
+        
+        
+        List<Assertion> alt1 = new ArrayList<Assertion>();
+        alt1.add(a1);
+        alt1.add(b);
+        
+        List<Assertion> alt2 = new ArrayList<Assertion>();
+        alt2.add(a2);
+        alt2.add(c);
+                
+        control.replay();
+        assertTrue(!aim.supportsAlternative(alt1));
+        assertTrue(aim.supportsAlternative(alt2));
+        control.verify();     
+    }  
+    
+    @Test
+    public void testCheckEffectivePolicy() { 
+        Policy p = new Policy();
+        QName aqn = new QName("http://x.y.z", "a");
+        Assertion a = new PrimitiveAssertion(aqn);
+        QName bqn = new QName("http://x.y.z", "b");
+        Assertion b = new PrimitiveAssertion(bqn);
+        QName cqn = new QName("http://x.y.z", "c");
+        Assertion c = new PrimitiveAssertion(cqn);
+        All alt1 = new All();
+        alt1.addAssertion(a);
+        alt1.addAssertion(b);
+        All alt2 = new All();
+        alt2.addAssertion(c);
+        ExactlyOne ea = new ExactlyOne();
+        ea.addPolicyComponent(alt1);
+        ea.addPolicyComponent(alt2);
+        p.addPolicyComponent(ea);   
+        AssertionInfoMap aim = new AssertionInfoMap(CastUtils.cast(Collections.EMPTY_LIST, Assertion.class));
+        AssertionInfo ai = new AssertionInfo(a);
+        AssertionInfo bi = new AssertionInfo(b);
+        AssertionInfo ci = new AssertionInfo(c);
+        aim.put(aqn, Collections.singleton(ai));
+        aim.put(bqn, Collections.singleton(bi));
+        aim.put(cqn, Collections.singleton(ci));
+        
+        try {
+            aim.checkEffectivePolicy(p);
+            fail("Expected PolicyException not thrown.");
+        } catch (PolicyException ex) {
+            // expected
+        }
+        
+        ai.setAsserted(true);
+        ci.setAsserted(true);
+        
+        aim.checkEffectivePolicy(p);
+    }  
+}

Propchange: incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/AssertionInfoMapTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/AssertionInfoMapTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInFaultInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInFaultInterceptor.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInFaultInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInFaultInterceptor.java Wed Mar 28 09:08:23 2007
@@ -30,6 +30,7 @@
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
+import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.Conduit;
 import org.apache.neethi.Assertion;
 
@@ -59,6 +60,7 @@
             LOG.fine("No endpoint.");
             return;
         }
+        EndpointInfo ei = e.getEndpointInfo();
         
         PolicyEngine pe = bus.getExtension(PolicyEngine.class);
         if (null == pe) {
@@ -68,19 +70,19 @@
         Conduit conduit = msg.getConduit();
         
         // We do not know the underlying message type yet - so we pre-emptively add interceptors 
-        // that can deal with the response and all of the operation's possible fault messages.
+        // that can deal with all faults returned to this client endpoint.
         
-        EndpointPolicyInfo epi = pe.getEndpointPolicyInfo(e, conduit);
+        EndpointPolicy ep = pe.getClientEndpointPolicy(ei, conduit);
         
-        List<Interceptor> policyInFaultInterceptors = epi.getInFaultInterceptors();
-        for (Interceptor poi : policyInFaultInterceptors) {
-            msg.getInterceptorChain().add(poi);
-            LOG.log(Level.INFO, "Added interceptor of type {0}", poi.getClass().getSimpleName());
+        List<Interceptor> faultInterceptors = ep.getFaultInterceptors();
+        for (Interceptor i : faultInterceptors) {
+            msg.getInterceptorChain().add(i);
+            LOG.log(Level.INFO, "Added interceptor of type {0}", i.getClass().getSimpleName());
         }
         
         // insert assertions of endpoint's fault vocabulary into message
         
-        Collection<Assertion> assertions = epi.getFaultVocabulary();
+        Collection<Assertion> assertions = ep.getFaultVocabulary();
         if (null != assertions) {
             msg.put(AssertionInfoMap.class, new AssertionInfoMap(assertions));
         }

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInInterceptor.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInInterceptor.java Wed Mar 28 09:08:23 2007
@@ -30,6 +30,7 @@
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
+import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.Conduit;
 import org.apache.neethi.Assertion;
 
@@ -59,6 +60,7 @@
             LOG.fine("No endpoint.");
             return;
         }
+        EndpointInfo ei = e.getEndpointInfo();
         
         PolicyEngine pe = bus.getExtension(PolicyEngine.class);
         if (null == pe) {
@@ -68,19 +70,19 @@
         Conduit conduit = msg.getConduit();
         
         // We do not know the underlying message type yet - so we pre-emptively add interceptors 
-        // that can deal with the response and all of the operation's possible fault messages.
+        // that can deal with any resposes or faults returned to this client endpoint.
         
-        EndpointPolicyInfo epi = pe.getEndpointPolicyInfo(e, conduit);
+        EndpointPolicy ep = pe.getClientEndpointPolicy(ei, conduit);
         
-        List<Interceptor> policyInInterceptors = epi.getInInterceptors();
-        for (Interceptor poi : policyInInterceptors) {
-            msg.getInterceptorChain().add(poi);
-            LOG.log(Level.INFO, "Added interceptor of type {0}", poi.getClass().getSimpleName());            
+        List<Interceptor> interceptors = ep.getInterceptors();
+        for (Interceptor i : interceptors) {
+            msg.getInterceptorChain().add(i);
+            LOG.log(Level.INFO, "Added interceptor of type {0}", i.getClass().getSimpleName());            
         }
         
         // insert assertions of endpoint's vocabulary into message
         
-        Collection<Assertion> assertions = epi.getVocabulary();
+        Collection<Assertion> assertions = ep.getVocabulary();
         if (null != assertions) {
             msg.put(AssertionInfoMap.class, new AssertionInfoMap(assertions));
         }

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyOutInterceptor.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyOutInterceptor.java Wed Mar 28 09:08:23 2007
@@ -31,6 +31,7 @@
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.Conduit;
 import org.apache.neethi.Assertion;
 
@@ -65,7 +66,8 @@
         if (null == e) {
             LOG.fine("No endpoint.");
             return;
-        }        
+        } 
+        EndpointInfo ei = e.getEndpointInfo();
         
         PolicyEngine pe = bus.getExtension(PolicyEngine.class);
         if (null == pe) {
@@ -76,17 +78,18 @@
         
         // add the required interceptors
         
-        OutPolicyInfo opi = pe.getClientRequestPolicyInfo(e, boi, conduit);
+        EffectivePolicy effectivePolicy = pe.getEffectiveClientRequestPolicy(ei, boi, conduit);
+        PolicyUtils.logPolicy(LOG, Level.FINEST, "Using effective policy: ", effectivePolicy.getPolicy());
         
-        List<Interceptor> policyOutInterceptors = opi.getInterceptors();
-        for (Interceptor poi : policyOutInterceptors) {            
-            msg.getInterceptorChain().add(poi);
-            LOG.log(Level.INFO, "Added interceptor of type {0}", poi.getClass().getSimpleName());
+        List<Interceptor> interceptors = effectivePolicy.getInterceptors();
+        for (Interceptor i : interceptors) {            
+            msg.getInterceptorChain().add(i);
+            LOG.log(Level.INFO, "Added interceptor of type {0}", i.getClass().getSimpleName());
         }
         
         // insert assertions of the chosen alternative into the message
         
-        Collection<Assertion> assertions = opi.getChosenAlternative();
+        Collection<Assertion> assertions = effectivePolicy.getChosenAlternative();
         if (null != assertions) {
             msg.put(AssertionInfoMap.class, new AssertionInfoMap(assertions));
         }

Copied: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EffectivePolicyImpl.java (from r523191, incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/OutPolicyInfo.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EffectivePolicyImpl.java?view=diff&rev=523385&p1=incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/OutPolicyInfo.java&r1=523191&p2=incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EffectivePolicyImpl.java&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/OutPolicyInfo.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EffectivePolicyImpl.java Wed Mar 28 09:08:23 2007
@@ -29,12 +29,12 @@
 
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.i18n.Message;
-import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.interceptor.Interceptor;
 import org.apache.cxf.service.model.BindingFaultInfo;
 import org.apache.cxf.service.model.BindingMessageInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.Conduit;
 import org.apache.cxf.transport.Destination;
 import org.apache.neethi.Assertion;
@@ -43,62 +43,61 @@
 /**
  * 
  */
-public class OutPolicyInfo {
+public class EffectivePolicyImpl implements EffectivePolicy {
     
-    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(OutPolicyInfo.class);
+    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(EffectivePolicyImpl.class);    
     
     protected Policy policy;     
     protected Collection<Assertion> chosenAlternative;
     protected List<Interceptor> interceptors;
     
-    public void initialise(EndpointPolicyInfo epi, PolicyEngine engine) {
+    public Policy getPolicy() {
+        return policy;        
+    }
+    
+    public List<Interceptor> getInterceptors() {
+        return interceptors;
+    }
+    
+    public Collection<Assertion> getChosenAlternative() {
+        return chosenAlternative;
+    }
+    
+    
+    void initialise(EndpointPolicyImpl epi, PolicyEngineImpl engine) {
         policy = epi.getPolicy();
         chosenAlternative = epi.getChosenAlternative();
         initialiseInterceptors(engine);  
     }
     
-    void initialise(Endpoint e, 
+    void initialise(EndpointInfo ei, 
                     BindingOperationInfo boi, 
-                    PolicyEngine engine, 
+                    PolicyEngineImpl engine, 
                     Assertor assertor,
                     boolean requestor) {
-        initialisePolicy(e, boi, engine, requestor);
+        initialisePolicy(ei, boi, engine, requestor);
         chooseAlternative(engine, assertor);
         initialiseInterceptors(engine);  
     }
     
-    void initialise(Endpoint e, 
+    void initialise(EndpointInfo ei, 
                     BindingFaultInfo bfi, 
-                    PolicyEngine engine, 
+                    PolicyEngineImpl engine, 
                     Assertor assertor) {
-        initialisePolicy(e, bfi, engine);
+        initialisePolicy(ei, bfi, engine);
         chooseAlternative(engine, assertor);
         initialiseInterceptors(engine);  
     }
-   
-    public Policy getPolicy() {
-        return policy;        
-    }
-    
-    public List<Interceptor> getInterceptors() {
-        return interceptors;
-    }
-    
-    public Collection<Assertion> getChosenAlternative() {
-        return chosenAlternative;
-    }
-    
-    
-    
-    void initialisePolicy(Endpoint e,
+     
+    void initialisePolicy(EndpointInfo ei,
                           BindingOperationInfo boi,  
-                          PolicyEngine engine, 
+                          PolicyEngineImpl engine, 
                           boolean requestor) {
         BindingMessageInfo bmi = requestor ? boi.getInput() : boi.getOutput();
         if (requestor) {
-            policy = engine.getEndpointPolicyInfo(e, (Conduit)null).getPolicy();
+            policy = engine.getClientEndpointPolicy(ei, (Conduit)null).getPolicy();
         } else {
-            policy = engine.getEndpointPolicyInfo(e, (Destination)null).getPolicy();
+            policy = engine.getServerEndpointPolicy(ei, (Destination)null).getPolicy();
         }
         
         policy = policy.merge(engine.getAggregatedOperationPolicy(boi));
@@ -108,15 +107,15 @@
         policy = (Policy)policy.normalize(true);
     }
     
-    void initialisePolicy(Endpoint e, BindingFaultInfo bfi, PolicyEngine engine) {
+    void initialisePolicy(EndpointInfo ei, BindingFaultInfo bfi, PolicyEngineImpl engine) {
         BindingOperationInfo boi = bfi.getBindingOperation();
-        policy = engine.getEndpointPolicyInfo(e, (Destination)null).getPolicy();         
+        policy = engine.getServerEndpointPolicy(ei, (Destination)null).getPolicy();         
         policy = policy.merge(engine.getAggregatedOperationPolicy(boi));
         policy = policy.merge(engine.getAggregatedFaultPolicy(bfi));
         policy = (Policy)policy.normalize(true);
     }
 
-    void chooseAlternative(PolicyEngine engine, Assertor assertor) {
+    void chooseAlternative(PolicyEngineImpl engine, Assertor assertor) {
         Iterator alternatives = policy.getAlternatives();
         while (alternatives.hasNext()) {
             List<Assertion> alternative = CastUtils.cast((List)alternatives.next(), Assertion.class);
@@ -129,7 +128,7 @@
 
     }
 
-    void initialiseInterceptors(PolicyEngine engine) {
+    void initialiseInterceptors(PolicyEngineImpl engine) {
         PolicyInterceptorProviderRegistry reg 
             = engine.getBus().getExtension(PolicyInterceptorProviderRegistry.class);
         List<Interceptor> out = new ArrayList<Interceptor>();
@@ -144,40 +143,6 @@
             }
         }
         setInterceptors(out);
-    }
-    
-    void checkEffectivePolicy(AssertionInfoMap aim) {
-        Iterator alternatives = policy.getAlternatives();
-        while (alternatives.hasNext()) {      
-            List<Assertion> alternative = CastUtils.cast((List)alternatives.next(), Assertion.class);
-            if (alternativeSupported(alternative, aim)) {
-                return;
-            }
-        }
-        
-        throw new PolicyException(new Message("NO_ALTERNATIVE_EXC", BUNDLE));
-    }
-    
-    boolean alternativeSupported(List<Assertion> alternative, AssertionInfoMap aim) {
-        
-        for (Assertion a : alternative) {
-            boolean asserted = false;
-            Collection<AssertionInfo> ais = aim.get(a.getName());
-            if (null != ais) {
-                for (AssertionInfo ai : ais) {
-                    // if (ai.getAssertion() == a && ai.isAsserted()) {
-                    if (ai.getAssertion().equal(a) && ai.isAsserted()) {
-                        asserted = true;
-                        break;
-                    }
-                }
-            }
-            if (!asserted) {
-                return false;
-            }
-        }
-        
-        return true;
     }
     
     // for tests

Copied: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyImpl.java (from r523191, incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyInfo.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyImpl.java?view=diff&rev=523385&p1=incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyInfo.java&r1=523191&p2=incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyImpl.java&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyInfo.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EndpointPolicyImpl.java Wed Mar 28 09:08:23 2007
@@ -42,24 +42,17 @@
 /**
  * 
  */
-public class EndpointPolicyInfo {
+public class EndpointPolicyImpl implements EndpointPolicy {
     
-    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(EndpointPolicyInfo.class);
+    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(EndpointPolicyImpl.class);
     
     private Policy policy;
     private Collection<Assertion> chosenAlternative;
     private Collection<Assertion> vocabulary;
     private Collection<Assertion> faultVocabulary;
-    private List<Interceptor> inInterceptors;
-    private List<Interceptor> inFaultInterceptors;
+    private List<Interceptor> interceptors;
+    private List<Interceptor> faultInterceptors;
     
-    void initialise(EndpointInfo ei, boolean isServer, PolicyEngine engine, Assertor assertor) {
-        initialisePolicy(ei, engine);
-        chooseAlternative(engine, assertor);
-        initialiseVocabulary(ei, isServer, engine);
-        initialiseInterceptors(ei, isServer, engine); 
-    }
-   
     public Policy getPolicy() {
         return policy;        
     }
@@ -76,21 +69,29 @@
         return faultVocabulary;
     }    
     
-    public List<Interceptor> getInInterceptors() {
-        return inInterceptors;
+    public List<Interceptor> getInterceptors() {
+        return interceptors;
+    }
+    
+    public List<Interceptor> getFaultInterceptors() {
+        return faultInterceptors;
     }
     
-    public List<Interceptor> getInFaultInterceptors() {
-        return inFaultInterceptors;
+    
+    void initialise(EndpointInfo ei, boolean isServer, PolicyEngineImpl engine, Assertor assertor) {
+        initialisePolicy(ei, engine);
+        chooseAlternative(engine, assertor);
+        initialiseVocabulary(ei, isServer, engine);
+        initialiseInterceptors(ei, isServer, engine); 
     }
-      
-    void initialisePolicy(EndpointInfo ei, PolicyEngine engine) {
+   
+    void initialisePolicy(EndpointInfo ei, PolicyEngineImpl engine) {
         policy = engine.getAggregatedServicePolicy(ei.getService());
         policy = policy.merge(engine.getAggregatedEndpointPolicy(ei));
         policy = (Policy)policy.normalize(true);
     }
 
-    void chooseAlternative(PolicyEngine engine, Assertor assertor) {
+    void chooseAlternative(PolicyEngineImpl engine, Assertor assertor) {
         Iterator alternatives = policy.getAlternatives();
         while (alternatives.hasNext()) {
             List<Assertion> alternative = CastUtils.cast((List)alternatives.next(), Assertion.class);
@@ -102,7 +103,7 @@
         throw new PolicyException(new Message("NO_ALTERNATIVE_EXC", BUNDLE));
     }
     
-    void initialiseVocabulary(EndpointInfo ei, boolean requestor, PolicyEngine engine) {
+    void initialiseVocabulary(EndpointInfo ei, boolean requestor, PolicyEngineImpl engine) {
         vocabulary = new ArrayList<Assertion>();
         if (requestor) {
             faultVocabulary = new ArrayList<Assertion>();
@@ -146,12 +147,12 @@
         }
     }
 
-    void initialiseInterceptors(EndpointInfo ei, boolean requestor, PolicyEngine engine) {
+    void initialiseInterceptors(EndpointInfo ei, boolean requestor, PolicyEngineImpl engine) {
         PolicyInterceptorProviderRegistry reg 
             = engine.getBus().getExtension(PolicyInterceptorProviderRegistry.class);
-        inInterceptors = new ArrayList<Interceptor>();
+        interceptors = new ArrayList<Interceptor>();
         if (requestor) {
-            inFaultInterceptors = new ArrayList<Interceptor>();
+            faultInterceptors = new ArrayList<Interceptor>();
         }
         
         Set<QName> v = new HashSet<QName>();
@@ -162,7 +163,7 @@
         for (QName qn : v) {
             PolicyInterceptorProvider pp = reg.get(qn);
             if (null != pp) {
-                inInterceptors.addAll(pp.getInInterceptors());
+                interceptors.addAll(pp.getInInterceptors());
             }
         }
         
@@ -178,7 +179,7 @@
         for (QName qn : faultV) {
             PolicyInterceptorProvider pp = reg.get(qn);
             if (null != pp) {
-                inFaultInterceptors.addAll(pp.getInFaultInterceptors());
+                faultInterceptors.addAll(pp.getInFaultInterceptors());
             }
         }        
     }
@@ -201,12 +202,12 @@
         faultVocabulary = v;
     }
     
-    void setInInterceptors(List<Interceptor> in) {
-        inInterceptors = in;
+    void setInterceptors(List<Interceptor> in) {
+        interceptors = in;
     }
     
-    void setInFaultInterceptors(List<Interceptor> inFault) {
-        inFaultInterceptors = inFault;
+    void setFaultInterceptors(List<Interceptor> inFault) {
+        faultInterceptors = inFault;
     }
     
     

Copied: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java (from r523191, incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java?view=diff&rev=523385&p1=incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java&r1=523191&p2=incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java Wed Mar 28 09:08:23 2007
@@ -31,7 +31,6 @@
 import javax.xml.namespace.QName;
 
 import org.apache.cxf.Bus;
-import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.extension.BusExtension;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.service.model.BindingFaultInfo;
@@ -52,60 +51,32 @@
 /**
  * 
  */
-public class PolicyEngine implements BusExtension {
-     
+public class PolicyEngineImpl implements PolicyEngine, BusExtension {
+    
     private Bus bus;
     private PolicyRegistry registry;
     private Collection<PolicyProvider> policyProviders;
     private boolean registerInterceptors;
 
-    private Map<BindingOperation, OutPolicyInfo> clientRequestInfo;
+    private Map<BindingOperation, EffectivePolicy> clientRequestInfo;
     
-    private Map<BindingOperation, OutPolicyInfo> clientResponseInfo;
+    private Map<BindingOperation, EffectivePolicy> clientResponseInfo;
     
-    private Map<BindingFault, OutPolicyInfo> clientFaultInfo;
+    private Map<BindingFault, EffectivePolicy> clientFaultInfo;
     
-    private Map<Endpoint, EndpointPolicyInfo> endpointInfo;
+    private Map<BindingOperation, EffectivePolicy> serverRequestInfo;
     
-    private Map<BindingOperation, OutPolicyInfo> serverRequestInfo;
+    private Map<BindingOperation, EffectivePolicy> serverResponseInfo;
     
-    private Map<BindingOperation, OutPolicyInfo> serverResponseInfo;
+    private Map<BindingFault, EffectivePolicy> serverFaultInfo;
     
-    private Map<BindingFault, OutPolicyInfo> serverFaultInfo;
+    private Map<EndpointInfo, EndpointPolicy> endpointInfo;
 
-    public PolicyEngine() {        
+    public PolicyEngineImpl() { 
         init();
     }
     
-    protected final void init() {
-        
-        registry = new PolicyRegistryImpl();
-        
-        clientRequestInfo 
-            = new ConcurrentHashMap<BindingOperation, OutPolicyInfo>();
-    
-        clientResponseInfo 
-            = new ConcurrentHashMap<BindingOperation, OutPolicyInfo>();
-    
-        clientFaultInfo 
-            = new ConcurrentHashMap<BindingFault, OutPolicyInfo>();
-    
-        endpointInfo 
-            = new ConcurrentHashMap<Endpoint, EndpointPolicyInfo>();
-    
-        serverRequestInfo 
-            = new ConcurrentHashMap<BindingOperation, OutPolicyInfo>();
-    
-        serverResponseInfo 
-            = new ConcurrentHashMap<BindingOperation, OutPolicyInfo>();
-    
-        serverFaultInfo 
-            = new ConcurrentHashMap<BindingFault, OutPolicyInfo>();
-    }
-    
-    public Class<?> getRegistrationType() {
-        return PolicyEngine.class;
-    }
+    // configuration
     
     public void setBus(Bus b) {
         bus = b;
@@ -139,6 +110,187 @@
         registerInterceptors = ri;
     }
     
+    // BusExtension interface
+    
+    public Class<?> getRegistrationType() {
+        return PolicyEngine.class;
+    }
+    
+    // PolicyEngine interface
+    
+    public EffectivePolicy getEffectiveClientRequestPolicy(EndpointInfo ei, BindingOperationInfo boi, 
+                                                           Conduit c) {
+        BindingOperation bo = new BindingOperation(ei, boi);
+        EffectivePolicy effectivePolicy = clientRequestInfo.get(bo);
+        if (null == effectivePolicy) {
+            EffectivePolicyImpl epi = createOutPolicyInfo();
+            Assertor assertor = null;
+            if (c instanceof Assertor) {
+                assertor = (Assertor)c;
+            }
+            epi.initialise(ei, boi, this, assertor, true);
+            clientRequestInfo.put(bo, epi);
+            effectivePolicy = epi;
+        }
+        return effectivePolicy;
+    }
+    
+    public void setEffectiveClientRequestPolicy(EndpointInfo ei, BindingOperationInfo boi, 
+                                                EffectivePolicy ep) {
+        BindingOperation bo = new BindingOperation(ei, boi);
+        clientRequestInfo.put(bo, ep);
+    }
+    
+    public EffectivePolicy getEffectiveServerResponsePolicy(EndpointInfo ei, BindingOperationInfo boi,
+                                                            Destination d) {
+        BindingOperation bo = new BindingOperation(ei, boi);
+        EffectivePolicy effectivePolicy = serverResponseInfo.get(bo);
+        if (null == effectivePolicy) {
+            EffectivePolicyImpl epi = createOutPolicyInfo();
+            Assertor assertor = null;
+            if (d instanceof Assertor) {
+                assertor = (Assertor)d;
+            }
+            epi.initialise(ei, boi, this, assertor, false);
+            serverResponseInfo.put(bo, epi);
+            effectivePolicy = epi;
+        }
+        return effectivePolicy;
+    }
+
+    public void setEffectiveServerResponsePolicy(EndpointInfo ei, BindingOperationInfo boi, 
+                                                 EffectivePolicy ep) {
+        BindingOperation bo = new BindingOperation(ei, boi);
+        serverResponseInfo.put(bo, ep);
+    }
+      
+    public EffectivePolicy getEffectiveServerFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi, 
+                                                         Destination d) {
+        BindingFault bf = new BindingFault(ei, bfi);
+        EffectivePolicy effectivePolicy = serverFaultInfo.get(bf);
+        if (null == effectivePolicy) {
+            EffectivePolicyImpl epi = createOutPolicyInfo();
+            Assertor assertor = null;
+            if (d instanceof Assertor) {
+                assertor = (Assertor)d;
+            }
+            epi.initialise(ei, bfi, this, assertor);
+            serverFaultInfo.put(bf, epi);
+            effectivePolicy = epi;
+        }
+        return effectivePolicy;
+    }
+
+    public void setEffectiveServerFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi, EffectivePolicy ep) {
+        BindingFault bf = new BindingFault(ei, bfi);
+        serverFaultInfo.put(bf, ep);
+    }
+    
+    public EndpointPolicy getClientEndpointPolicy(EndpointInfo ei, Conduit conduit) {
+        EndpointPolicy endpointPolicy = endpointInfo.get(ei);
+        if (null != endpointPolicy) {
+            return endpointPolicy;
+        }
+        Assertor assertor = conduit instanceof Assertor ? (Assertor)conduit : null;
+        return createEndpointPolicyInfo(ei, false, assertor);
+    }
+   
+    public EndpointPolicy getServerEndpointPolicy(EndpointInfo ei, Destination destination) {
+        EndpointPolicy endpointPolicy = endpointInfo.get(ei);
+        if (null != endpointPolicy) {
+            return endpointPolicy;
+        }
+        Assertor assertor = destination instanceof Assertor ? (Assertor)destination : null;
+        return createEndpointPolicyInfo(ei, true, assertor);
+    }
+    
+    public void setEndpointPolicy(EndpointInfo ei, EndpointPolicy ep) {
+        endpointInfo.put(ei, ep);
+    }
+    
+    public EffectivePolicy getEffectiveServerRequestPolicy(EndpointInfo ei, BindingOperationInfo boi) {
+        BindingOperation bo = new BindingOperation(ei, boi);
+        EffectivePolicy effectivePolicy = serverRequestInfo.get(bo);
+        if (null == effectivePolicy) {
+            EffectivePolicyImpl epi = createOutPolicyInfo();
+            epi.initialisePolicy(ei, boi, this, false);
+            serverRequestInfo.put(bo, epi);
+            effectivePolicy = epi;
+        }
+        return effectivePolicy;
+    }
+    
+    public void setEffectiveServerRequestPolicy(EndpointInfo ei, BindingOperationInfo boi, 
+                                                EffectivePolicy ep) {
+        BindingOperation bo = new BindingOperation(ei, boi);
+        serverRequestInfo.put(bo, ep);
+    }
+    
+    public EffectivePolicy getEffectiveClientResponsePolicy(EndpointInfo ei, BindingOperationInfo boi) {
+        BindingOperation bo = new BindingOperation(ei, boi);
+        EffectivePolicy effectivePolicy = clientResponseInfo.get(bo);
+        if (null == effectivePolicy) {
+            EffectivePolicyImpl epi = createOutPolicyInfo();
+            epi.initialisePolicy(ei, boi, this, true);            
+            clientResponseInfo.put(bo, epi);
+            effectivePolicy = epi;
+        }
+        return effectivePolicy;
+    }
+    
+    public void setEffectiveClientResponsePolicy(EndpointInfo ei, BindingOperationInfo boi, 
+                                                 EffectivePolicy ep) {
+        BindingOperation bo = new BindingOperation(ei, boi);
+        clientResponseInfo.put(bo, ep);
+    }
+    
+    public EffectivePolicy getEffectiveClientFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi) {
+        BindingFault bf = new BindingFault(ei, bfi);
+        EffectivePolicy effectivePolicy = clientFaultInfo.get(bf);
+        if (null == effectivePolicy) {
+            EffectivePolicyImpl epi = createOutPolicyInfo();
+            epi.initialisePolicy(ei, bfi, this);
+            clientFaultInfo.put(bf, epi);
+            effectivePolicy = epi;
+        }
+        return effectivePolicy;
+    }
+    
+    public void setEffectiveClientFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi, EffectivePolicy ep) {
+        BindingFault bf = new BindingFault(ei, bfi);
+        clientFaultInfo.put(bf, ep);
+    }    
+    
+    // implementation
+    
+    protected final void init() {
+        
+        registry = new PolicyRegistryImpl();
+        
+        clientRequestInfo 
+            = new ConcurrentHashMap<BindingOperation, EffectivePolicy>();
+    
+        clientResponseInfo 
+            = new ConcurrentHashMap<BindingOperation, EffectivePolicy>();
+    
+        clientFaultInfo 
+            = new ConcurrentHashMap<BindingFault, EffectivePolicy>();
+    
+        endpointInfo 
+            = new ConcurrentHashMap<EndpointInfo, EndpointPolicy>();
+    
+        serverRequestInfo 
+            = new ConcurrentHashMap<BindingOperation, EffectivePolicy>();
+    
+        serverResponseInfo 
+            = new ConcurrentHashMap<BindingOperation, EffectivePolicy>();
+    
+        serverFaultInfo 
+            = new ConcurrentHashMap<BindingFault, EffectivePolicy>();
+    }
+    
+    
+    
     @PostConstruct
     public void addBusInterceptors() {
         if (null == bus || !registerInterceptors) {
@@ -176,7 +328,7 @@
         bus.getInFaultInterceptors().add(verifyInFault);
     }  
     
-    public Policy getAggregatedServicePolicy(ServiceInfo si) {
+    Policy getAggregatedServicePolicy(ServiceInfo si) {
         Policy aggregated = null;
         for (PolicyProvider pp : getPolicyProviders()) {
             Policy p = pp.getEffectivePolicy(si);
@@ -189,7 +341,7 @@
         return aggregated == null ? new Policy() : aggregated;
     }
 
-    public Policy getAggregatedEndpointPolicy(EndpointInfo ei) {
+    Policy getAggregatedEndpointPolicy(EndpointInfo ei) {
         Policy aggregated = null;
         for (PolicyProvider pp : getPolicyProviders()) {
             Policy p = pp.getEffectivePolicy(ei);
@@ -202,7 +354,7 @@
         return aggregated == null ? new Policy() : aggregated;
     }
     
-    public Policy getAggregatedOperationPolicy(BindingOperationInfo boi) {
+    Policy getAggregatedOperationPolicy(BindingOperationInfo boi) {
         Policy aggregated = null;
         for (PolicyProvider pp : getPolicyProviders()) {
             Policy p = pp.getEffectivePolicy(boi);
@@ -215,7 +367,7 @@
         return aggregated == null ? new Policy() : aggregated;
     }
     
-    public Policy getAggregatedMessagePolicy(BindingMessageInfo bmi) {
+    Policy getAggregatedMessagePolicy(BindingMessageInfo bmi) {
         Policy aggregated = null;
         for (PolicyProvider pp : getPolicyProviders()) {
             Policy p = pp.getEffectivePolicy(bmi);
@@ -228,7 +380,7 @@
         return aggregated == null ? new Policy() : aggregated;
     }
     
-    public Policy getAggregatedFaultPolicy(BindingFaultInfo bfi) {
+    Policy getAggregatedFaultPolicy(BindingFaultInfo bfi) {
         Policy aggregated = null;
         for (PolicyProvider pp : getPolicyProviders()) {
             Policy p = pp.getEffectivePolicy(bfi);
@@ -249,7 +401,7 @@
      * @param includeOptional flag indicating if optional assertions should be included
      * @return the assertions
      */
-    public Collection<Assertion> getAssertions(PolicyComponent pc, boolean includeOptional) {
+    Collection<Assertion> getAssertions(PolicyComponent pc, boolean includeOptional) {
         
         Collection<Assertion> assertions = new ArrayList<Assertion>();
         
@@ -295,7 +447,7 @@
      * @param includeOptional flag indicating if optional assertions should be included
      * @return the vocabulary
      */
-    public Set<QName> getVocabulary(PolicyComponent pc, boolean includeOptional) {
+    Set<QName> getVocabulary(PolicyComponent pc, boolean includeOptional) {
         Collection<Assertion> assertions = getAssertions(pc, includeOptional);
         Set<QName> vocabulary = new HashSet<QName>();
         for (Assertion a : assertions) {
@@ -303,147 +455,20 @@
         }
         return vocabulary;
     }
-    
-    public OutPolicyInfo getClientRequestPolicyInfo(Endpoint e, BindingOperationInfo boi, Conduit c) {
-        BindingOperation bo = new BindingOperation(e, boi);
-        OutPolicyInfo opi = clientRequestInfo.get(bo);
-        if (null == opi) {
-            opi = createOutPolicyInfo();
-            Assertor assertor = null;
-            if (c instanceof Assertor) {
-                assertor = (Assertor)c;
-            }
-            opi.initialise(e, boi, this, assertor, true);
-            clientRequestInfo.put(bo, opi);
-        }
-        return opi;
-    }
-    
-    public void setClientRequestPolicyInfo(Endpoint e, BindingOperationInfo boi, OutPolicyInfo opi) {
-        BindingOperation bo = new BindingOperation(e, boi);
-        clientRequestInfo.put(bo, opi);
-    }
-    
-    public OutPolicyInfo getServerRequestPolicyInfo(Endpoint e, BindingOperationInfo boi) {
-        BindingOperation bo = new BindingOperation(e, boi);
-        OutPolicyInfo opi = serverRequestInfo.get(bo);
-        if (null == opi) {
-            opi = createOutPolicyInfo();
-            opi.initialisePolicy(e, boi, this, false);
-            serverRequestInfo.put(bo, opi);
-        }
-        return opi;
-    }
-    
-    public void setServerRequestPolicyInfo(Endpoint e, BindingOperationInfo boi, OutPolicyInfo opi) {
-        BindingOperation bo = new BindingOperation(e, boi);
-        serverRequestInfo.put(bo, opi);
-    }
-    
-    public OutPolicyInfo getClientResponsePolicyInfo(Endpoint e, BindingOperationInfo boi) {
-        BindingOperation bo = new BindingOperation(e, boi);
-        OutPolicyInfo opi = clientResponseInfo.get(bo);
-        if (null == opi) {
-            opi = createOutPolicyInfo();
-            opi.initialisePolicy(e, boi, this, true);
-            clientResponseInfo.put(bo, opi);
-        }
-        return opi;
-    }
-    
-    public void setClientResponsePolicyInfo(Endpoint e, BindingOperationInfo boi, OutPolicyInfo opi) {
-        BindingOperation bo = new BindingOperation(e, boi);
-        clientResponseInfo.put(bo, opi);
-    }
-    
-    public OutPolicyInfo getClientFaultPolicyInfo(Endpoint e, BindingFaultInfo bfi) {
-        BindingFault bf = new BindingFault(e, bfi);
-        OutPolicyInfo opi = clientFaultInfo.get(bf);
-        if (null == opi) {
-            opi = createOutPolicyInfo();
-            opi.initialisePolicy(e, bfi, this);
-            clientFaultInfo.put(bf, opi);
-        }
-        return opi;
-    }
-    
-    public void setClientFaultPolicyInfo(Endpoint e, BindingFaultInfo bfi, OutPolicyInfo opi) {
-        BindingFault bf = new BindingFault(e, bfi);
-        clientFaultInfo.put(bf, opi);
-    }
-    
-    public EndpointPolicyInfo getEndpointPolicyInfo(Endpoint e, Conduit conduit) {
-        EndpointPolicyInfo epi = endpointInfo.get(e);
-        if (null != epi) {
-            return epi;
-        }
-        Assertor assertor = conduit instanceof Assertor ? (Assertor)conduit : null;
-        return createEndpointPolicyInfo(e, false, assertor);
-    }
+      
    
-    public EndpointPolicyInfo getEndpointPolicyInfo(Endpoint e, Destination destination) {
-        EndpointPolicyInfo epi = endpointInfo.get(e);
-        if (null != epi) {
-            return epi;
-        }
-        Assertor assertor = destination instanceof Assertor ? (Assertor)destination : null;
-        return createEndpointPolicyInfo(e, true, assertor);
-    }
     
-    EndpointPolicyInfo createEndpointPolicyInfo(Endpoint e, boolean isServer, Assertor assertor) {
-        EndpointPolicyInfo epi = createEndpointPolicyInfo();
-        epi.initialise(e.getEndpointInfo(), isServer, this, assertor);
-        endpointInfo.put(e, epi);
+    
+    EndpointPolicyImpl createEndpointPolicyInfo(EndpointInfo ei, boolean isServer, Assertor assertor) {
+        EndpointPolicyImpl epi = createEndpointPolicyInfo();
+        epi.initialise(ei, isServer, this, assertor);
+        endpointInfo.put(ei, epi);
 
         return epi;
     }
     
-    public void setEndpointPolicyInfo(Endpoint e, EndpointPolicyInfo epi) {
-        endpointInfo.put(e, epi);
-    }
-    
-    
-    public OutPolicyInfo getServerResponsePolicyInfo(Endpoint e, BindingOperationInfo boi, 
-                                                         Destination d) {
-        BindingOperation bo = new BindingOperation(e, boi);
-        OutPolicyInfo opi = serverResponseInfo.get(bo);
-        if (null == opi) {
-            opi = createOutPolicyInfo();
-            Assertor assertor = null;
-            if (d instanceof Assertor) {
-                assertor = (Assertor)d;
-            }
-            opi.initialise(e, boi, this, assertor, false);
-            serverResponseInfo.put(bo, opi);
-        }
-        return opi;
-    }
-    
-    public void setServerResponsePolicyInfo(Endpoint e, BindingOperationInfo boi, OutPolicyInfo opi) {
-        BindingOperation bo = new BindingOperation(e, boi);
-        serverResponseInfo.put(bo, opi);
-    }
     
-    public OutPolicyInfo getServerFaultPolicyInfo(Endpoint e, BindingFaultInfo bfi, 
-                                                         Destination d) {
-        BindingFault bf = new BindingFault(e, bfi);
-        OutPolicyInfo opi = serverFaultInfo.get(bf);
-        if (null == opi) {
-            opi = createOutPolicyInfo();
-            Assertor assertor = null;
-            if (d instanceof Assertor) {
-                assertor = (Assertor)d;
-            }
-            opi.initialise(e, bfi, this, assertor);
-            serverFaultInfo.put(bf, opi);
-        }
-        return opi;
-    }
     
-    public void setServerFaultPolicyInfo(Endpoint e, BindingFaultInfo bfi, OutPolicyInfo opi) {
-        BindingFault bf = new BindingFault(e, bfi);
-        serverFaultInfo.put(bf, opi);
-    }
     
 
     /**
@@ -472,11 +497,11 @@
      * Class used as key in the client request policy and server response policy maps.
      */
     class BindingOperation {
-        Endpoint endpoint;
+        EndpointInfo ei;
         BindingOperationInfo boi;
         
-        BindingOperation(Endpoint e, BindingOperationInfo b) {
-            endpoint = e;
+        BindingOperation(EndpointInfo e, BindingOperationInfo b) {
+            ei = e;
             boi = b;
         }
 
@@ -488,9 +513,13 @@
         @Override
         public boolean equals(Object obj) {
             BindingOperation other = (BindingOperation)obj;
-            return boi.equals(other.boi) && endpoint.equals(other.endpoint);
+            return boi.equals(other.boi) && ei.equals(other.ei);
         }
         
+        @Override
+        public String toString() {
+            return ei.getName().toString() + "." + boi.getName().toString();
+        }
         
         
     }
@@ -499,11 +528,11 @@
      * Class used as key in the server fault policy map.
      */
     class BindingFault {
-        Endpoint endpoint;
+        EndpointInfo ei;
         BindingFaultInfo bfi;
         
-        BindingFault(Endpoint e, BindingFaultInfo b) {
-            endpoint = e;
+        BindingFault(EndpointInfo e, BindingFaultInfo b) {
+            ei = e;
             bfi = b;
         }
         
@@ -515,19 +544,22 @@
         @Override
         public boolean equals(Object obj) {
             BindingFault other = (BindingFault)obj;
-            return bfi.equals(other.bfi) && endpoint.equals(other.endpoint);
+            return bfi.equals(other.bfi) && ei.equals(other.ei);
+        }
+        
+        @Override
+        public String toString() {
+            return ei.getName().toString() + "." + bfi.getFaultInfo().toString();
         }
     }
     
     // for test
     
-    OutPolicyInfo createOutPolicyInfo() {
-        return new OutPolicyInfo();
+    EffectivePolicyImpl createOutPolicyInfo() {
+        return new EffectivePolicyImpl();
     }
     
-    EndpointPolicyInfo createEndpointPolicyInfo() {
-        return new EndpointPolicyInfo();
+    EndpointPolicyImpl createEndpointPolicyInfo() {
+        return new EndpointPolicyImpl();
     }
-
-
 }

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistryImpl.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistryImpl.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistryImpl.java Wed Mar 28 09:08:23 2007
@@ -19,12 +19,17 @@
 
 package org.apache.cxf.ws.policy;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 
 import javax.xml.namespace.QName;
 
 import org.apache.cxf.extension.BusExtension;
 import org.apache.cxf.extension.RegistryImpl;
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.neethi.Assertion;
 
 /**
  * 
@@ -43,5 +48,22 @@
 
     public Class<?> getRegistrationType() {
         return PolicyInterceptorProviderRegistry.class;
+    }
+    
+    public List<Interceptor> getInterceptors(Collection<Assertion> alternative, boolean out, boolean fault) {
+        List<Interceptor> interceptors = new ArrayList<Interceptor>();
+        for (Assertion a : alternative) {
+            if (a.isOptional()) {
+                continue;
+            }
+            QName qn = a.getName();
+            PolicyInterceptorProvider pp = get(qn);
+            if (null != pp) {
+                interceptors.addAll(out                
+                    ? (fault ? pp.getOutFaultInterceptors() : pp.getOutInterceptors())       
+                    : (fault ? pp.getInFaultInterceptors() : pp.getInInterceptors())); 
+            }
+        }
+        return interceptors;
     }
 }

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyVerificationInFaultInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyVerificationInFaultInterceptor.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyVerificationInFaultInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyVerificationInFaultInterceptor.java Wed Mar 28 09:08:23 2007
@@ -28,6 +28,7 @@
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.model.BindingFaultInfo;
+import org.apache.cxf.service.model.EndpointInfo;
 
 /**
  * 
@@ -66,7 +67,8 @@
         if (null == e) {
             LOG.fine("No endpoint.");
             return;
-        }        
+        }
+        EndpointInfo ei = e.getEndpointInfo();
         
         PolicyEngine pe = bus.getExtension(PolicyEngine.class);
         if (null == pe) {
@@ -78,8 +80,8 @@
             return;
         }
         
-        OutPolicyInfo opi = pe.getClientFaultPolicyInfo(e, bfi);
-        opi.checkEffectivePolicy(aim);
+        EffectivePolicy effectivePolicy = pe.getEffectiveClientFaultPolicy(ei, bfi);
+        aim.checkEffectivePolicy(effectivePolicy.getPolicy());
         LOG.fine("Verified policies for inbound message.");
     }
 

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyVerificationInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyVerificationInInterceptor.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyVerificationInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyVerificationInInterceptor.java Wed Mar 28 09:08:23 2007
@@ -28,6 +28,7 @@
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.EndpointInfo;
 
 /**
  * 
@@ -60,7 +61,8 @@
         if (null == e) {
             LOG.fine("No endpoint.");
             return;
-        }        
+        } 
+        EndpointInfo ei = e.getEndpointInfo();
         
         PolicyEngine pe = bus.getExtension(PolicyEngine.class);
         if (null == pe) {
@@ -77,14 +79,14 @@
             return;
         }
         
-        OutPolicyInfo opi = null;
+        EffectivePolicy effectivePolicy = null;
         if (PolicyUtils.isRequestor(message)) {
-            opi = pe.getClientResponsePolicyInfo(e, boi);
+            effectivePolicy = pe.getEffectiveClientResponsePolicy(ei, boi);
         } else {
-            opi = pe.getServerRequestPolicyInfo(e, boi);
+            effectivePolicy = pe.getEffectiveServerRequestPolicy(ei, boi);
         }
                 
-        opi.checkEffectivePolicy(aim);
+        aim.checkEffectivePolicy(effectivePolicy.getPolicy());
         LOG.fine("Verified policies for inbound message.");
     }
 

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyInInterceptor.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyInInterceptor.java Wed Mar 28 09:08:23 2007
@@ -30,6 +30,7 @@
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
+import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.Destination;
 import org.apache.neethi.Assertion;
 
@@ -58,7 +59,8 @@
         if (null == e) {
             LOG.fine("No endpoint.");
             return;
-        }        
+        }
+        EndpointInfo ei = e.getEndpointInfo();
         
         PolicyEngine pe = bus.getExtension(PolicyEngine.class);
         if (null == pe) {
@@ -68,19 +70,19 @@
         Destination destination = msg.getDestination();
         
         // We do not know the underlying message type yet - so we pre-emptively add interceptors 
-        // that can deal with any requests on the underlying endpoint
+        // that can deal with any messages to this endpoint
         
-        EndpointPolicyInfo epi = pe.getEndpointPolicyInfo(e, destination);
+        EndpointPolicy ep = pe.getServerEndpointPolicy(ei, destination);
         
-        List<Interceptor> policyInInterceptors = epi.getInInterceptors();
-        for (Interceptor poi : policyInInterceptors) {
-            msg.getInterceptorChain().add(poi);
-            LOG.log(Level.INFO, "Added interceptor of type {0}", poi.getClass().getSimpleName());
+        List<Interceptor> interceptors = ep.getInterceptors();
+        for (Interceptor i : interceptors) {
+            msg.getInterceptorChain().add(i);
+            LOG.log(Level.INFO, "Added interceptor of type {0}", i.getClass().getSimpleName());
         }
         
         // insert assertions of endpoint's vocabulary into message
         
-        Collection<Assertion> assertions = epi.getVocabulary();
+        Collection<Assertion> assertions = ep.getVocabulary();
         if (null != assertions) {
             msg.put(AssertionInfoMap.class, new AssertionInfoMap(assertions));
         }

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutFaultInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutFaultInterceptor.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutFaultInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutFaultInterceptor.java Wed Mar 28 09:08:23 2007
@@ -32,6 +32,7 @@
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.model.BindingFaultInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.Destination;
 import org.apache.neethi.Assertion;
 
@@ -67,6 +68,7 @@
             LOG.fine("No endpoint.");
             return;
         }
+        EndpointInfo ei = e.getEndpointInfo();
         
         PolicyEngine pe = bus.getExtension(PolicyEngine.class);
         if (null == pe) {
@@ -84,17 +86,17 @@
             return;
         }  
         
-        OutPolicyInfo opi = pe.getServerFaultPolicyInfo(e, bfi, destination);
+        EffectivePolicy effectivePolicy = pe.getEffectiveServerFaultPolicy(ei, bfi, destination);
         
-        List<Interceptor> outInterceptors = opi.getInterceptors();
-        for (Interceptor oi : outInterceptors) {
+        List<Interceptor> interceptors = effectivePolicy.getInterceptors();
+        for (Interceptor oi : interceptors) {
             msg.getInterceptorChain().add(oi);
             LOG.log(Level.INFO, "Added interceptor of type {0}", oi.getClass().getSimpleName());
         }
         
         // insert assertions of the chosen alternative into the message
         
-        Collection<Assertion> assertions = opi.getChosenAlternative();
+        Collection<Assertion> assertions = effectivePolicy.getChosenAlternative();
         if (null != assertions) {
             msg.put(AssertionInfoMap.class, new AssertionInfoMap(assertions));
         }

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutInterceptor.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutInterceptor.java Wed Mar 28 09:08:23 2007
@@ -31,6 +31,7 @@
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.Destination;
 import org.apache.neethi.Assertion;
 
@@ -66,6 +67,7 @@
             LOG.fine("No endpoint.");
             return;
         }
+        EndpointInfo ei = e.getEndpointInfo();
         
         PolicyEngine pe = bus.getExtension(PolicyEngine.class);
         if (null == pe) {
@@ -73,17 +75,17 @@
         }
         
         Destination destination = msg.getDestination();
-        OutPolicyInfo opi = pe.getServerResponsePolicyInfo(e, boi, destination);
+        EffectivePolicy effectivePolicy = pe.getEffectiveServerResponsePolicy(ei, boi, destination);
         
-        List<Interceptor> outInterceptors = opi.getInterceptors();
-        for (Interceptor oi : outInterceptors) {
+        List<Interceptor> interceptors = effectivePolicy.getInterceptors();
+        for (Interceptor oi : interceptors) {
             msg.getInterceptorChain().add(oi);
             LOG.log(Level.INFO, "Added interceptor of type {0}", oi.getClass().getSimpleName());           
         }
         
         // insert assertions of the chosen alternative into the message
              
-        Collection<Assertion> assertions = opi.getChosenAlternative();
+        Collection<Assertion> assertions = effectivePolicy.getChosenAlternative();
         if (null != assertions) {
             msg.put(AssertionInfoMap.class, new AssertionInfoMap(assertions));
         }

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/spring/InitializingPolicyEngine.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/spring/InitializingPolicyEngine.java?view=diff&rev=523385&r1=523384&r2=523385
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/spring/InitializingPolicyEngine.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/spring/InitializingPolicyEngine.java Wed Mar 28 09:08:23 2007
@@ -22,14 +22,14 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.cxf.ws.policy.PolicyEngine;
+import org.apache.cxf.ws.policy.PolicyEngineImpl;
 import org.apache.cxf.ws.policy.PolicyProvider;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 
-public class InitializingPolicyEngine extends PolicyEngine implements InitializingBean, 
+public class InitializingPolicyEngine extends PolicyEngineImpl implements InitializingBean, 
     ApplicationContextAware  {
 
     private ApplicationContext context;