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/02/21 13:02:08 UTC

svn commit: r509980 [1/3] - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/ws/policy/ api/src/main/java/org/apache/cxf/ws/policy/builder/ api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/ api/src/main/java/org/apache/cxf/ws/policy/bui...

Author: andreasmyth
Date: Wed Feb 21 04:02:05 2007
New Revision: 509980

URL: http://svn.apache.org/viewvc?view=rev&rev=509980
Log:
[JIRA CXF-376] Enabled resolution of external policy references.
[JIRA CXF-378] Support for external attachments - framework, APIs and basic EPR based implementation of DomainExpression.
Changed some package names to use singular.
Added policy interceptor provider for WS-Addressing, removed addressing interceptors from RM policy interceptor provider.

Added:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderImpl.java   (with props)
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/
      - copied from r507849, incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builders/
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/
      - copied from r509965, incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builders/jaxb/
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/
      - copied from r509965, incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builders/primitive/
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/xml/
      - copied from r509965, incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builders/xml/
    incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/
      - copied from r507849, incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builders/
    incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/jaxb/
      - copied from r509965, incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builders/jaxb/
    incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/primitive/
      - copied from r509965, incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builders/primitive/
    incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingPolicyInterceptorProvider.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/AbstractPolicyProvider.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/Messages.properties   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpression.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilder.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilderRegistry.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpression.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionBuilder.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/Messages.properties   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/PolicyAttachment.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/Wsdl11XPointerDomainExpression.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/reference/
      - copied from r507867, incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/references/
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/reference/LocalDocumentReferenceResolver.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/reference/LocalServiceModelReferenceResolver.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/reference/ReferenceResolver.java
      - copied, changed from r509965, incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/references/ReferenceResolver.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/reference/RemoteReferenceResolver.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/spring/
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/spring/InitializingPolicyEngine.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/external/
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilderRegistryTest.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionTest.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/external/ExternalAttachmentProviderTest.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/external/PolicyAttachmentTest.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/external/resources/
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/external/resources/attachments1.xml   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/external/resources/attachments2.xml   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/external/resources/attachments3.xml   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/external/resources/attachments4.xml   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/reference/
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/reference/ReferenceResolverTest.java   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/reference/referred.wsdl   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/reference/referring.wsdl   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/builder/
      - copied from r507849, incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/builders/
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/builder/primitive/
      - copied from r509965, incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/builders/primitive/
    incubator/cxf/trunk/rt/ws/policy/src/test/resources/attachment/wsdl11/test17-ext.wsdl   (with props)
    incubator/cxf/trunk/rt/ws/policy/src/test/resources/attachment/wsdl11/test17.wsdl   (with props)
Removed:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builders/
    incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builders/
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/references/
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/Messages.properties
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/builders/
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/RMPolicyInterceptorProvider.java
Modified:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyConstants.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertion.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertion.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertionBuilder.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertion.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertionBuilder.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/xml/XMLPrimitiveAssertionBuilder.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/xml/XmlPrimitiveAssertion.java
    incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilderTest.java
    incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionTest.java
    incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertionBuilderTest.java
    incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingAssertionBuilder.java
    incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/MetadataConstants.java
    incubator/cxf/trunk/rt/ws/addr/src/main/resources/META-INF/cxf/cxf-extension-addr.xml
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/Messages.properties
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngine.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyUtils.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/ExternalAttachmentProvider.java
    incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProvider.java
    incubator/cxf/trunk/rt/ws/policy/src/main/resources/META-INF/cxf/cxf-extension-policy.xml
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/NormalizeTest.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyBuilderTest.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/PolicyTest.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProviderTest.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertionTest.java
    incubator/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/policy-bus.xml
    incubator/cxf/trunk/rt/ws/policy/src/test/resources/attachment/wsdl11/test16.wsdl
    incubator/cxf/trunk/rt/ws/rm/src/main/resources/META-INF/cxf/cxf-extension-rm.xml

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyConstants.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyConstants.java?view=diff&rev=509980&r1=509979&r2=509980
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyConstants.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyConstants.java Wed Feb 21 04:02:05 2007
@@ -26,23 +26,11 @@
  */
 public final class PolicyConstants {
     
-    public static final String NAMESPACE_URI = 
-        "http://schemas.xmlsoap.org/ws/2004/09/policy";
+    public static final String NAMESPACE_XMLSOAP_200409
+        = "http://schemas.xmlsoap.org/ws/2004/09/policy";
     
-    public static final String POLICY_ELEM_NAME = "Policy";
-    
-    public static final String POLICYREF_ELEM_NAME = "PolicyReference";
-    
-    public static final String OPTIONAL_ATTR_NAME = "Optional"; 
-    
-    public static final QName POLICY_ELEM_QNAME = 
-        new QName(NAMESPACE_URI, POLICY_ELEM_NAME);
-    
-    public static final QName POLICYREF_ELEM_QNAME = 
-        new QName(NAMESPACE_URI, POLICYREF_ELEM_NAME);
-    
-    public static final QName OPTIONAL_ATTR_QNAME = 
-        new QName(NAMESPACE_URI, OPTIONAL_ATTR_NAME);
+    public static final String NAMESPACE_W3_200607
+        = "http://www.w3.org/2006/07/ws-policy";
     
     public static final String CLIENT_POLICY_OUT_INTERCEPTOR_ID
         = "org.apache.cxf.ws.policy.ClientPolicyOutInterceptor";
@@ -50,7 +38,7 @@
         = "org.apache.cxf.ws.policy.ClientPolicyInInterceptor";
     public static final String CLIENT_POLICY_IN_FAULT_INTERCEPTOR_ID
         = "org.apache.cxf.ws.policy.ClientPolicyInFaultInterceptor";
-    
+
     public static final String SERVER_POLICY_IN_INTERCEPTOR_ID
         = "org.apache.cxf.ws.policy.ServerPolicyInInterceptor";
     public static final String SERVER_POLICY_OUT_INTERCEPTOR_ID
@@ -58,6 +46,49 @@
     public static final String SERVER_POLICY_OUT_FAULT_INTERCEPTOR_ID
         = "org.apache.cxf.ws.policy.ServerPolicyOutFaultInterceptor";
     
+    
+    private static String namespaceURI; 
+    
+    private static final String POLICY_ELEM_NAME = "Policy";
+    
+    private static final String ALL_ELEM_NAME = "All";
+    
+    private static final String EXACTLYONE_ELEM_NAME = "ExactlyOne";
+    
+    private static final String POLICYREFERENCE_ELEM_NAME = "PolicyReference";
+    
+    private static final String POLICYATTACHMENT_ELEM_NAME = "PolicyAttachment";
+    
+    private static final String APPLIESTO_ELEM_NAME = "AppliesTo";
+    
+    private static final String OPTIONAL_ATTR_NAME = "Optional"; 
+    
+    private static QName policyElemQName;
+    
+    private static QName allElemQName;
+    
+    private static QName exactlyOneElemQName;
+    
+    private static QName policyReferenceElemQName;
+    
+    private static QName policyAttachmentElemQName;
+    
+    private static QName appliesToElemQName;
+    
+    private static QName optionalAttrQName;
+    
+    private static final String WSU_NAMESPACE_URI = 
+        "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
+    
+    private static final String WSU_ID_ATTR_NAME = "Id";
+    
+    private static final QName WSU_ID_ATTR_QNAME =
+        new QName(WSU_NAMESPACE_URI, WSU_ID_ATTR_NAME);
+    
+    static {
+        setNamespace(NAMESPACE_W3_200607);
+    }
+    
     /**
      * Prevents instantiation.
      */
@@ -65,4 +96,93 @@
     private PolicyConstants() {
     }
     
+    
+    
+    public static String getNamespace() {
+        return namespaceURI;
+    } 
+    
+    public static String getWSUNamespace() {
+        return WSU_NAMESPACE_URI;
+    }
+    
+    public static String getPolicyElemName() {
+        return POLICY_ELEM_NAME;
+    }
+    
+    public static String getAllElemName() {
+        return ALL_ELEM_NAME;
+    }
+    
+    public static String getExactlyOneElemName() {
+        return EXACTLYONE_ELEM_NAME;
+    }
+    
+    public static String getPolicyReferenceElemName() {
+        return POLICYREFERENCE_ELEM_NAME;
+    }
+    
+    public static String getPolicyAttachmentElemName() {
+        return POLICYATTACHMENT_ELEM_NAME;
+    }
+    
+    public static String getAppliesToElemName() {
+        return APPLIESTO_ELEM_NAME;
+    }
+    
+    public static String getOptionalAttrName() {
+        return OPTIONAL_ATTR_NAME;
+    }
+    
+    public static String getIdAttrName() {
+        return WSU_ID_ATTR_NAME;
+    }
+    
+    public static QName getPolicyElemQName() {
+        return policyElemQName;
+    }
+    
+    public static QName getAllElemQName() {
+        return allElemQName;
+    }
+    
+    public static QName getExactlyOneElemQName() {
+        return exactlyOneElemQName;
+    }
+    
+    public static QName getPolicyReferenceElemQName() {
+        return policyReferenceElemQName;
+    }
+    
+    public static QName getPolicyAttachmentElemQName() {
+        return policyAttachmentElemQName;
+    }
+    
+    public static QName getAppliesToElemQName() {
+        return appliesToElemQName;
+    }
+    
+    public static QName getOptionalAttrQName() {
+        return optionalAttrQName;
+    }
+    
+    public static QName getIdAttrQName() {
+        return WSU_ID_ATTR_QNAME;
+    } 
+    
+    
+    public static void setNamespace(String uri) {
+        namespaceURI = uri;
+        
+        // update qnames
+        
+        policyElemQName = new QName(namespaceURI, POLICY_ELEM_NAME);
+        allElemQName = new QName(namespaceURI, ALL_ELEM_NAME);
+        exactlyOneElemQName = new QName(namespaceURI, EXACTLYONE_ELEM_NAME);
+        policyReferenceElemQName = new QName(namespaceURI, POLICYREFERENCE_ELEM_NAME);
+        policyAttachmentElemQName = new QName(namespaceURI, POLICYATTACHMENT_ELEM_NAME);
+        appliesToElemQName = new QName(namespaceURI, APPLIESTO_ELEM_NAME);
+        optionalAttrQName = new QName(namespaceURI, OPTIONAL_ATTR_NAME);
+        
+    }
 }

