Author: veithen
Date: Fri Aug 12 18:44:22 2011
New Revision: 1157211
URL: http://svn.apache.org/viewvc?rev=1157211&view=rev
Log:
AXIS2-5034: Implemented a fix for AXIS2-4533 that doesn't break the fault
processing logic in ADB.
Added:
axis/axis2/java/core/trunk/modules/kernel/test-resources/wsdl/faults.wsdl
(with props)
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/description/WSDL11ToAxisServiceBuilderTest.java
(with props)
Modified:
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java
Modified:
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java?rev=1157211&r1=1157210&r2=1157211&view=diff
==============================================================================
---
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java
(original)
+++
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java
Fri Aug 12 18:44:22 2011
@@ -115,6 +115,15 @@ public class WSDL11ToAxisServiceBuilder
public static final int COMPONENT_MESSAGE = 2;
public static final int COMPONENT_BINDING = 3;
+ /**
+ * Parameter used on {@link AxisMessage} objects to track the value of the
<tt>name</tt>
+ * attribute of the <tt>wsdl:fault</tt>. Note that this is more like a
workaround. The problem
+ * is that {@link AxisMessage} stores the faults as a simple list. A
better fix would be to
+ * replace that by a map with the fault name as key, similar to what
WSDL4J does (see
+ * {@link Operation#getFaults()}).
+ */
+ private static final String FAULT_NAME = "faultName";
+
protected static final Log log = LogFactory
.getLog(WSDL11ToAxisServiceBuilder.class);
private static final boolean isTraceEnabled = log.isTraceEnabled();
@@ -1182,7 +1191,7 @@ public class WSDL11ToAxisServiceBuilder
AxisMessage tempMessage;
for (int i = 0; i < faultMessages.size(); i++) {
tempMessage = (AxisMessage) faultMessages.get(i);
- if (name.equals(tempMessage.getName())) {
+ if (name.equals(tempMessage.getParameterValue(FAULT_NAME))) {
return tempMessage;
}
@@ -1550,10 +1559,11 @@ public class WSDL11ToAxisServiceBuilder
Fault fault = (Fault) faults.get(faultKeyIterator.next());
AxisMessage axisFaultMessage = new AxisMessage();
addDocumentation(axisFaultMessage,fault.getDocumentationElement());
+ axisFaultMessage.addParameter(FAULT_NAME, fault.getName());
Message faultMessage = fault.getMessage();
if (null != faultMessage) {
axisFaultMessage
- .setName(fault.getName());
+ .setName(faultMessage.getQName().getLocalPart());
copyExtensibleElements(faultMessage.getExtensibilityElements(),
dif, axisFaultMessage,
PORT_TYPE_OPERATION_FAULT);
Added: axis/axis2/java/core/trunk/modules/kernel/test-resources/wsdl/faults.wsdl
URL:
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/test-resources/wsdl/faults.wsdl?rev=1157211&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/test-resources/wsdl/faults.wsdl
(added)
+++ axis/axis2/java/core/trunk/modules/kernel/test-resources/wsdl/faults.wsdl
Fri Aug 12 18:44:22 2011
@@ -0,0 +1,91 @@
+<?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="TestWS"
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:tns="urn:test"
+ targetNamespace="urn:test">
+
+ <types>
+ <xs:schema targetNamespace="urn:test">
+ <xs:element name="input">
+ <xs:complexType>
+ <xs:sequence/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="output">
+ <xs:complexType>
+ <xs:sequence/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="error">
+ <xs:complexType>
+ <xs:sequence/>
+ </xs:complexType>
+ </xs:element>
+ </xs:schema>
+ </types>
+
+ <message name="inputMessage">
+ <part name="parameters" element="tns:input" />
+ </message>
+ <message name="outputMessage">
+ <part name="reponse" element="tns:output" />
+ </message>
+ <message name="errorMessage">
+ <part name="fault" element="tns:error" />
+ </message>
+
+ <portType name="TestPortType">
+ <operation name="test">
+ <input message="tns:inputMessage" />
+ <output message="tns:outputMessage" />
+ <fault message="tns:errorMessage" name="error1" />
+ <fault message="tns:errorMessage" name="error2" />
+ </operation>
+ </portType>
+
+ <binding name="TestSOAP11Binding" type="tns:TestPortType">
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document" />
+ <operation name="test">
+ <soap:operation soapAction="urn:test" />
+ <input>
+ <soap:body use="literal" />
+ </input>
+ <output>
+ <soap:body use="literal" />
+ </output>
+ <fault name="error1">
+ <soap:fault name="error1" use="literal"/>
+ </fault>
+ <fault name="error2">
+ <soap:fault name="error2" use="literal" />
+ </fault>
+ </operation>
+ </binding>
+
+ <service name="TestService">
+ <port name="TestSOAP11Port" binding="tns:TestSOAP11Binding">
+ <soap:address location="http://localhost:8080/service" />
+ </port>
+ </service>
+</definitions>
Propchange:
axis/axis2/java/core/trunk/modules/kernel/test-resources/wsdl/faults.wsdl
------------------------------------------------------------------------------
svn:eol-style = native
Added:
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/description/WSDL11ToAxisServiceBuilderTest.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/description/WSDL11ToAxisServiceBuilderTest.java?rev=1157211&view=auto
==============================================================================
---
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/description/WSDL11ToAxisServiceBuilderTest.java
(added)
+++
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/description/WSDL11ToAxisServiceBuilderTest.java
Fri Aug 12 18:44:22 2011
@@ -0,0 +1,57 @@
+/*
+ * 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.axis2.description;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+public class WSDL11ToAxisServiceBuilderTest extends TestCase {
+ /**
+ * Tests processing of an operation that declares multiple faults
referring to the same message.
+ * In this case, {@link WSDL11ToAxisServiceBuilder} must correctly
populate the
+ * {@link AxisMessage} object for both faults. In particular,
+ * {@link AxisMessage#getElementQName()} must return consistent
information. This is a
+ * regression test for AXIS2-4533.
+ *
+ * @throws Exception
+ */
+ public void testMultipleFaultsWithSameMessage() throws Exception {
+ InputStream in = new
FileInputStream("test-resources/wsdl/faults.wsdl");
+ try {
+ AxisService service = new
WSDL11ToAxisServiceBuilder(in).populateService();
+ AxisOperation operation = service.getOperation(new
QName("urn:test", "test"));
+ assertNotNull(operation);
+ List<AxisMessage> faultMessages = operation.getFaultMessages();
+ assertEquals(2, faultMessages.size());
+ AxisMessage error1 = faultMessages.get(0);
+ AxisMessage error2 = faultMessages.get(1);
+ assertEquals("errorMessage", error1.getName());
+ assertEquals("errorMessage", error2.getName());
+ assertEquals(new QName("urn:test", "error"),
error1.getElementQName());
+ assertEquals(new QName("urn:test", "error"),
error2.getElementQName());
+ } finally {
+ in.close();
+ }
+ }
+}
Propchange:
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/description/WSDL11ToAxisServiceBuilderTest.java
------------------------------------------------------------------------------
svn:eol-style = native