You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by em...@apache.org on 2013/05/29 10:02:29 UTC
svn commit: r1487389 - in /cxf/trunk:
rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/
systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/
systests/ws-specs/src/test/resources/wsdl_systest_soap12/
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