Added: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderImpl.java?view=auto&rev=509980
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderImpl.java (added)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderImpl.java Wed Feb 21 04:02:05 2007
@@ -0,0 +1,43 @@
+/**
+ * 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 javax.xml.namespace.QName;
+
+import org.apache.cxf.interceptor.AbstractAttributedInterceptorProvider;
+
+/**
+ * 
+ */
+public class PolicyInterceptorProviderImpl extends AbstractAttributedInterceptorProvider 
+    implements PolicyInterceptorProvider {
+    
+    private Collection<QName> assertionTypes;
+    
+    PolicyInterceptorProviderImpl(Collection<QName> at) {
+        assertionTypes = at;
+    }
+
+    public Collection<QName> getAssertionTypes() {
+        return assertionTypes;
+    } 
+}

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

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

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=509980&r1=509965&r2=509980
==============================================================================
--- 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 Feb 21 04:02:05 2007
@@ -17,95 +17,41 @@
  * under the License.
  */
 
-package org.apache.cxf.ws.policy.builders.jaxb;
+package org.apache.cxf.ws.policy.builder.jaxb;
 
 import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
 
-import org.apache.neethi.All;
+import org.apache.cxf.ws.policy.builder.primitive.PrimitiveAssertion;
+
 import org.apache.neethi.Assertion;
-import org.apache.neethi.Constants;
-import org.apache.neethi.ExactlyOne;
-import org.apache.neethi.Policy;
-import org.apache.neethi.PolicyComponent;
 
 
 /**
  * 
  */
