You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2010/05/25 20:32:15 UTC

svn commit: r948155 - in /cxf/branches/2.2.x-fixes: ./ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ systests/ws-specs/src/test...

Author: dkulp
Date: Tue May 25 18:32:14 2010
New Revision: 948155

URL: http://svn.apache.org/viewvc?rev=948155&view=rev
Log:
Merged revisions 947793 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r947793 | dkulp | 2010-05-24 16:28:52 -0400 (Mon, 24 May 2010) | 2 lines
  
  Add some validation when only anonymous or only non-anonymous addressing
  it required.
........

Modified:
    cxf/branches/2.2.x-fixes/   (props changed)
    cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
    cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
    cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
    cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_disable/AddNumberImpl.java
    cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/AddNumberImpl.java
    cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/Server.java
    cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/WSAFromWSDLTest.java
    cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/add_numbers.wsdl

Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java?rev=948155&r1=948154&r2=948155&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java Tue May 25 18:32:14 2010
@@ -622,7 +622,6 @@ public class ServiceImpl extends Service
         }
         Dispatch<T> disp = new DispatchImpl<T>(client, mode, type);
         configureObject(disp);
-
         return disp;
     }
     

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java?rev=948155&r1=948154&r2=948155&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java Tue May 25 18:32:14 2010
@@ -278,6 +278,7 @@ public class JaxWsEndpointImpl extends E
                     DescriptionInfo description = new DescriptionInfo();
                     description.setName(bindingInfo.getService().getName());
                     bindingInfo.getService().setDescription(description);
+                    bindingInfo.setDescription(description);
                 }
                 bindingInfo.getService().getDescription().addExtensor(uel);
                 
@@ -354,6 +355,8 @@ public class JaxWsEndpointImpl extends E
             feature.setAddressingRequired(addressing.isRequired());
         } else {
             removeAddressingFeature();
+            getEndpointInfo().setProperty("org.apache.cxf.ws.addressing.MAPAggregator.addressingDisabled",
+                                          Boolean.TRUE);
         }
     }
     

Modified: cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java?rev=948155&r1=948154&r2=948155&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java (original)
+++ cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java Tue May 25 18:32:14 2010
@@ -345,6 +345,7 @@ public final class ContextUtils {
     public static void rebaseResponse(EndpointReferenceType reference,
                                       AddressingProperties inMAPs,
                                       final Message inMessage) {
+        
         String namespaceURI = inMAPs.getNamespaceURI();
         if (!retrievePartialResponseSent(inMessage)) {
             storePartialResponseSent(inMessage);

Modified: cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java?rev=948155&r1=948154&r2=948155&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java (original)
+++ cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java Tue May 25 18:32:14 2010
@@ -44,6 +44,7 @@ import org.apache.cxf.interceptor.OneWay
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.FaultMode;
 import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageUtils;
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.model.BindingOperationInfo;
@@ -66,6 +67,9 @@ import org.apache.cxf.ws.policy.Assertio
  */
 public class MAPAggregator extends AbstractPhaseInterceptor<Message> {
     public static final String USING_ADDRESSING = MAPAggregator.class.getName() + ".usingAddressing";
+    public static final String ADDRESSING_DISABLED = MAPAggregator.class.getName() + ".addressingDisabled";
+    public static final String DECOUPLED_DESTINATION = MAPAggregator.class.getName() 
+        + ".decoupledDestination";
 
     private static final Logger LOG = 
         LogUtils.getL7dLogger(MAPAggregator.class);
@@ -156,7 +160,29 @@ public class MAPAggregator extends Abstr
      * @param message the current message
      */
     public void handleMessage(Message message) {
-        mediate(message, ContextUtils.isFault(message));
+        if (!MessageUtils.getContextualBoolean(message, ADDRESSING_DISABLED, false)) {
+            mediate(message, ContextUtils.isFault(message));
+        } else {
+            //addressing is completely disabled manually, we need to assert the
+            //assertions as the user is in control of those
+            AssertionInfoMap aim = message.get(AssertionInfoMap.class);
+            if (null == aim) {
+                return;
+            }
+            QName[] types = new QName[] {
+                MetadataConstants.ADDRESSING_ASSERTION_QNAME,
+                MetadataConstants.USING_ADDRESSING_2004_QNAME,
+                MetadataConstants.USING_ADDRESSING_2005_QNAME,
+                MetadataConstants.USING_ADDRESSING_2006_QNAME,
+                MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME,
+                MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME,
+                MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME_0705,
+                MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME_0705
+            };
+            for (QName type : types) {
+                assertAssertion(aim, type);
+            }
+        }
     }
 
     /**
@@ -278,12 +304,21 @@ public class MAPAggregator extends Abstr
      * Policies.
      * @param message the current message
      */
-    private void assertAddressing(Message message, boolean anonymous) {
+    private void assertAddressing(Message message, 
+                                  EndpointReferenceType replyTo, 
+                                  EndpointReferenceType faultTo) {
         AssertionInfoMap aim = message.get(AssertionInfoMap.class);
         if (null == aim) {
             return;
-            
         }
+        if (faultTo == null) {
+            faultTo = replyTo;
+        }
+        boolean anonReply = ContextUtils.isGenericAddress(replyTo);
+        boolean anonFault = ContextUtils.isGenericAddress(faultTo);
+        boolean onlyAnonymous = anonReply && anonFault;
+        boolean hasAnonymous = anonReply || anonFault;
+        
         QName[] types = new QName[] {
             MetadataConstants.ADDRESSING_ASSERTION_QNAME,
             MetadataConstants.USING_ADDRESSING_2004_QNAME,
@@ -294,14 +329,44 @@ public class MAPAggregator extends Abstr
         for (QName type : types) {
             assertAssertion(aim, type);
             if (type.equals(MetadataConstants.ADDRESSING_ASSERTION_QNAME)) {
-                if (anonymous) {
+                if (onlyAnonymous) {
                     assertAssertion(aim, MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME);
-                } else {
+                } else if (!hasAnonymous) {
                     assertAssertion(aim, MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME);
                 }        
+            } else if (type.equals(MetadataConstants.ADDRESSING_ASSERTION_QNAME_0705)) {
+                if (onlyAnonymous) {
+                    assertAssertion(aim, MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME_0705);
+                } else if (!hasAnonymous) {
+                    assertAssertion(aim, MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME_0705);
+                }        
+            }
+        }
+        if (!MessageUtils.isRequestor(message) && !MessageUtils.isOutbound(message)) {
+            //need to throw an appropriate fault for these
+            Collection<AssertionInfo> aicNonAnon
+                = aim.getAssertionInfo(MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME);
+            Collection<AssertionInfo> aicNonAnon2
+                = aim.getAssertionInfo(MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME_0705);
+            Collection<AssertionInfo> aicAnon
+                = aim.getAssertionInfo(MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME);
+            Collection<AssertionInfo> aicAnon2
+                = aim.getAssertionInfo(MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME_0705);
+            boolean hasAnon = (aicAnon != null && !aicAnon.isEmpty()) 
+                        || (aicAnon2 != null && !aicAnon2.isEmpty());
+            boolean hasNonAnon = (aicNonAnon != null && !aicNonAnon.isEmpty()) 
+                        || (aicNonAnon2 != null && !aicNonAnon2.isEmpty());
+                
+            if (hasAnonymous && hasNonAnon && !hasAnon) {
+                throw new SoapFault("Found anonymous address but non-anonymous required",
+                                    new QName(Names.WSA_NAMESPACE_NAME,
+                                              "OnlyNonAnonymousAddressSupported"));
+            } else if (!onlyAnonymous && !hasNonAnon && hasAnon) {
+                throw new SoapFault("Found non-anonymous address but only anonymous supported",
+                                    new QName(Names.WSA_NAMESPACE_NAME,
+                                              "OnlyAnonymousAddressSupported"));
             }
         }
-        
         
     }
 
@@ -343,21 +408,39 @@ public class MAPAggregator extends Abstr
                 // request/response MAPs must be aggregated
                 aggregate(message, isFault);
             }
+            AddressingPropertiesImpl theMaps = 
+                ContextUtils.retrieveMAPs(message, false, ContextUtils.isOutbound(message));
+            if (null != theMaps && ContextUtils.isRequestor(message)) {            
+                assertAddressing(message, 
+                                 theMaps.getReplyTo(),
+                                 theMaps.getFaultTo());
+            }
         } else if (!ContextUtils.isRequestor(message)) {            
             //responder validates incoming MAPs
             AddressingPropertiesImpl maps = getMAPs(message, false, false);
+            if (maps != null) {
+                assertAddressing(message, 
+                                 maps.getReplyTo(),
+                                 maps.getFaultTo());
+            }
             boolean isOneway = message.getExchange().isOneWay();
             if (null == maps && !addressingRequired) {
                 return false;
             }
             continueProcessing = validateIncomingMAPs(maps, message);
             if (maps != null) {
+                AddressingPropertiesImpl theMaps = 
+                    ContextUtils.retrieveMAPs(message, false, ContextUtils.isOutbound(message));
+                if (null != theMaps) {            
+                    assertAddressing(message, theMaps.getReplyTo(), theMaps.getFaultTo());
+                }
+
                 if (isOneway
                     || !ContextUtils.isGenericAddress(maps.getReplyTo())) {
                     ContextUtils.rebaseResponse(maps.getReplyTo(),
                                                 maps,
                                                 message);
-                }
+                } 
                 if (!isOneway) {
                     // ensure the inbound MAPs are available in both the full & fault
                     // response messages (used to determine relatesTo etc.)
@@ -377,11 +460,12 @@ public class MAPAggregator extends Abstr
                                     new QName(Names.WSA_NAMESPACE_NAME,
                                               ContextUtils.retrieveMAPFaultName(message)));
             }
-        }
-        AddressingPropertiesImpl theMaps = 
-            ContextUtils.retrieveMAPs(message, false, ContextUtils.isOutbound(message));
-        if (null != theMaps) {            
-            assertAddressing(message, ContextUtils.isGenericAddress(theMaps.getReplyTo()));
+        } else {
+            AddressingPropertiesImpl theMaps = 
+                ContextUtils.retrieveMAPs(message, false, ContextUtils.isOutbound(message));
+            if (null != theMaps) {            
+                assertAddressing(message, theMaps.getReplyTo(), theMaps.getFaultTo());
+            }
         }
         return continueProcessing;
     }

Modified: cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_disable/AddNumberImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_disable/AddNumberImpl.java?rev=948155&r1=948154&r2=948155&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_disable/AddNumberImpl.java (original)
+++ cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_disable/AddNumberImpl.java Tue May 25 18:32:14 2010
@@ -35,6 +35,7 @@ import org.apache.cxf.systest.ws.addr_fe
 
 @Addressing(enabled = false)
 @WebService(serviceName = "AddNumbersService",
+            portName = "AddNumbersPort",
             targetNamespace = "http://apache.org/cxf/systest/ws/addr_feature/")
 public class AddNumberImpl implements AddNumbersPortType {
     public int addNumbers(int number1, int number2) throws AddNumbersFault_Exception {

Modified: cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/AddNumberImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/AddNumberImpl.java?rev=948155&r1=948154&r2=948155&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/AddNumberImpl.java (original)
+++ cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/AddNumberImpl.java Tue May 25 18:32:14 2010
@@ -32,8 +32,7 @@ import org.apache.cxf.systest.ws.addr_fe
 
 // Jax-WS 2.1 WS-Addressing FromWsdl
 
-@WebService(serviceName = "AddNumbersService",
-            targetNamespace = "http://apache.org/cxf/systest/ws/addr_feature/")
+@WebService()
 public class AddNumberImpl implements AddNumbersPortType {
     public int addNumbers(int number1, int number2) throws AddNumbersFault_Exception {
         return execute(number1, number2);

Modified: cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/Server.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/Server.java?rev=948155&r1=948154&r2=948155&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/Server.java (original)
+++ cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/Server.java Tue May 25 18:32:14 2010
@@ -20,18 +20,60 @@
 package org.apache.cxf.systest.ws.addr_fromwsdl;
 
 
+import javax.jws.WebService;
+
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.jaxws.EndpointImpl;
+import org.apache.cxf.systest.ws.addr_feature.AddNumbersPortType;
 import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
 import org.apache.cxf.ws.addressing.WSAddressingFeature;
 
 public class Server extends AbstractBusTestServerBase {
-
+    @WebService(serviceName = "AddNumbersService",
+                portName = "AddNumbersPort",
+                targetNamespace = "http://apache.org/cxf/systest/ws/addr_feature/")
+    public static class AddNumberReg extends AddNumberImpl implements AddNumbersPortType {
+        
+    }
+    @WebService(serviceName = "AddNumbersService",
+                portName = "AddNumbersNonAnonPort",
+                targetNamespace = "http://apache.org/cxf/systest/ws/addr_feature/")
+    public static class AddNumberNonAnon extends AddNumberImpl implements AddNumbersPortType {
+        
+    }
+    @WebService(serviceName = "AddNumbersService",
+                portName = "AddNumbersOnlyAnonPort",
+                targetNamespace = "http://apache.org/cxf/systest/ws/addr_feature/")
+    public static class AddNumberOnlyAnon extends AddNumberImpl implements AddNumbersPortType {
+        
+    }
     protected void run()  {    
-        Object implementor = new AddNumberImpl();
+        Object implementor = new AddNumberReg();
         String address = "http://localhost:9091/jaxws/add";
+        EndpointImpl ep;
+        ep = new EndpointImpl(BusFactory.getThreadDefaultBus(), 
+                                           implementor, 
+                                           null, 
+                                           getWsdl());
+
+        ep.getFeatures().add(new WSAddressingFeature());
+        ep.publish(address);
+
+        implementor = new AddNumberNonAnon();
+        address = "http://localhost:9091/jaxws/addNonAnon";
+        
+        ep = new EndpointImpl(BusFactory.getThreadDefaultBus(), 
+                                           implementor, 
+                                           null, 
+                                           getWsdl());
+
+        ep.getFeatures().add(new WSAddressingFeature());
+        ep.publish(address);
+
+        implementor = new AddNumberOnlyAnon();
+        address = "http://localhost:9091/jaxws/addAnon";
         
-        EndpointImpl ep = new EndpointImpl(BusFactory.getThreadDefaultBus(), 
+        ep = new EndpointImpl(BusFactory.getThreadDefaultBus(), 
                                            implementor, 
                                            null, 
                                            getWsdl());

Modified: cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/WSAFromWSDLTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/WSAFromWSDLTest.java?rev=948155&r1=948154&r2=948155&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/WSAFromWSDLTest.java (original)
+++ cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/WSAFromWSDLTest.java Tue May 25 18:32:14 2010
@@ -22,12 +22,18 @@ package org.apache.cxf.systest.ws.addr_f
 import java.io.ByteArrayOutputStream;
 import java.net.URL;
 import javax.xml.namespace.QName;
+import javax.xml.ws.BindingProvider;
 import javax.xml.ws.soap.AddressingFeature;
+import javax.xml.ws.soap.SOAPFaultException;
 
 import org.apache.cxf.systest.ws.AbstractWSATestBase;
 import org.apache.cxf.systest.ws.addr_feature.AddNumbersFault_Exception;
 import org.apache.cxf.systest.ws.addr_feature.AddNumbersPortType;
 import org.apache.cxf.systest.ws.addr_feature.AddNumbersService;
+import org.apache.cxf.ws.addressing.AddressingPropertiesImpl;
+import org.apache.cxf.ws.addressing.AttributedURIType;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -145,7 +151,43 @@ public class WSAFromWSDLTest extends Abs
         assertTrue(output.toString().indexOf(expectedOut) != -1);
         assertTrue(input.toString().indexOf(expectedIn) != -1);
     }
+    
+    @Test
+    public void testAnonToNonAnon() throws Exception {
+        AddNumbersPortType port = getPort();
+        ((BindingProvider)port).getRequestContext()
+            .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
+                 "http://localhost:9091/jaxws/addNonAnon");
+        try {
+            port.addNumbers3(-1, 2);
+        } catch (SOAPFaultException e) {
+            assertTrue(e.getFault().getFaultCode().contains("OnlyNonAnonymousAddressSupported"));
+        }
+    } 
+    @Test
+    public void testNonAnonToAnon() throws Exception {
+        AddNumbersPortType port = getPort();
+        ((BindingProvider)port).getRequestContext()
+            .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
+                 "http://localhost:9091/jaxws/addAnon");
+        
+        AddressingPropertiesImpl maps = new AddressingPropertiesImpl();
+        EndpointReferenceType ref = new EndpointReferenceType();
+        AttributedURIType add = new AttributedURIType();
+        add.setValue("http://localhost:9095/not/a/real/url");
+        ref.setAddress(add);
+        maps.setReplyTo(ref);
+        maps.setFaultTo(ref);
 
+        ((BindingProvider)port).getRequestContext()
+            .put("javax.xml.ws.addressing.context", maps);
+
+        try {
+            port.addNumbers3(-1, 2);
+        } catch (SOAPFaultException e) {
+            assertTrue(e.getFault().getFaultCode().contains("OnlyAnonymousAddressSupported"));
+        }
+    }
     private AddNumbersPortType getPort() {
         URL wsdl = getClass().getResource("/wsdl_systest_wsspec/add_numbers.wsdl");
         assertNotNull("WSDL is null", wsdl);

Modified: cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/add_numbers.wsdl
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/add_numbers.wsdl?rev=948155&r1=948154&r2=948155&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/add_numbers.wsdl (original)
+++ cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/add_numbers.wsdl Tue May 25 18:32:14 2010
@@ -1,144 +1,251 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-<definitions name="AddNumbers"  
-	     targetNamespace="http://apache.org/cxf/systest/ws/addr_feature/" 
-	     xmlns:tns="http://apache.org/cxf/systest/ws/addr_feature/"
-	     xmlns="http://schemas.xmlsoap.org/wsdl/" 
-	     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-	     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
-	     xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
-	     xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">
-    <types>
-	<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" 
-		    elementFormDefault="qualified" 
-		    targetNamespace="http://apache.org/cxf/systest/ws/addr_feature/">
-	    <complexType name="addNumbersResponse">
-		<sequence>
-		    <element name="return" type="xsd:int" />
-		</sequence>
-	    </complexType>
-	    <element name="addNumbersResponse" type="tns:addNumbersResponse" />
-	    <element name="addNumbers2Response" type="tns:addNumbersResponse" />
-	    <element name="addNumbers3Response" type="tns:addNumbersResponse" />
-
-	    <complexType name="addNumbers">
-		<sequence>
-		    <element name="number1" type="xsd:int" />
-		    <element name="number2" type="xsd:int" />
-		</sequence>
-	    </complexType>
-	    <element name="addNumbers" type="tns:addNumbers" />
-	    <element name="addNumbers2" type="tns:addNumbers" />
-	    <element name="addNumbers3" type="tns:addNumbers" />
-
-	    <element name="AddNumbersFault" type="tns:AddNumbersFault" />
-	    <complexType name="AddNumbersFault">
-		<sequence>
-		    <element name="detail" type="xsd:string" />
-		    <element name="message" type="xsd:string" />
-		</sequence>
-	    </complexType>
-	</xsd:schema>
-    </types>
-    <message name="addNumbers">
-	<part name="parameters" element="tns:addNumbers" />
-    </message>
-    <message name="addNumbersResponse">
-	<part name="result" element="tns:addNumbersResponse" />
-    </message>
-    <message name="addNumbersFault">
-	<part name="AddNumbersFault" element="tns:AddNumbersFault" />
-    </message>
-    <message name="addNumbers2">
-	<part name="parameters" element="tns:addNumbers2" />
-    </message>
-    <message name="addNumbers2Response">
-	<part name="result" element="tns:addNumbers2Response" />
-    </message>
-    <message name="addNumbers3">
-	<part name="parameters" element="tns:addNumbers3" />
-    </message>
-    <message name="addNumbers3Response">
-	<part name="result" element="tns:addNumbers3Response" />
-    </message>
-    <portType name="AddNumbersPortType">
-	<operation name="addNumbers">
-	    <input message="tns:addNumbers"/>
-	    <output message="tns:addNumbersResponse"/>
-	    <fault name="addNumbersFault" message="tns:addNumbersFault"/>
-	</operation>
-	<operation name="addNumbers2">
-	    <input message="tns:addNumbers2" name="add2In"/>
-	    <output message="tns:addNumbers2Response" name="add2Out"/>
-<!-- 	    <fault name="addNumbersFault" message="tns:addNumbersFault"/> -->
-	</operation>
-	<operation name="addNumbers3">
-	    <input message="tns:addNumbers3" wsam:Action="3in"/>
-	    <output message="tns:addNumbers3Response" wsam:Action="3out"/>
-	    <fault name="addNumbersFault" message="tns:addNumbersFault" wsam:Action="3fault"/>
-	</operation>
-    </portType>
-    <binding name="AddNumbersBinding" type="tns:AddNumbersPortType">
-	<wsaw:UsingAddressing wsdl:required="false" />
-	<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
-	<operation name="addNumbers">
-	    <soap:operation soapAction="" />
-	    <input>
-		<soap:body use="literal" />
-	    </input>
-	    <output>
-		<soap:body use="literal" />
-	    </output>
-	    <fault name="addNumbersFault">
-		<soap:fault name="addNumbersFault" use="literal" />
-	    </fault>
-	</operation>
-	<operation name="addNumbers2">
-	    <soap:operation soapAction="" />
-	    <input>
-		<soap:body use="literal" />
-	    </input>
-	    <output>
-		<soap:body use="literal" />
-	    </output>
-<!-- 	    <fault name="addNumbersFault"> -->
-<!-- 		<soap:fault name="addNumbersFault" use="literal" /> -->
-<!-- 	    </fault> -->
-	</operation>
-	<operation name="addNumbers3">
-	    <soap:operation soapAction="" />
-	    <input>
-		<soap:body use="literal" />
-	    </input>
-	    <output>
-		<soap:body use="literal" />
-	    </output>
-	    <fault name="addNumbersFault">
-		<soap:fault name="addNumbersFault" use="literal" />
-	    </fault>
-	</operation>
-    </binding>
-    <service name="AddNumbersService">
-	<port name="AddNumbersPort" binding="tns:AddNumbersBinding">
-	    <soap:address location="http://localhost:9091/jaxws/add"/>
-	</port>
-    </service>
+	<!--
+		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.
+	-->
+<definitions name="AddNumbers"
+	targetNamespace="http://apache.org/cxf/systest/ws/addr_feature/"
+	xmlns:tns="http://apache.org/cxf/systest/ws/addr_feature/" xmlns="http://schemas.xmlsoap.org/wsdl/"
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
+	xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
+	xmlns:wsp="http://www.w3.org/ns/ws-policy">
+	<types>
+		<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
+			elementFormDefault="qualified" targetNamespace="http://apache.org/cxf/systest/ws/addr_feature/">
+			<complexType name="addNumbersResponse">
+				<sequence>
+					<element name="return" type="xsd:int" />
+				</sequence>
+			</complexType>
+			<element name="addNumbersResponse" type="tns:addNumbersResponse" />
+			<element name="addNumbers2Response" type="tns:addNumbersResponse" />
+			<element name="addNumbers3Response" type="tns:addNumbersResponse" />
+
+			<complexType name="addNumbers">
+				<sequence>
+					<element name="number1" type="xsd:int" />
+					<element name="number2" type="xsd:int" />
+				</sequence>
+			</complexType>
+			<element name="addNumbers" type="tns:addNumbers" />
+			<element name="addNumbers2" type="tns:addNumbers" />
+			<element name="addNumbers3" type="tns:addNumbers" />
+
+			<element name="AddNumbersFault" type="tns:AddNumbersFault" />
+			<complexType name="AddNumbersFault">
+				<sequence>
+					<element name="detail" type="xsd:string" />
+					<element name="message" type="xsd:string" />
+				</sequence>
+			</complexType>
+		</xsd:schema>
+	</types>
+	<message name="addNumbers">
+		<part name="parameters" element="tns:addNumbers" />
+	</message>
+	<message name="addNumbersResponse">
+		<part name="result" element="tns:addNumbersResponse" />
+	</message>
+	<message name="addNumbersFault">
+		<part name="AddNumbersFault" element="tns:AddNumbersFault" />
+	</message>
+	<message name="addNumbers2">
+		<part name="parameters" element="tns:addNumbers2" />
+	</message>
+	<message name="addNumbers2Response">
+		<part name="result" element="tns:addNumbers2Response" />
+	</message>
+	<message name="addNumbers3">
+		<part name="parameters" element="tns:addNumbers3" />
+	</message>
+	<message name="addNumbers3Response">
+		<part name="result" element="tns:addNumbers3Response" />
+	</message>
+	<portType name="AddNumbersPortType">
+		<operation name="addNumbers">
+			<input message="tns:addNumbers" />
+			<output message="tns:addNumbersResponse" />
+			<fault name="addNumbersFault" message="tns:addNumbersFault" />
+		</operation>
+		<operation name="addNumbers2">
+			<input message="tns:addNumbers2" name="add2In" />
+			<output message="tns:addNumbers2Response" name="add2Out" />
+			<!--
+				<fault name="addNumbersFault" message="tns:addNumbersFault"/>
+			-->
+		</operation>
+		<operation name="addNumbers3">
+			<input message="tns:addNumbers3" wsam:Action="3in" />
+			<output message="tns:addNumbers3Response" wsam:Action="3out" />
+			<fault name="addNumbersFault" message="tns:addNumbersFault"
+				wsam:Action="3fault" />
+		</operation>
+	</portType>
+	<binding name="AddNumbersBinding" type="tns:AddNumbersPortType">
+		<wsaw:UsingAddressing wsdl:required="false" />
+		<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
+			style="document" />
+		<operation name="addNumbers">
+			<soap:operation soapAction="" />
+			<input>
+				<soap:body use="literal" />
+			</input>
+			<output>
+				<soap:body use="literal" />
+			</output>
+			<fault name="addNumbersFault">
+				<soap:fault name="addNumbersFault" use="literal" />
+			</fault>
+		</operation>
+		<operation name="addNumbers2">
+			<soap:operation soapAction="" />
+			<input>
+				<soap:body use="literal" />
+			</input>
+			<output>
+				<soap:body use="literal" />
+			</output>
+			<!-- 	    <fault name="addNumbersFault"> -->
+			<!-- 		<soap:fault name="addNumbersFault" use="literal" /> -->
+			<!-- 	    </fault> -->
+		</operation>
+		<operation name="addNumbers3">
+			<soap:operation soapAction="" />
+			<input>
+				<soap:body use="literal" />
+			</input>
+			<output>
+				<soap:body use="literal" />
+			</output>
+			<fault name="addNumbersFault">
+				<soap:fault name="addNumbersFault" use="literal" />
+			</fault>
+		</operation>
+	</binding>
+	<binding name="AddNumbersBindingOnlyAnon" type="tns:AddNumbersPortType">
+		<wsaw:UsingAddressing wsdl:required="false" />
+		<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
+			style="document" />
+	    <wsp:PolicyReference URI="#AddNumbersOnlyAnon_WSAM_Addressing_Policy"/>
+		<operation name="addNumbers">
+			<soap:operation soapAction="" />
+			<input>
+				<soap:body use="literal" />
+			</input>
+			<output>
+				<soap:body use="literal" />
+			</output>
+			<fault name="addNumbersFault">
+				<soap:fault name="addNumbersFault" use="literal" />
+			</fault>
+		</operation>
+		<operation name="addNumbers2">
+			<soap:operation soapAction="" />
+			<input>
+				<soap:body use="literal" />
+			</input>
+			<output>
+				<soap:body use="literal" />
+			</output>
+			<!-- 	    <fault name="addNumbersFault"> -->
+			<!-- 		<soap:fault name="addNumbersFault" use="literal" /> -->
+			<!-- 	    </fault> -->
+		</operation>
+		<operation name="addNumbers3">
+			<soap:operation soapAction="" />
+			<input>
+				<soap:body use="literal" />
+			</input>
+			<output>
+				<soap:body use="literal" />
+			</output>
+			<fault name="addNumbersFault">
+				<soap:fault name="addNumbersFault" use="literal" />
+			</fault>
+		</operation>
+	</binding>
+	<binding name="AddNumbersBindingNonAnon" type="tns:AddNumbersPortType">
+		<wsaw:UsingAddressing wsdl:required="false" />
+		<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
+			style="document" />
+	    <wsp:PolicyReference URI="#AddNumbersNonAnon_WSAM_Addressing_Policy"/>
+		<operation name="addNumbers">
+			<soap:operation soapAction="" />
+			<input>
+				<soap:body use="literal" />
+			</input>
+			<output>
+				<soap:body use="literal" />
+			</output>
+			<fault name="addNumbersFault">
+				<soap:fault name="addNumbersFault" use="literal" />
+			</fault>
+		</operation>
+		<operation name="addNumbers2">
+			<soap:operation soapAction="" />
+			<input>
+				<soap:body use="literal" />
+			</input>
+			<output>
+				<soap:body use="literal" />
+			</output>
+			<!-- 	    <fault name="addNumbersFault"> -->
+			<!-- 		<soap:fault name="addNumbersFault" use="literal" /> -->
+			<!-- 	    </fault> -->
+		</operation>
+		<operation name="addNumbers3">
+			<soap:operation soapAction="" />
+			<input>
+				<soap:body use="literal" />
+			</input>
+			<output>
+				<soap:body use="literal" />
+			</output>
+			<fault name="addNumbersFault">
+				<soap:fault name="addNumbersFault" use="literal" />
+			</fault>
+		</operation>
+	</binding>
+	<service name="AddNumbersService">
+		<port name="AddNumbersPort" binding="tns:AddNumbersBinding">
+			<soap:address location="http://localhost:9091/jaxws/add" />
+		</port>
+		<port name="AddNumbersOnlyAnonPort" binding="tns:AddNumbersBindingOnlyAnon">
+			<soap:address location="http://localhost:9091/jaxws/addAnon" />
+		</port>
+		<port name="AddNumbersNonAnonPort" binding="tns:AddNumbersBindingNonAnon">
+			<soap:address location="http://localhost:9091/jaxws/addNonAnon" />
+		</port>
+	</service>
+
+	<wsp:Policy wsu:Id="AddNumbersNonAnon_WSAM_Addressing_Policy"
+		xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
+		<wsam:Addressing>
+			<wsp:Policy>
+				<wsam:NonAnonymousResponses />
+			</wsp:Policy>
+		</wsam:Addressing>
+	</wsp:Policy>
+
+	<wsp:Policy wsu:Id="AddNumbersOnlyAnon_WSAM_Addressing_Policy"
+		xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
+		<wsam:Addressing>
+			<wsp:Policy>
+				<wsam:AnonymousResponses />
+			</wsp:Policy>
+		</wsam:Addressing>
+	</wsp:Policy>
+
 </definitions>