You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ff...@apache.org on 2008/10/19 16:41:31 UTC

svn commit: r706021 - in /servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src: main/java/org/apache/servicemix/cxfbc/ main/java/org/apache/servicemix/cxfbc/interceptors/ test/java/org/apache/servicemix/cxfbc/ tes...

Author: ffang
Date: Sun Oct 19 07:41:30 2008
New Revision: 706021

URL: http://svn.apache.org/viewvc?rev=706021&view=rev
Log:
[SM-1637]smx-cxf-bc provider throws NPE at JbiInWsdl1Interceptor.handleJBIFault

Modified:
    servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
    servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java
    servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java
    servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcHttpJmsBridgeMtomTest.java
    servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/mtom/TestMtomImpl.java

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java?rev=706021&r1=706020&r2=706021&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java Sun Oct 19 07:41:30 2008
@@ -635,7 +635,10 @@
                         Element details = toElement(exchange.getFault()
                                 .getContent());
                         f.setDetail(details);
-                        
+                        if (exchange.getProperty("faultstring") != null) {
+                            f.setMessage((String)exchange.getProperty("faultstring"));
+                        }
+                                                
                     } else {
                         Element details = toElement(exchange.getFault()
                                 .getContent());
@@ -647,13 +650,20 @@
                         details = (Element) details.getElementsByTagNameNS(
                                 details.getNamespaceURI(), "Fault").item(0);
                         assert details != null;
-                        details = (Element) details.getElementsByTagName("detail").item(0);
+                        if (exchange.getProperty("faultstring") != null) {
+                            details = (Element) details.getElementsByTagName("faultstring").item(0);
+                        } else {
+                            details = (Element) details.getElementsByTagName("detail").item(0);
+                        }
                         assert details != null;
                         f = new SoapFault(
                                 new org.apache.cxf.common.i18n.Message(
                                         "Fault occured", (ResourceBundle) null),
                                 new QName(details.getNamespaceURI(), "detail"));
                         f.setDetail(details);
+                        if (exchange.getProperty("faultstring") != null) {
+                            f.setMessage((String)exchange.getProperty("faultstring"));
+                        }
 
                     }
                     processFaultDetail(f, message);
@@ -701,6 +711,9 @@
         protected void processFaultDetail(Fault fault, Message msg) {
             Element exDetail = (Element) DOMUtils.getChild(fault.getDetail(),
                     Node.ELEMENT_NODE);
+            if (exDetail == null) {
+                return;
+            }
             QName qname = new QName(exDetail.getNamespaceURI(), exDetail
                     .getLocalName());
 

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java?rev=706021&r1=706020&r2=706021&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java Sun Oct 19 07:41:30 2008
@@ -169,6 +169,9 @@
             Fault fault = messageExchange.createFault();
             fault.setContent(soapMessage.getContent(Source.class));
             messageExchange.setFault(fault);
+            if (soapMessage.get("faultstring") != null) {
+                messageExchange.setProperty("faultstring", soapMessage.get("faultstring"));
+            }
         } else if (messageExchange instanceof InOut) {
             NormalizedMessage msg = messageExchange.createMessage();
             msg.setContent(soapMessage.getContent(Source.class));

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java?rev=706021&r1=706020&r2=706021&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java Sun Oct 19 07:41:30 2008
@@ -228,20 +228,22 @@
         Node jbiFaultDetail = null;
         if (message.getVersion() instanceof Soap11) {
             NodeList nodeList = soapFault.getElementsByTagName("detail");
-            if (nodeList == null) {
+            if (nodeList == null || nodeList.getLength() == 0) {
                 //there is no detail in the fault, which means the fault is 
                 //thrown during soap header process according to soap spec,
                 //try get the mandatory elemenet faultstring
                 nodeList = soapFault.getElementsByTagName("faultstring");
+                message.put("faultstring", nodeList.item(0).getTextContent());
             }
             jbiFaultDetail = doc.importNode(nodeList.item(0).getFirstChild(), true);
         } else {
             NodeList nodeList = soapFault.getElementsByTagName("soap:Detail");
-            if (nodeList == null) {
+            if (nodeList == null || nodeList.getLength() == 0) {
                 //there is no detail in the fault, which means the fault is 
                 //thrown during soap header process according to soap spec,
                 //try get the mandatory elemenet soap:Reason
                 nodeList = soapFault.getElementsByTagName("soap:Reason");
+                message.put("faultstring", nodeList.item(0).getTextContent());
             }
             jbiFaultDetail = doc.importNode(nodeList.item(0).getFirstChild(), true);
         }

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcHttpJmsBridgeMtomTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcHttpJmsBridgeMtomTest.java?rev=706021&r1=706020&r2=706021&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcHttpJmsBridgeMtomTest.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcHttpJmsBridgeMtomTest.java Sun Oct 19 07:41:30 2008
@@ -20,7 +20,6 @@
 import java.io.InputStream;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
-import java.lang.reflect.UndeclaredThrowableException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -150,8 +149,11 @@
             bis.read(b, 0, 10);
             String attachContent = new String(b);
             assertEquals(attachContent, "testfoobar");
-        } catch (UndeclaredThrowableException ex) {
-            throw (Exception) ex.getCause();
+            name.value = "runtime exception";
+            mtomPort.testXop(name, param);
+            fail("should catch RuntimeException");
+        } catch (RuntimeException ex) {
+            //
         }
 
     }

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/mtom/TestMtomImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/mtom/TestMtomImpl.java?rev=706021&r1=706020&r2=706021&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/mtom/TestMtomImpl.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/mtom/TestMtomImpl.java Sun Oct 19 07:41:30 2008
@@ -36,6 +36,9 @@
     public void testXop(Holder<String> name, Holder<DataHandler> attachinfo) {
         
         try {
+            if ("runtime exception".equals(name.value)) {
+                throw new RuntimeException("throw runtime exception");
+            }
             InputStream bis = attachinfo.value.getDataSource().getInputStream();
             byte b[] = new byte[6];
             bis.read(b, 0, 6);