-public class JaxbAssertion<T> implements Assertion {
+public class JaxbAssertion<T> extends PrimitiveAssertion {
     
     private T data;
-    private QName name;
-    private boolean optional;
-    
-    void setData(T d) {
-        data = d;
+
+    public JaxbAssertion() {
     }
 
-    void setName(QName n) {
-        name = n;
+    public JaxbAssertion(QName qn, boolean optional) {
+        super(qn, optional);
     }
     
-    void setOptional(boolean o) {
-        optional = o;
+    public void setData(T d) {
+        data = d;
     }
-    
+
     public T getData() {
         return data;
     }
     
-    public QName getName() {
-        return name;
-    }
-
-    public boolean isOptional() {
-        return optional;
-    }
-
-    /**
-     * Returns the partial normalized version of the wrapped element, that
-     * is assumed to be an assertion.
-     */
-    public PolicyComponent normalize() {
-        if (optional) {
-            Policy policy = new Policy();
-            ExactlyOne exactlyOne = new ExactlyOne();
-            All all = new All();
-            JaxbAssertion<T> a = new JaxbAssertion<T>();
-            a.setData(getData());
-            a.setName(getName());
-            all.addPolicyComponent(this);
-            exactlyOne.addPolicyComponent(all);
-            exactlyOne.addPolicyComponent(new All());
-            policy.addPolicyComponent(exactlyOne);
-            return policy;
-        }
+    protected Assertion cloneMandatory() {
+        JaxbAssertion<T> a = new JaxbAssertion<T>(getName(), false);
+        a.setData(data);
+        return a;        
+    } 
 
-        return this;
-    }
-
-    public boolean equal(PolicyComponent policyComponent) {
-        if (policyComponent.getType() != Constants.TYPE_ASSERTION) {
-            return false;
-        }
-
-        if (!getName().equals(((Assertion)policyComponent).getName())) {
-            return false;
-        }
-        
-        return getData().equals(((JaxbAssertion)policyComponent).getData());
-    }
-
-    public short getType() {
-        return Constants.TYPE_ASSERTION;
-    }
-    
-    public void serialize(XMLStreamWriter writer) throws XMLStreamException {
-        // TODO
-    }
-    
-
-    
 }

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java?view=diff&rev=509980&r1=509965&r2=509980
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java Wed Feb 21 04:02:05 2007
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.cxf.ws.policy.builders.jaxb;
+package org.apache.cxf.ws.policy.builder.jaxb;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -100,15 +100,16 @@
                 LOG.fine("Unmarshaled element into object of type: " + obj.getClass().getName()
                      + "    value: " + obj);
             }
-            JaxbAssertion<T> a = new JaxbAssertion<T>();
-            a.setData((T)obj);
-            a.setName(new QName(element.getNamespaceURI(), element.getLocalName()));
+            QName name = new QName(element.getNamespaceURI(), element.getLocalName());
+            boolean optional = false;
             String value = element.getAttributeNS(
                                Constants.Q_ELEM_OPTIONAL_ATTR.getNamespaceURI(), 
                                Constants.Q_ELEM_OPTIONAL_ATTR.getLocalPart());
             if (Boolean.valueOf(value)) {
-                a.setOptional(true);
+                optional = true;
             }
+            JaxbAssertion<T> a = new JaxbAssertion<T>(name, optional);
+            a.setData((T)obj);
             return a;
         }
         return null;

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertion.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertion.java?view=diff&rev=509980&r1=509965&r2=509980
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertion.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertion.java Wed Feb 21 04:02:05 2007
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.cxf.ws.policy.builders.primitive;
+package org.apache.cxf.ws.policy.builder.primitive;
 
 import java.util.Iterator;
 import java.util.List;
@@ -63,18 +63,18 @@
         for (Node nd = elem.getFirstChild(); nd != null; nd = nd.getNextSibling()) {
             if (Node.ELEMENT_NODE == nd.getNodeType()) {
                 QName qn = new QName(nd.getNamespaceURI(), nd.getLocalName());
-                if (PolicyConstants.POLICY_ELEM_QNAME.equals(qn)
+                if (PolicyConstants.getPolicyElemQName().equals(qn)
                     && null == policyElem) {
                     policyElem = (Element)nd;
                 } else {
                     throw new PolicyException(new Message("UNEXPECTED_CHILD_ELEMENT_EXC", BUNDLE, 
-                                                          PolicyConstants.POLICY_ELEM_QNAME));
+                                                          PolicyConstants.getPolicyElemQName()));
                 }                
             }
         }
         if (null == policyElem) {
             throw new PolicyException(new Message("UNEXPECTED_CHILD_ELEMENT_EXC", BUNDLE, 
-                                                  PolicyConstants.POLICY_ELEM_QNAME));
+                                                  PolicyConstants.getPolicyElemQName()));
         }
         
         nested = builder.getPolicy(policyElem);  

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertionBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertionBuilder.java?view=diff&rev=509980&r1=509965&r2=509980
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertionBuilder.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertionBuilder.java Wed Feb 21 04:02:05 2007
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.cxf.ws.policy.builders.primitive;
+package org.apache.cxf.ws.policy.builder.primitive;
 
 import org.w3c.dom.Element;
 

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertion.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertion.java?view=diff&rev=509980&r1=509965&r2=509980
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertion.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertion.java Wed Feb 21 04:02:05 2007
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.cxf.ws.policy.builders.primitive;
+package org.apache.cxf.ws.policy.builder.primitive;
 
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
@@ -57,8 +57,8 @@
     
     public PrimitiveAssertion(Element element) {
         name = new QName(element.getNamespaceURI(), element.getLocalName());
-        Attr attribute = element.getAttributeNodeNS(PolicyConstants.NAMESPACE_URI, 
-                                              PolicyConstants.OPTIONAL_ATTR_NAME);
+        Attr attribute = element.getAttributeNodeNS(PolicyConstants.getNamespace(), 
+                                              PolicyConstants.getOptionalAttrName());
         if (attribute != null) {
             optional = Boolean.valueOf(attribute.getValue());
         }
@@ -78,11 +78,19 @@
     public QName getName() {
         return name;
     }
+    
+    public void setName(QName n) {
+        name = n;
+    }
 
     public boolean isOptional() {
         return optional;
     }
 
+    public void setOptional(boolean o) {
+        optional = o;        
+    }
+    
     public PolicyComponent normalize() {
         if (isOptional()) {
             Policy policy = new Policy();

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertionBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertionBuilder.java?view=diff&rev=509980&r1=509965&r2=509980
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertionBuilder.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertionBuilder.java Wed Feb 21 04:02:05 2007
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.cxf.ws.policy.builders.primitive;
+package org.apache.cxf.ws.policy.builder.primitive;
 
 import java.util.ArrayList;
 import java.util.Collection;

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/xml/XMLPrimitiveAssertionBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/xml/XMLPrimitiveAssertionBuilder.java?view=diff&rev=509980&r1=509965&r2=509980
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/xml/XMLPrimitiveAssertionBuilder.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/xml/XMLPrimitiveAssertionBuilder.java Wed Feb 21 04:02:05 2007
@@ -17,11 +17,11 @@
  * under the License.
  */
 
-package org.apache.cxf.ws.policy.builders.xml;
+package org.apache.cxf.ws.policy.builder.xml;
 
 import org.w3c.dom.Element;
 
-import org.apache.cxf.ws.policy.builders.primitive.PrimitiveAssertionBuilder;
+import org.apache.cxf.ws.policy.builder.primitive.PrimitiveAssertionBuilder;
 import org.apache.neethi.Assertion;
 
 public class XMLPrimitiveAssertionBuilder extends PrimitiveAssertionBuilder {

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/xml/XmlPrimitiveAssertion.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/xml/XmlPrimitiveAssertion.java?view=diff&rev=509980&r1=509965&r2=509980
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/xml/XmlPrimitiveAssertion.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/xml/XmlPrimitiveAssertion.java Wed Feb 21 04:02:05 2007
@@ -17,16 +17,15 @@
  * under the License.
  */
 
-package org.apache.cxf.ws.policy.builders.xml;
+package org.apache.cxf.ws.policy.builder.xml;
 
 import org.w3c.dom.Element;
 
 import org.apache.cxf.ws.policy.PolicyConstants;
-import org.apache.cxf.ws.policy.builders.primitive.PrimitiveAssertion;
+import org.apache.cxf.ws.policy.builder.primitive.PrimitiveAssertion;
 import org.apache.neethi.Assertion;
 import org.apache.neethi.PolicyComponent;
 
-
 /**
  * XmlPrimitiveAssertion is a primitive implementation of an AssertionBuilder
  * that simply wraps the underlying xml element.
@@ -67,8 +66,8 @@
     protected Assertion cloneMandatory() {
         Element e = (Element)element.cloneNode(true);
         if (isOptional()) {
-            e.removeAttributeNode(e.getAttributeNodeNS(PolicyConstants.NAMESPACE_URI, 
-                                                   PolicyConstants.OPTIONAL_ATTR_NAME));
+            e.removeAttributeNode(e.getAttributeNodeNS(PolicyConstants.getNamespace(), 
+                                                   PolicyConstants.getOptionalAttrName()));
         }
         return new XmlPrimitiveAssertion(e);        
     }

Modified: incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilderTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilderTest.java?view=diff&rev=509980&r1=509965&r2=509980
==============================================================================
--- incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilderTest.java (original)
+++ incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilderTest.java Wed Feb 21 04:02:05 2007
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.cxf.ws.policy.builders.jaxb;
+package org.apache.cxf.ws.policy.builder.jaxb;
 
 import java.io.InputStream;
 

Modified: incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionTest.java?view=diff&rev=509980&r1=509965&r2=509980
==============================================================================
--- incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionTest.java (original)
+++ incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionTest.java Wed Feb 21 04:02:05 2007
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.cxf.ws.policy.builders.jaxb;
+package org.apache.cxf.ws.policy.builder.jaxb;
 
 import java.util.Iterator;
 import java.util.List;
@@ -28,7 +28,7 @@
 
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.test.assertions.foo.FooType;
-import org.apache.cxf.ws.policy.builders.xml.XmlPrimitiveAssertion;
+import org.apache.cxf.ws.policy.builder.xml.XmlPrimitiveAssertion;
 import org.apache.neethi.All;
 import org.apache.neethi.Constants;
 import org.apache.neethi.ExactlyOne;
@@ -109,8 +109,10 @@
         QName qn = new QName("http://cxf.apache.org/test/assertions/foo", "FooType");
         assertion.setName(qn);
         assertion.setData(data);
-        
-        assertSame(assertion, assertion.normalize()); 
+
+        JaxbAssertion normalised = (JaxbAssertion)assertion.normalize();
+        assertTrue(normalised.equal(assertion));       
+        assertSame(assertion.getData(), normalised.getData()); 
         
         assertion.setOptional(true);        
         PolicyComponent pc = assertion.normalize();

Modified: incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertionBuilderTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertionBuilderTest.java?view=diff&rev=509980&r1=509965&r2=509980
==============================================================================
--- incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertionBuilderTest.java (original)
+++ incubator/cxf/trunk/api/src/test/java/org/apache/cxf/ws/policy/builder/primitive/NestedPrimitiveAssertionBuilderTest.java Wed Feb 21 04:02:05 2007
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.cxf.ws.policy.builders.primitive;
+package org.apache.cxf.ws.policy.builder.primitive;
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
@@ -63,7 +63,7 @@
     public void testBuildFail() throws Exception {
         String data = 
             "<wsam:Addressing wsp:Optional=\"true\""
-            + " xmlns:wsp=\"http://schemas.xmlsoap.org/ws/2004/09/policy\""
+            + " xmlns:wsp=\"http://www.w3.org/2006/07/ws-policy\""
             + " xmlns:wsam=\"http://www.w3.org/2007/01/addressing/metadata\" />";
         
         try {
@@ -77,7 +77,7 @@
     public void testBuild() throws Exception {
         String data = 
             "<wsam:Addressing wsp:Optional=\"true\""
-            + " xmlns:wsp=\"http://schemas.xmlsoap.org/ws/2004/09/policy\""
+            + " xmlns:wsp=\"http://www.w3.org/2006/07/ws-policy\""
             + " xmlns:wsam=\"http://www.w3.org/2007/01/addressing/metadata\">"
             + "<wsp:Policy/></wsam:Addressing>";
  

Modified: incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingAssertionBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingAssertionBuilder.java?view=diff&rev=509980&r1=509979&r2=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingAssertionBuilder.java (original)
+++ incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingAssertionBuilder.java Wed Feb 21 04:02:05 2007
@@ -31,8 +31,8 @@
 import org.apache.cxf.ws.policy.AssertionBuilder;
 import org.apache.cxf.ws.policy.PolicyBuilder;
 import org.apache.cxf.ws.policy.PolicyConstants;
-import org.apache.cxf.ws.policy.builders.primitive.NestedPrimitiveAssertion;
-import org.apache.cxf.ws.policy.builders.primitive.PrimitiveAssertion;
+import org.apache.cxf.ws.policy.builder.primitive.NestedPrimitiveAssertion;
+import org.apache.cxf.ws.policy.builder.primitive.PrimitiveAssertion;
 import org.apache.neethi.Assertion;
 
 /**
@@ -48,33 +48,31 @@
     }
     
     static {
-        KNOWN.add(MetadataConstants.getAddressingAssertionQName());
-        KNOWN.add(MetadataConstants.getAnonymousResponsesAssertionQName());
-        KNOWN.add(MetadataConstants.getNonAnonymousResponsesAssertionQName());
+        KNOWN.add(MetadataConstants.ADDRESSING_ASSERTION_QNAME);
+        KNOWN.add(MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME);
+        KNOWN.add(MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME);
     }
     
     public Assertion build(Element elem) {
         
         String localName = elem.getLocalName();
-        QName n = new QName(elem.getNamespaceURI(), localName);
-        System.out.println("Using AddressingAssertionBuilder to build assertion for " + n);
+        QName qn = new QName(elem.getNamespaceURI(), localName);
         
         boolean optional = false;
-        Attr attribute = elem.getAttributeNodeNS(PolicyConstants.NAMESPACE_URI, 
-                                              PolicyConstants.OPTIONAL_ATTR_NAME);
+        Attr attribute = elem.getAttributeNodeNS(PolicyConstants.getNamespace(), 
+                                              PolicyConstants.getOptionalAttrName());
         if (attribute != null) {
             optional = Boolean.valueOf(attribute.getValue());
         }
-        if (MetadataConstants.getAddressingAssertionQName().getLocalPart().equals(localName)) {
+        if (MetadataConstants.ADDRESSING_ASSERTION_QNAME.equals(qn)) {
             PolicyBuilder builder = bus.getExtension(PolicyBuilder.class);
             return new NestedPrimitiveAssertion(elem, builder);
-        } else if (MetadataConstants.getAnonymousResponsesAssertionQName().getLocalPart()
-            .equals(localName)) {
-            return new PrimitiveAssertion(MetadataConstants.getAnonymousResponsesAssertionQName(), 
+        } else if (MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME.equals(qn)) {
+            return new PrimitiveAssertion(MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME, 
                                           optional);
-        } else if (MetadataConstants.getNonAnonymousResponsesAssertionQName().getLocalPart()
+        } else if (MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME.getLocalPart()
             .equals(localName)) {
-            return new PrimitiveAssertion(MetadataConstants.getNonAnonymousResponsesAssertionQName(), 
+            return new PrimitiveAssertion(MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME,
                                           optional);
         }
         return null;

Added: incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingPolicyInterceptorProvider.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingPolicyInterceptorProvider.java?view=auto&rev=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingPolicyInterceptorProvider.java (added)
+++ incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingPolicyInterceptorProvider.java Wed Feb 21 04:02:05 2007
@@ -0,0 +1,51 @@
+/**
+ * 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.addressing.policy;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.interceptor.AbstractAttributedInterceptorProvider;
+import org.apache.cxf.ws.policy.PolicyInterceptorProvider;
+
+/**
+ * Instead of parametrising an instance of org.apache.cxf.policy.PolicyInterceptorProviderImpl
+ * we use this class to reduce the impact of changes to the addressing metadata namespace
+ * (only need to update Metadataconstants, otherwise cfg file fragement also).
+ */
+public class AddressingPolicyInterceptorProvider  extends AbstractAttributedInterceptorProvider 
+    implements PolicyInterceptorProvider {
+
+    private static final Collection<QName> ASSERTION_TYPES;
+    
+    static {
+        Collection<QName> types = new ArrayList<QName>();
+        types.add(MetadataConstants.ADDRESSING_ASSERTION_QNAME);
+        types.add(MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME);
+        types.add(MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME);
+        ASSERTION_TYPES = types;
+    }
+    
+    public Collection<QName> getAssertionTypes() {
+        return ASSERTION_TYPES;
+    }
+}

Propchange: incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingPolicyInterceptorProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingPolicyInterceptorProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/MetadataConstants.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/MetadataConstants.java?view=diff&rev=509980&r1=509979&r2=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/MetadataConstants.java (original)
+++ incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/MetadataConstants.java Wed Feb 21 04:02:05 2007
@@ -26,32 +26,20 @@
  */
 public final class MetadataConstants {
     
-    private static final String NAMESPACE_URI = 
+    public static final String NAMESPACE_URI = 
         "http://www.w3.org/2007/01/addressing/metadata";
-    
-    private static final String ADDESSING_ELEM_NAME = "Addressing";
-    private static final String ANON_RESPONSES_ELEM_NAME = "AnonymousResponses";
-    private static final String NON_ANON_RESPONSES_ELEM_NAME = "NonAnonymousResponses";
+    public static final String ADDRESSING_ELEM_NAME = "Addressing";
+    public static final String ANON_RESPONSES_ELEM_NAME = "AnonymousResponses";
+    public static final String NON_ANON_RESPONSES_ELEM_NAME = "NonAnonymousResponses";
        
-    private static final QName ADDRESSING_ASSERTION_QNAME
-        = new QName(NAMESPACE_URI, ADDESSING_ELEM_NAME);
-    private static final QName ANON_RESPONSES_ASSERTION_QNAME
+    public static final QName ADDRESSING_ASSERTION_QNAME
+        = new QName(NAMESPACE_URI, ADDRESSING_ELEM_NAME);
+    public static final QName ANON_RESPONSES_ASSERTION_QNAME
         = new QName(NAMESPACE_URI, ANON_RESPONSES_ELEM_NAME);
-    private static final QName NON_ANON_RESPONSES_ASSERTION_QNAME
+    public static final QName NON_ANON_RESPONSES_ASSERTION_QNAME
         = new QName(NAMESPACE_URI, NON_ANON_RESPONSES_ELEM_NAME);
     
     private MetadataConstants() {        
     }
     
-    public static QName getAddressingAssertionQName() {
-        return ADDRESSING_ASSERTION_QNAME;
-    }
-    
-    public static QName getAnonymousResponsesAssertionQName() {
-        return ANON_RESPONSES_ASSERTION_QNAME;
-    }
-    
-    public static QName getNonAnonymousResponsesAssertionQName() {
-        return NON_ANON_RESPONSES_ASSERTION_QNAME;
-    }
 }

Modified: incubator/cxf/trunk/rt/ws/addr/src/main/resources/META-INF/cxf/cxf-extension-addr.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/main/resources/META-INF/cxf/cxf-extension-addr.xml?view=diff&rev=509980&r1=509979&r2=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/addr/src/main/resources/META-INF/cxf/cxf-extension-addr.xml (original)
+++ incubator/cxf/trunk/rt/ws/addr/src/main/resources/META-INF/cxf/cxf-extension-addr.xml Wed Feb 21 04:02:05 2007
@@ -25,6 +25,34 @@
     <bean class="org.apache.cxf.ws.addressing.policy.AddressingAssertionBuilder">
         <constructor-arg ref="cxf"/>
     </bean>
+
+    <bean class="org.apache.cxf.ws.addressing.MAPAggregator"/>
+    <bean class="org.apache.cxf.ws.addressing.soap.MAPCodec"/>
     
-    
+    <bean class="org.apache.cxf.ws.addressing.policy.AddressingPolicyInterceptorProvider">
+        <property name="inInterceptors">
+            <list>
+                <ref bean="org.apache.cxf.ws.addressing.MAPAggregator"/>
+                <ref bean="org.apache.cxf.ws.addressing.soap.MAPCodec"/>
+            </list>
+        </property>
+        <property name="inFaultInterceptors">
+            <list>
+                <ref bean="org.apache.cxf.ws.addressing.MAPAggregator"/>
+            </list>
+        </property>
+        <property name="outInterceptors">
+            <list>
+                <ref bean="org.apache.cxf.ws.addressing.MAPAggregator"/>
+                <ref bean="org.apache.cxf.ws.addressing.soap.MAPCodec"/>
+            </list>
+        </property>
+        <property name="outFaultInterceptors">
+            <list>
+                <ref bean="org.apache.cxf.ws.addressing.MAPAggregator"/>
+                <ref bean="org.apache.cxf.ws.addressing.soap.MAPCodec"/>
+            </list>
+        </property>
+    </bean>
+ 
 </beans>

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/Messages.properties
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/Messages.properties?view=diff&rev=509980&r1=509979&r2=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/Messages.properties (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/Messages.properties Wed Feb 21 04:02:05 2007
@@ -23,5 +23,4 @@
 NOT_A_POLICY_ELEMENT_EXC = Specified element is not a Policy element.
 NOT_A_POLICYREF_ELEMENT_EXC = Specified element is not a PolicyReference element.
 NO_ALTERNATIVE_EXC = None of the policy alternatives can be satisfied.
-REMOTE_POLICY_RESOLUTION_NOT_SUPPORTED_EXC = Resolution of remote policy references is not supported.
 UNRESOLVED_POLICY_REEFERENCE_EXC = Policy reference {0} could not be resolved.

Modified: 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/PolicyEngine.java?view=diff&rev=509980&r1=509979&r2=509980
==============================================================================
--- 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/PolicyEngine.java Wed Feb 21 04:02:05 2007
@@ -42,7 +42,6 @@
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.cxf.transport.Conduit;
 import org.apache.cxf.transport.Destination;
-import org.apache.cxf.ws.policy.attachment.wsdl11.Wsdl11AttachmentPolicyProvider;
 import org.apache.neethi.Assertion;
 import org.apache.neethi.Constants;
 import org.apache.neethi.Policy;
@@ -58,7 +57,7 @@
     
     private Bus bus;
     private PolicyRegistry registry;
-    private List<PolicyProvider> policyProviders;
+    private Collection<PolicyProvider> policyProviders;
     private boolean registerInterceptors;
 
     private Map<BindingOperationInfo, ClientRequestPolicyInfo> clientRequestInfo 
@@ -68,6 +67,10 @@
     private Map<BindingOperationInfo, ServerResponsePolicyInfo> serverResponseInfo 
         = new ConcurrentHashMap<BindingOperationInfo, ServerResponsePolicyInfo>();
 
+    public PolicyEngine() {
+        registry = new PolicyRegistryImpl();
+    }
+    
     public Class getRegistrationType() {
         return PolicyEngine.class;
     }
@@ -80,11 +83,11 @@
         return bus;
     }
     
-    public void setPolicyProviders(List<PolicyProvider> p) {
+    public void setPolicyProviders(Collection<PolicyProvider> p) {
         policyProviders = p;
     }
    
-    public List<PolicyProvider> getPolicyProviders() {
+    public Collection<PolicyProvider> getPolicyProviders() {
         return policyProviders;
     }
     
@@ -102,23 +105,6 @@
 
     public void setRegisterInterceptors(boolean ri) {
         registerInterceptors = ri;
-    }
-
-    @PostConstruct
-    void init() {
-        if (null == registry) {
-            registry = new PolicyRegistryImpl();
-        }
-      
-        if (null == policyProviders && null != bus) {
-            // TODO:
-            // include attachment provider for wsdl 2.0 and
-            // for external attachments
-            Wsdl11AttachmentPolicyProvider wpp = new Wsdl11AttachmentPolicyProvider();
-            wpp.setBuilder(bus.getExtension(PolicyBuilder.class));
-            wpp.setRegistry(registry);
-            policyProviders = Collections.singletonList((PolicyProvider)wpp);
-        } 
     }
     
     @PostConstruct

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyUtils.java?view=diff&rev=509980&r1=509979&r2=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyUtils.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyUtils.java Wed Feb 21 04:02:05 2007
@@ -23,7 +23,7 @@
 
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.message.Message;
-import org.apache.cxf.ws.policy.builders.primitive.NestedPrimitiveAssertion;
+import org.apache.cxf.ws.policy.builder.primitive.NestedPrimitiveAssertion;
 import org.apache.neethi.Assertion;
 import org.apache.neethi.Constants;
 import org.apache.neethi.PolicyComponent;

Added: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/AbstractPolicyProvider.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/AbstractPolicyProvider.java?view=auto&rev=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/AbstractPolicyProvider.java (added)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/AbstractPolicyProvider.java Wed Feb 21 04:02:05 2007
@@ -0,0 +1,92 @@
+/**
+ * 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.attachment;
+
+import java.util.ResourceBundle;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.ws.policy.PolicyBuilder;
+import org.apache.cxf.ws.policy.PolicyEngine;
+import org.apache.cxf.ws.policy.PolicyException;
+import org.apache.cxf.ws.policy.attachment.reference.ReferenceResolver;
+import org.apache.cxf.ws.policy.attachment.reference.RemoteReferenceResolver;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyReference;
+import org.apache.neethi.PolicyRegistry;
+
+/**
+ * 
+ */
+public class AbstractPolicyProvider {
+    
+    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(AbstractPolicyProvider.class);
+    
+    protected PolicyBuilder builder;
+    protected PolicyRegistry registry; 
+    protected Bus bus;
+    
+    protected AbstractPolicyProvider() {
+        this(null);
+    }
+    
+    protected AbstractPolicyProvider(Bus b) {
+        bus = b;
+    }
+    
+    public void setBuilder(PolicyBuilder b) {
+        builder = b;
+    }
+    
+    public void setRegistry(PolicyRegistry r) {
+        registry = r;
+    }  
+    
+    @PostConstruct
+    void init() {
+        if (null != bus) {
+            setBuilder(bus.getExtension(PolicyBuilder.class));
+            PolicyEngine pe = bus.getExtension(PolicyEngine.class);
+            setRegistry(pe.getRegistry());
+        }
+    }
+    
+    protected Policy resolveExternal(PolicyReference ref,  String baseURI) {
+        ReferenceResolver resolver = new RemoteReferenceResolver(baseURI, builder);
+        Policy resolved = registry.lookup(ref.getURI());
+        if (null != resolved) {
+            return resolved;
+        }
+        return resolver.resolveReference(ref.getURI());
+    }
+    
+    protected boolean isExternal(PolicyReference ref) {
+        return !ref.getURI().startsWith("#");
+    }
+    
+    protected void checkResolved(PolicyReference ref, Policy p) {
+        if (null == p) {
+            throw new PolicyException(new Message("UNRESOLVED_POLICY_REEFERENCE_EXC", BUNDLE, ref.getURI()));
+        }
+    }
+}

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

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

Added: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/Messages.properties
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/Messages.properties?view=auto&rev=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/Messages.properties (added)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/Messages.properties Wed Feb 21 04:02:05 2007
@@ -0,0 +1,22 @@
+#
+#
+#    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.
+#
+#
+
+UNRESOLVED_POLICY_REEFERENCE_EXC = Reference to policy {0} could not be resolved.
\ No newline at end of file

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

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

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

Added: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpression.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpression.java?view=auto&rev=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpression.java (added)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpression.java Wed Feb 21 04:02:05 2007
@@ -0,0 +1,37 @@
+/**
+ * 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.attachment.external;
+
+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.service.model.ServiceInfo;
+
+/**
+ * 
+ */
+public interface DomainExpression {
+    boolean appliesTo(BindingFaultInfo bfi);
+    boolean appliesTo(BindingMessageInfo bmi);
+    boolean appliesTo(BindingOperationInfo boi);
+    boolean appliesTo(EndpointInfo ei);
+    boolean appliesTo(ServiceInfo si);
+}

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpression.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpression.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilder.java?view=auto&rev=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilder.java (added)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilder.java Wed Feb 21 04:02:05 2007
@@ -0,0 +1,31 @@
+/**
+ * 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.attachment.external;
+
+import org.w3c.dom.Element;
+
+/**
+ * 
+ */
+public interface DomainExpressionBuilder {
+    
+    DomainExpression build(Element e);
+   
+}

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilderRegistry.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilderRegistry.java?view=auto&rev=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilderRegistry.java (added)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilderRegistry.java Wed Feb 21 04:02:05 2007
@@ -0,0 +1,71 @@
+/**
+ * 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.attachment.external;
+
+import java.util.Map;
+import java.util.ResourceBundle;
+
+import javax.xml.namespace.QName;
+
+import org.w3c.dom.Element;
+
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.extension.BusExtension;
+import org.apache.cxf.extension.RegistryImpl;
+import org.apache.cxf.ws.policy.AssertionBuilderRegistry;
+import org.apache.cxf.ws.policy.PolicyException;
+
+/**
+ * 
+ */
+public class DomainExpressionBuilderRegistry extends RegistryImpl<QName, DomainExpressionBuilder> 
+    implements BusExtension {
+    
+    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(AssertionBuilderRegistry.class);
+    
+    public DomainExpressionBuilderRegistry() {
+        this(null);
+    }
+
+    public DomainExpressionBuilderRegistry(Map<QName, DomainExpressionBuilder> builders) {
+        super(builders);
+    }
+    
+    public Class getRegistrationType() {
+        return DomainExpressionBuilderRegistry.class;
+    }
+    
+    public DomainExpression build(Element element) {
+        
+        DomainExpressionBuilder builder;
+
+        QName qname = new QName(element.getNamespaceURI(), element.getLocalName());
+        builder = get(qname);
+
+        if (null == builder) {
+            throw new PolicyException(new Message("NO_DOMAINEXPRESSIONBUILDER_EXC", 
+                                                  BUNDLE, qname.toString()));
+        }
+
+        return builder.build(element);
+
+    }
+}

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilderRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/DomainExpressionBuilderRegistry.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpression.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpression.java?view=auto&rev=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpression.java (added)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpression.java Wed Feb 21 04:02:05 2007
@@ -0,0 +1,65 @@
+/**
+ * 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.attachment.external;
+
+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.service.model.ServiceInfo;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+
+/**
+ * 
+ */
+public class EndpointReferenceDomainExpression implements DomainExpression {
+
+    private EndpointReferenceType epr;    
+    
+    public EndpointReferenceType getEndpointReference() {
+        return epr;
+    }
+
+    public void setEndpointReference(EndpointReferenceType e) {
+        epr = e;
+    }
+
+    public boolean appliesTo(BindingFaultInfo bfi) {
+        return false;
+    }
+
+    public boolean appliesTo(BindingMessageInfo bmi) {
+        return false;
+    }
+
+    public boolean appliesTo(BindingOperationInfo boi) {
+        return false;
+    }
+
+    public boolean appliesTo(EndpointInfo ei) {
+        // TODO what if no address is specified for the EndpointInfo object ...
+        return epr.getAddress().getValue().equals(ei.getAddress());
+    }
+
+    public boolean appliesTo(ServiceInfo si) {
+        return false;
+    }
+
+}

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpression.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpression.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionBuilder.java?view=auto&rev=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionBuilder.java (added)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionBuilder.java Wed Feb 21 04:02:05 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.attachment.external;
+
+import java.util.ResourceBundle;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+
+import org.w3c.dom.Element;
+
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.ws.policy.PolicyException;
+
+/**
+ * 
+ */
+public class EndpointReferenceDomainExpressionBuilder implements DomainExpressionBuilder {
+
+    private static final ResourceBundle BUNDLE 
+        = BundleUtils.getBundle(EndpointReferenceDomainExpressionBuilder.class);
+    
+    private Unmarshaller unmarshaller;
+    
+    EndpointReferenceDomainExpressionBuilder() {
+        try {
+            JAXBContext context = JAXBContext.newInstance(EndpointReferenceType.class.getPackage().getName());
+            unmarshaller = context.createUnmarshaller();
+        } catch (JAXBException ex) {
+            throw new PolicyException(new Message("EPR_DOMAIN_EXPRESSION_BUILDER_INIT_EXC", BUNDLE, 
+                                                  (Object[])null), ex);
+        }
+    }
+    
+    public DomainExpression build(Element e) {
+        Object obj = null;
+        try {
+            obj = unmarshaller.unmarshal(e);
+        } catch (JAXBException ex) {
+            throw new PolicyException(new Message("EPR_DOMAIN_EXPRESSION_BUILD_EXC", BUNDLE, 
+                                                  (Object[])null), ex);
+        }
+        if (obj instanceof JAXBElement<?>) {
+            JAXBElement<?> el = (JAXBElement<?>)obj;
+            obj = el.getValue();
+        } 
+
+        EndpointReferenceDomainExpression eprde = new EndpointReferenceDomainExpression();
+        eprde.setEndpointReference((EndpointReferenceType)obj);
+        return eprde;
+    }
+
+    
+}

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/ExternalAttachmentProvider.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/ExternalAttachmentProvider.java?view=diff&rev=509980&r1=509979&r2=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/ExternalAttachmentProvider.java (original)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/ExternalAttachmentProvider.java Wed Feb 21 04:02:05 2007
@@ -19,9 +19,229 @@
 
 package org.apache.cxf.ws.policy.attachment.external;
 
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.xml.namespace.QName;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.resource.URIResolver;
+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.service.model.ServiceInfo;
+import org.apache.cxf.ws.policy.PolicyConstants;
+import org.apache.cxf.ws.policy.PolicyException;
+import org.apache.cxf.ws.policy.attachment.AbstractPolicyProvider;
+import org.apache.cxf.ws.policy.attachment.reference.LocalDocumentReferenceResolver;
+import org.apache.cxf.ws.policy.attachment.reference.ReferenceResolver;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyReference;
+
 /**
  * 
  */
-public class ExternalAttachmentProvider {
+public class ExternalAttachmentProvider extends AbstractPolicyProvider {
+    
+    private String uri;
+    private Collection<PolicyAttachment> attachments;
+    
+    ExternalAttachmentProvider() {        
+    }
+    
+    ExternalAttachmentProvider(Bus b) {
+        super(b);
+    }
+    
+    public void setURI(String u) {
+        uri = u;
+    }
+    
+    public String getURI() {
+        return uri;
+    }
+
+    public Policy getEffectivePolicy(BindingFaultInfo bfi) {
+        readDocument();
+        Policy p = new Policy();
+        for (PolicyAttachment pa : attachments) {
+            if (pa.appliesTo(bfi)) {
+                p = p.merge(pa.getPolicy());
+            }
+        }
+                
+        return p;
+    }
+
+    public Policy getEffectivePolicy(BindingMessageInfo bmi) {
+        readDocument();
+        Policy p = new Policy();
+        for (PolicyAttachment pa : attachments) {
+            if (pa.appliesTo(bmi)) {
+                p = p.merge(pa.getPolicy());
+            }
+        }
+                
+        return p;
+    }
+
+    public Policy getEffectivePolicy(BindingOperationInfo boi) {
+        readDocument();
+        Policy p = new Policy();
+        for (PolicyAttachment pa : attachments) {
+            if (pa.appliesTo(boi)) {
+                p = p.merge(pa.getPolicy());
+            }
+        }
+                
+        return p;
+    }
+
+    public Policy getEffectivePolicy(EndpointInfo ei) {
+        readDocument();
+        Policy p = new Policy();
+        for (PolicyAttachment pa : attachments) {
+            if (pa.appliesTo(ei)) {
+                p = p.merge(pa.getPolicy());
+            }
+        }
+                
+        return p;
+    }
 
+    public Policy getEffectivePolicy(ServiceInfo si) {
+        readDocument();
+        Policy p = new Policy();
+        for (PolicyAttachment pa : attachments) {
+            if (pa.appliesTo(si)) {
+                p = p.merge(pa.getPolicy());
+            }
+        }
+                
+        return p;
+    } 
+    
+    void readDocument() {
+        if (null != attachments) {
+            return;
+        }
+        
+        // read the document and build the attachments
+        attachments = new ArrayList<PolicyAttachment>();
+        Document doc = null;
+        try {
+            InputStream is = new URIResolver(uri).getInputStream();
+            try {
+                doc = DOMUtils.readXml(is);
+            } catch (Exception ex) {
+                throw new PolicyException(ex);
+            }
+        } catch (Exception ex) {
+            throw new PolicyException(ex);
+        }
+        NodeList nl = doc.getElementsByTagNameNS(PolicyConstants.getNamespace(), 
+                                                 PolicyConstants.getPolicyAttachmentElemName());
+        for (int i = 0; i < nl.getLength(); i++) {
+            
+            PolicyAttachment attachment = new PolicyAttachment();
+            
+            Element ae = (Element)nl.item(i);
+            
+            for (Node nd = ae.getFirstChild(); nd != null; nd = nd.getNextSibling()) {
+                if (Node.ELEMENT_NODE != nd.getNodeType()) {
+                    continue;
+                }
+                QName qn = new QName(nd.getNamespaceURI(), nd.getLocalName());
+                if (PolicyConstants.getAppliesToElemQName().equals(qn)) {
+                    Collection<DomainExpression> des = readDomainExpressions((Element)nd);
+                    if (des.isEmpty()) {
+                        // forget about this attachment
+                        continue;
+                    }
+                    attachment.setDomainExpressions(des);                    
+                } else if (PolicyConstants.getPolicyElemQName().equals(qn)) {
+                    Policy p = builder.getPolicy((Element)nd);
+                    if (null != attachment.getPolicy()) {
+                        p = p.merge(attachment.getPolicy());
+                    }
+                    attachment.setPolicy(p);
+                } else if (PolicyConstants.getPolicyReferenceElemQName().equals(qn)) {
+                    PolicyReference ref = builder.getPolicyReference((Element)nd);
+                    if (null != ref) {   
+                        Policy p = resolveReference(ref, doc);
+                        if (null != attachment.getPolicy()) {
+                            p = p.merge(attachment.getPolicy());
+                        }
+                        attachment.setPolicy(p);
+                    }                    
+                } // TODO: wsse:Security child element
+            }
+            
+            if (null == attachment.getPolicy() || null == attachment.getDomainExpressions()) {                
+                continue;
+            }
+            
+            attachments.add(attachment);
+        }
+    }
+    
+    Policy resolveReference(PolicyReference ref, Document doc) {
+        Policy p = null;
+        if (isExternal(ref)) {
+            p = resolveExternal(ref, doc.getBaseURI());
+        } else {
+            p = resolveLocal(ref, doc);
+        }
+        checkResolved(ref, p);
+        return p;
+    }
+    
+    Policy resolveLocal(PolicyReference ref, Document doc) {
+        String relativeURI = ref.getURI().substring(1);
+        String absoluteURI = doc.getBaseURI() + ref.getURI();
+        Policy resolved = registry.lookup(absoluteURI);
+        if (null != resolved) {
+            return resolved;
+        }
+        ReferenceResolver resolver = new LocalDocumentReferenceResolver(doc, builder);
+        resolved = resolver.resolveReference(relativeURI);
+        if (null != resolved) {
+            ref.setURI(absoluteURI);
+            registry.register(absoluteURI, resolved);
+        }
+        return resolved;
+    }  
+    
+    Collection<DomainExpression> readDomainExpressions(Element appliesToElem) {
+        Collection<DomainExpression> des = new ArrayList<DomainExpression>();
+        for (Node nd = appliesToElem.getFirstChild(); nd != null; nd = nd.getNextSibling()) {
+            if (Node.ELEMENT_NODE == nd.getNodeType()) {
+                DomainExpressionBuilderRegistry debr 
+                    = bus.getExtension(DomainExpressionBuilderRegistry.class);
+                assert null != debr;
+                DomainExpression de = debr.build((Element)nd);
+                des.add(de);
+            }
+        }
+        return des;
+    }
+    
+    // for test
+    
+    void setAttachments(Collection<PolicyAttachment> a) {
+        attachments = a;    
+    }
+    
+    Collection<PolicyAttachment> getAttachments() {
+        return attachments;
+    }
+    
 }

Added: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/Messages.properties
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/Messages.properties?view=auto&rev=509980
==============================================================================
--- incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/Messages.properties (added)
+++ incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/Messages.properties Wed Feb 21 04:02:05 2007
@@ -0,0 +1,23 @@
+#
+#
+#    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_DOMAINEXPRESSIONBUILDER_EXC = No domain expresssion builder for type {0} registered.
+EPR_DOMAIN_EXPRESSION_BUILD_EXC = Failed to build endpoint reference type domain expression.  
+EPR_DOMAIN_EXPRESSION_BUILDER_INIT_EXC = Failed to initialise endpoint reference type domain expression builder.
\ No newline at end of file

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/Messages.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/Messages.properties
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: incubator/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/Messages.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain