Author: ema
Date: Wed May 29 08:02:29 2013
New Revision: 1487389

URL: http://svn.apache.org/r1487389
Log:
[CXF-5405]:UndeclaredThrowableException thrown in the client side when server 
responses with wsa:OnlyNonAnonymousAddressSupported soap12 version fault message

Added:
    cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_soap12/
    
cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_soap12/add_numbers_soap12.wsdl
   (with props)
Modified:
    
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/MAPAggregatorImpl.java
    
cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/Server.java
    
cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/WSAClientServerTest.java

Modified: 
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/MAPAggregatorImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/MAPAggregatorImpl.java?rev=1487389&r1=1487388&r2=1487389&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/MAPAggregatorImpl.java
 (original)
+++ 
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/MAPAggregatorImpl.java
 Wed May 29 08:02:29 2013
@@ -35,6 +35,8 @@ import javax.xml.namespace.QName;
 import javax.xml.ws.WebFault;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.binding.soap.Soap12;
+import org.apache.cxf.binding.soap.SoapBinding;
 import org.apache.cxf.binding.soap.SoapBindingConstants;
 import org.apache.cxf.binding.soap.SoapFault;
 import org.apache.cxf.binding.soap.interceptor.SoapActionInInterceptor;
@@ -378,14 +380,30 @@ public class MAPAggregatorImpl extends M
                 
             if (hasAnonymous && hasNonAnon && !hasAnon) {
                 message.put(FaultMode.class, 
FaultMode.UNCHECKED_APPLICATION_FAULT);
+                if (isSOAP12(message)) {
+                    SoapFault soap12Fault = new SoapFault(
+                                                          "Found anonymous 
address but non-anonymous required",
+                                                          
Soap12.getInstance().getSender());
+                    soap12Fault.addSubCode(new QName(Names.WSA_NAMESPACE_NAME,
+                                                     
"OnlyNonAnonymousAddressSupported"));
+                    throw soap12Fault;
+                }
+
                 throw new SoapFault("Found anonymous address but non-anonymous 
required",
-                                    new QName(Names.WSA_NAMESPACE_NAME,
-                                              
"OnlyNonAnonymousAddressSupported"));
+                                    new QName(Names.WSA_NAMESPACE_NAME, 
"OnlyNonAnonymousAddressSupported"));
             } else if (!onlyAnonymous && !hasNonAnon && hasAnon) {
                 message.put(FaultMode.class, 
FaultMode.UNCHECKED_APPLICATION_FAULT);
+                if (isSOAP12(message)) {
+                    SoapFault soap12Fault = new SoapFault(
+                                                          "Found non-anonymous 
address but only anonymous supported",
+                                                          
Soap12.getInstance().getSender());
+                    soap12Fault.addSubCode(new QName(Names.WSA_NAMESPACE_NAME,
+                                                     
"OnlyAnonymousAddressSupported"));
+                    throw soap12Fault;
+                }
+
                 throw new SoapFault("Found non-anonymous address but only 
anonymous supported",
-                                    new QName(Names.WSA_NAMESPACE_NAME,
-                                              
"OnlyAnonymousAddressSupported"));
+                                    new QName(Names.WSA_NAMESPACE_NAME, 
"OnlyAnonymousAddressSupported"));
             }
         }
         
@@ -487,6 +505,13 @@ public class MAPAggregatorImpl extends M
                 // must be aggregated
                 //isFault = true;
                 //aggregate(message, isFault);
+                if (isSOAP12(message)) {
+                    SoapFault soap12Fault = new 
SoapFault(ContextUtils.retrieveMAPFaultReason(message),
+                                                          
Soap12.getInstance().getSender());
+                    soap12Fault.setSubCode(new QName(Names.WSA_NAMESPACE_NAME, 
ContextUtils
+                        .retrieveMAPFaultName(message)));
+                    throw soap12Fault;
+                }
                 throw new 
SoapFault(ContextUtils.retrieveMAPFaultReason(message),
                                     new QName(Names.WSA_NAMESPACE_NAME,
                                               
ContextUtils.retrieveMAPFaultName(message)));
@@ -1205,5 +1230,15 @@ public class MAPAggregatorImpl extends M
                                           Names.WSA_NONE_ADDRESS));
         }
     }
+    
+    private boolean isSOAP12(Message message) {
+        if (message.getExchange().getBinding() instanceof SoapBinding) {
+            SoapBinding binding = 
(SoapBinding)message.getExchange().getBinding();
+            if (binding.getSoapVersion() == Soap12.getInstance()) {
+                return true;
+            }
+        }
+        return false;
+    }
 }
 

Modified: 
cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/Server.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/Server.java?rev=1487389&r1=1487388&r2=1487389&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/Server.java
 (original)
+++ 
cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/Server.java
 Wed May 29 08:02:29 2013
@@ -19,15 +19,18 @@
 
 package org.apache.cxf.systest.ws.addr_feature;
 
+import javax.xml.namespace.QName;
 import javax.xml.ws.Endpoint;
 
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.jaxws.EndpointImpl;
 import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
+import org.apache.cxf.testutil.common.TestUtil;
 import org.apache.cxf.ws.addressing.WSAddressingFeature;
 
 public class Server extends AbstractBusTestServerBase {
-    static final String PORT = allocatePort(Server.class);
+    public static final String PORT = TestUtil.getPortNumber(Server.class, 1);
+    public static final String PORT2 = TestUtil.getPortNumber(Server.class, 2);
     EndpointImpl ep;
     protected void run()  { 
         setBus(BusFactory.getDefaultBus());
@@ -38,6 +41,20 @@ public class Server extends AbstractBusT
         ep = (EndpointImpl) Endpoint.create(implementor);
         ep.getFeatures().add(new WSAddressingFeature());
         ep.publish(address);
+        
+        
+        ep = new EndpointImpl(BusFactory.getThreadDefaultBus(), 
+                                           implementor, 
+                                           null, 
+                                           getWsdl());
+        ep.setServiceName(new 
QName("http://apache.org/cxf/systest/ws/addr_feature/";, "AddNumbersService"));
+        ep.setEndpointName(new 
QName("http://apache.org/cxf/systest/ws/addr_feature/";,
+                                     "AddNumbersNonAnonPort"));
+        String address12 = "http://localhost:"; + PORT2 + "/jaxws/soap12/add";  
     
+        ep.getFeatures().add(new WSAddressingFeature());
+        ep.publish(address12);
+        
+        
     }
     
     public void tearDown() {
@@ -56,4 +73,13 @@ public class Server extends AbstractBusT
             System.out.println("done!");
         }
     }
+    private String getWsdl() {
+        try {
+            java.net.URL wsdl = 
getClass().getResource("/wsdl_systest_soap12/add_numbers_soap12.wsdl");
+            return wsdl.toString();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }

Modified: 
cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/WSAClientServerTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/WSAClientServerTest.java?rev=1487389&r1=1487388&r2=1487389&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/WSAClientServerTest.java
 (original)
+++ 
cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/WSAClientServerTest.java
 Wed May 29 08:02:29 2013
@@ -41,7 +41,8 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class WSAClientServerTest extends AbstractWSATestBase {
-    static final String PORT = allocatePort(Server.class);
+    static final String PORT = Server.PORT;
+    static final String PORT2 = Server.PORT2;
 
     private final QName serviceName = new 
QName("http://apache.org/cxf/systest/ws/addr_feature/";,
                                                 "AddNumbersService");
@@ -144,6 +145,42 @@ public class WSAClientServerTest extends
         }         
     }
     
