You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by tl...@apache.org on 2006/11/02 09:13:18 UTC

svn commit: r470269 - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/interceptor/ rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/ rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/ rt/core/src/main/java/org/apach...

Author: tli
Date: Thu Nov  2 00:13:17 2006
New Revision: 470269

URL: http://svn.apache.org/viewvc?view=rev&rev=470269
Log:
CXF-196 fix lost message of runtime exception thrown by SEI impl method for both soap & xml binding, add unit test on xml binding, also add soap systest to check it

Added:
    incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLFaultInterceptorsTest.java   (with props)
Modified:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/Fault.java
    incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLFault.java
    incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/TestBase.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainIntiatorObserver.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
    incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/Fault.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/Fault.java?view=diff&rev=470269&r1=470268&r2=470269
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/Fault.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/Fault.java Thu Nov  2 00:13:17 2006
@@ -46,7 +46,11 @@
 
     public Fault(Throwable t) {
         super(t);
-        message = super.getMessage();
+        if (super.getMessage() != null) {
+            message = super.getMessage();
+        } else {
+            message = t == null ? null : t.getMessage();
+        }
     }
 
     public String getMessage() {

Modified: incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLFault.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLFault.java?view=diff&rev=470269&r1=470268&r2=470269
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLFault.java (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLFault.java Thu Nov  2 00:13:17 2006
@@ -18,7 +18,6 @@
  */
 package org.apache.cxf.binding.xml;
 
-import java.lang.reflect.InvocationTargetException;
 import java.util.ResourceBundle;
 
 import org.apache.cxf.common.i18n.Message;
@@ -29,7 +28,6 @@
     public static final String XML_FAULT_PREFIX = "xfns";
 
     public static final String XML_FAULT_ROOT = "XMLFault";
-
     public static final String XML_FAULT_STRING = "faultstring";
 
     public static final String XML_FAULT_DETAIL = "detail";
@@ -58,9 +56,6 @@
             return (XMLFault) f;
         }
         Throwable th = f.getCause();
-        if (f.getCause() instanceof InvocationTargetException) {
-            th = th.getCause();
-        }
         XMLFault xmlFault = new XMLFault(new Message(f.getMessage(), (ResourceBundle) null), th);
         xmlFault.setDetail(f.getDetail());
         return xmlFault;

Modified: incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/TestBase.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/TestBase.java?view=diff&rev=470269&r1=470268&r2=470269
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/TestBase.java (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/TestBase.java Thu Nov  2 00:13:17 2006
@@ -138,6 +138,7 @@
 
         control.reset();
         JAXBDataBinding db = new JAXBDataBinding();
+        db.initialize(serviceInfo);
         db.setContext(JAXBContext.newInstance(jaxbClasses));
         service.setDataBinding(db);
 

Added: incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLFaultInterceptorsTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLFaultInterceptorsTest.java?view=auto&rev=470269
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLFaultInterceptorsTest.java (added)
+++ incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLFaultInterceptorsTest.java Thu Nov  2 00:13:17 2006
@@ -0,0 +1,88 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.binding.xml.interceptor;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.cxf.binding.xml.XMLFault;
+import org.apache.cxf.interceptor.AbstractInDatabindingInterceptor;
+import org.apache.cxf.interceptor.ClientFaultConverter;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.staxutils.StaxUtils;
+import org.apache.hello_world_xml_http.bare.types.MyComplexStructType;
+
+public class XMLFaultInterceptorsTest extends TestBase {
+
+    public void testRuntimeExceptionOfImpl() throws Exception {
+
+        String ns = "http://apache.org/hello_world_xml_http/wrapped";
+        common("/wsdl/hello_world_xml_wrapped.wsdl", new QName(ns, "XMLPort"), MyComplexStructType.class);
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        xmlMessage.setContent(OutputStream.class, baos);
+        xmlMessage.setContent(XMLStreamWriter.class, StaxUtils.createXMLStreamWriter(baos));
+        xmlMessage.setContent(Exception.class, new Fault(new RuntimeException("dummy exception")));
+        XMLFaultOutInterceptor xfo = new XMLFaultOutInterceptor();
+        xfo.setPhase("phase1");
+        chain.add(xfo);
+        InHelpInterceptor ih = new InHelpInterceptor();
+        ClientFaultConverter cfc = new ClientFaultConverter();
+        XMLFaultInInterceptor xfi = new XMLFaultInInterceptor();
+        ih.setPhase("phase2");
+        cfc.setPhase("phase3");
+        xfi.setPhase("phase3");
+        chain.add(ih);
+        chain.add(cfc);
+        chain.add(xfi);
+        chain.doIntercept(xmlMessage);
+        assertNotNull(xmlMessage.getContent(Exception.class));
+        assertTrue(xmlMessage.getContent(Exception.class) instanceof XMLFault);
+        XMLFault xfault = (XMLFault) xmlMessage.getContent(Exception.class);
+        assertTrue("check message expected - dummy exception",
+                xfault.getMessage().indexOf("dummy exception") >= 0);
+    }
+
+    private class InHelpInterceptor extends AbstractInDatabindingInterceptor {
+
+        public void handleMessage(Message message) {
+
+            try {
+                ByteArrayOutputStream baos = (ByteArrayOutputStream) message.getContent(OutputStream.class);
+                ByteArrayInputStream bis = new ByteArrayInputStream(baos.toByteArray());
+                message.setContent(InputStream.class, bis);
+                XMLStreamReader xsr = StaxUtils.createXMLStreamReader(bis);
+                xsr.nextTag();
+                message.setContent(XMLStreamReader.class, xsr);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+
+        }
+
+    }
+}

Propchange: incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLFaultInterceptorsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLFaultInterceptorsTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainIntiatorObserver.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainIntiatorObserver.java?view=diff&rev=470269&r1=470268&r2=470269
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainIntiatorObserver.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainIntiatorObserver.java Thu Nov  2 00:13:17 2006
@@ -57,14 +57,14 @@
 
         MessageImpl.copyContent(m, faultMessage);
         
-        Exception e = m.getContent(Exception.class);
-        Fault f;
-        if (e instanceof Fault) {
-            f = (Fault) e;
-        } else {
-            f = new Fault(e);
-        }
-        faultMessage.setContent(Exception.class, f);
+//        Exception e = m.getContent(Exception.class);
+//        Fault f;
+//        if (e instanceof Fault) {
+//            f = (Fault) e;
+//        } else {
+//            f = new Fault(e);
+//        }
+//        faultMessage.setContent(Exception.class, f);
         
         // setup chain
         PhaseInterceptorChain chain = new PhaseInterceptorChain(getPhases());

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java?view=diff&rev=470269&r1=470268&r2=470269
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java Thu Nov  2 00:13:17 2006
@@ -19,6 +19,7 @@
 
 package org.apache.cxf.systest.jaxws;
 
+
 import java.io.InputStream;
 import java.lang.reflect.UndeclaredThrowableException;
 import java.net.HttpURLConnection;
@@ -472,7 +473,16 @@
                 assertNotNull(brlf.getFaultInfo());
                 assertEquals("BadRecordLitFault", brlf.getFaultInfo());
             }
+                        
         }
+
+        try {
+            // trigger runtime exception throw of implementor method
+            greeter.testDocLitFault("");
+            fail("Should have thrown Runtime exception");
+        } catch (Exception e) {
+            assertEquals("can't get back original message",  "Unknown source", e.getMessage());
+        } 
     }
     
     public void testGetSayHi() throws Exception {

Modified: incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java?view=diff&rev=470269&r1=470268&r2=470269
==============================================================================
--- incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java (original)
+++ incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java Thu Nov  2 00:13:17 2006
@@ -20,6 +20,7 @@
 package org.apache.hello_world_soap_http;
 
 
+import java.io.IOException;
 import java.util.concurrent.Future;
 import java.util.logging.Logger;
 
@@ -81,6 +82,7 @@
             nscl.setCode(ec);
             throw new NoSuchCodeLitFault("TestNoSuchCodeLit", nscl);
         }
+        throw new RuntimeException("Unknown source", new IOException("dummy io exception"));
     }
 
     public void greetMeOneWay(String requestType) {