+    
+    @Test
+    public void testNonAnonSoap12Fault() throws Exception {
+        try {
+            AddNumbersPortType port = getNonAnonPort();
+            ((BindingProvider)port).getRequestContext()
+                .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
+                     "http://localhost:"; + PORT2 + "/jaxws/soap12/add");
+            port.addNumbers(1, 2);
+        } catch (SOAPFaultException e) {
+            assertTrue("expected non-anonymous required message",
+                       e.getMessage().contains("Found anonymous address but 
non-anonymous required"));
+            assertTrue("expected sender faultCode", 
e.getFault().getFaultCode().contains("Sender"));
+            assertTrue("expected OnlyNonAnonymousAddressSupported fault 
subcode",
+                       e.getFault()
+                           .getFaultSubcodes()
+                           .next()
+                           .toString()
+                           
.contains("{http://www.w3.org/2005/08/addressing}OnlyNonAnonymousAddressSupported";));
+
+        }
+
+    }
+
+  
+    private AddNumbersPortType getNonAnonPort() {
+        URL wsdl = 
getClass().getResource("/wsdl_systest_soap12/add_numbers_soap12.wsdl");
+        assertNotNull("WSDL is null", wsdl);
+
+        AddNumbersService service = new AddNumbersService(wsdl, serviceName);
+        assertNotNull("Service is null ", service);
+        return service.getAddNumbersNonAnonPort(new AddressingFeature());
+    }
+    
+    
+    
     private AddNumbersPortType getPort() throws Exception {
         URL wsdl = 
getClass().getResource("/wsdl_systest_wsspec/add_numbers.wsdl");
         assertNotNull("WSDL is null", wsdl);

Added: 
cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_soap12/add_numbers_soap12.wsdl
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_soap12/add_numbers_soap12.wsdl?rev=1487389&view=auto
==============================================================================
--- 
cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_soap12/add_numbers_soap12.wsdl
 (added)
+++ 
cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_soap12/add_numbers_soap12.wsdl
 Wed May 29 08:02:29 2013
@@ -0,0 +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:soap12="http://schemas.xmlsoap.org/wsdl/soap12/";
+       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" />
+               <soap12:binding transport="http://schemas.xmlsoap.org/soap/http";
+                       style="document" />
+               <operation name="addNumbers">
+                       <soap12:operation soapAction="" />
+                       <input>
+                               <soap12:body use="literal" />
+                       </input>
+                       <output>
+                               <soap12:body use="literal" />
+                       </output>
+                       <fault name="addNumbersFault">
+                               <soap12:fault name="addNumbersFault" 
use="literal" />
+                       </fault>
+               </operation>
+               <operation name="addNumbers2">
+                       <soap12:operation soapAction="" />
+                       <input>
+                               <soap12:body use="literal" />
+                       </input>
+                       <output>
+                               <soap12:body use="literal" />
+                       </output>
+                       <!--        <fault name="addNumbersFault"> -->
+                       <!--            <soap12:fault name="addNumbersFault" 
use="literal" /> -->
+                       <!--        </fault> -->
+               </operation>
+               <operation name="addNumbers3">
+                       <soap12:operation soapAction="3in" />
+                       <input>
+                               <soap12:body use="literal" />
+                       </input>
+                       <output>
+                               <soap12:body use="literal" />
+                       </output>
+                       <fault name="addNumbersFault">
+                               <soap12:fault name="addNumbersFault" 
use="literal" />
+                       </fault>
+               </operation>
+       </binding>
+       <binding name="AddNumbersBindingOnlyAnon" type="tns:AddNumbersPortType">
+               <wsaw:UsingAddressing wsdl:required="false" />
+               <soap12:binding transport="http://schemas.xmlsoap.org/soap/http";
+                       style="document" />
+           <wsp:PolicyReference 
URI="#AddNumbersOnlyAnon_WSAM_Addressing_Policy"/>
+               <operation name="addNumbers">
+                       <soap12:operation soapAction="" />
+                       <input>
+                               <soap12:body use="literal" />
+                       </input>
+                       <output>
+                               <soap12:body use="literal" />
+                       </output>
+                       <fault name="addNumbersFault">
+                               <soap12:fault name="addNumbersFault" 
use="literal" />
+                       </fault>
+               </operation>
+               <operation name="addNumbers2">
+                       <soap12:operation soapAction="" />
+                       <input>
+                               <soap12:body use="literal" />
+                       </input>
+                       <output>
+                               <soap12:body use="literal" />
+                       </output>
+                       <!--        <fault name="addNumbersFault"> -->
+                       <!--            <soap12:fault name="addNumbersFault" 
use="literal" /> -->
+                       <!--        </fault> -->
+               </operation>
+               <operation name="addNumbers3">
+                       <soap12:operation soapAction="3in" />
+                       <input>
+                               <soap12:body use="literal" />
+                       </input>
+                       <output>
+                               <soap12:body use="literal" />
+                       </output>
+                       <fault name="addNumbersFault">
+                               <soap12:fault name="addNumbersFault" 
use="literal" />
+                       </fault>
+               </operation>
+       </binding>
+       <binding name="AddNumbersBindingNonAnon" type="tns:AddNumbersPortType">
+               <wsaw:UsingAddressing wsdl:required="false" />
+               <soap12:binding transport="http://schemas.xmlsoap.org/soap/http";
+                       style="document" />
+           <wsp:PolicyReference 
URI="#AddNumbersNonAnon_WSAM_Addressing_Policy"/>
+               <operation name="addNumbers">
+                       <soap12:operation soapAction="" />
+                       <input>
+                               <soap12:body use="literal" />
+                       </input>
+                       <output>
+                               <soap12:body use="literal" />
+                       </output>
+                       <fault name="addNumbersFault">
+                               <soap12:fault name="addNumbersFault" 
use="literal" />
+                       </fault>
+               </operation>
+               <operation name="addNumbers2">
+                       <soap12:operation soapAction="" />
+                       <input>
+                               <soap12:body use="literal" />
+                       </input>
+                       <output>
+                               <soap12:body use="literal" />
+                       </output>
+                       <!--        <fault name="addNumbersFault"> -->
+                       <!--            <soap12:fault name="addNumbersFault" 
use="literal" /> -->
+                       <!--        </fault> -->
+               </operation>
+               <operation name="addNumbers3">
+                       <soap12:operation soapAction="3in" />
+                       <input>
+                               <soap12:body use="literal" />
+                       </input>
+                       <output>
+                               <soap12:body use="literal" />
+                       </output>
+                       <fault name="addNumbersFault">
+                               <soap12:fault name="addNumbersFault" 
use="literal" />
+                       </fault>
+               </operation>
+       </binding>
+       <service name="AddNumbersService">
+               <port name="AddNumbersPort" binding="tns:AddNumbersBinding">
+                       <soap12:address 
location="http://localhost:9091/jaxws/add"; />
+               </port>
+               <port name="AddNumbersOnlyAnonPort" 
binding="tns:AddNumbersBindingOnlyAnon">
+                       <soap12:address 
location="http://localhost:9091/jaxws/addAnon"; />
+               </port>
+               <port name="AddNumbersNonAnonPort" 
binding="tns:AddNumbersBindingNonAnon">
+                       <soap12: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>
\ No newline at end of file

Propchange: 
cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_soap12/add_numbers_soap12.wsdl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_soap12/add_numbers_soap12.wsdl
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: 
cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_soap12/add_numbers_soap12.wsdl
------------------------------------------------------------------------------
    svn:mime-type = text/xml


Reply via email to