[ 
https://issues.apache.org/jira/browse/CAMEL-8042?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Keith Halligan updated CAMEL-8042:
----------------------------------
    Attachment: camel-8042.tar.gz

Here's the testcase (maven based) that's using the Sun CORBA ORB backend with a 
soap client talking to the corba server via camel.

Prior to 2.11.1 the User exception thrown in the PingMe() method, was being 
propagated back into the client side, since then that exception type gets lost 
and the generic SOAPFault is seen instead.

Here's a patch that's the starting of a fix for things here, it's just a 
workaround for the CORBA things for now.
{code}
diff --git a/components/camel-cxf/pom.xml b/components/camel-cxf/pom.xml
index 3cc32a8..f144448 100644
--- a/components/camel-cxf/pom.xml
+++ b/components/camel-cxf/pom.xml
@@ -208,6 +208,12 @@
     </dependency>

     <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-rt-bindings-corba</artifactId>
+      <version>${cxf-version}</version>
+    </dependency>
+
+    <dependency>
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-jetty</artifactId>
       <scope>test</scope>
diff --git 
a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java
 b/components/camel
-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java
index bcef9cf..3519d26 100644
--- 
a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java
+++ 
b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java
@@ -20,6 +20,7 @@ import java.util.Map;

 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
+import org.apache.cxf.binding.corba.CorbaConduit;
 import org.apache.cxf.endpoint.ClientCallback;
 import org.apache.cxf.endpoint.ConduitSelector;
 import org.apache.cxf.service.model.BindingOperationInfo;
@@ -71,7 +72,8 @@ public class CxfClientCallback extends ClientCallback {
             super.handleException(ctx, ex);
             // need to call the conduitSelector complete method to enable the 
fail over feature
             ConduitSelector conduitSelector = 
cxfExchange.get(ConduitSelector.class);
-            if (conduitSelector != null) {
+            if (conduitSelector != null &&
+                ! (conduitSelector.selectConduit(cxfExchange.getOutMessage()) 
instanceof CorbaConduit)) {
                 conduitSelector.complete(cxfExchange);
                 ex = cxfExchange.getOutMessage().getContent(Exception.class);
                 if (ex == null && cxfExchange.getInMessage() != null) {
{code}

> CxfClientCallBack handleException does not honour exception
> -----------------------------------------------------------
>
>                 Key: CAMEL-8042
>                 URL: https://issues.apache.org/jira/browse/CAMEL-8042
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-cxf
>    Affects Versions: 2.11.2, 2.14.0
>         Environment: Windows
>            Reporter: John McKeogh
>            Assignee: Willem Jiang
>             Fix For: 2.14.2
>
>         Attachments: camel-8042.tar.gz, greeter-corba.wsdl
>
>
> Hi,
> Since Camel 2.11.2, The cxfClientCallBack doesn't seem to be honouring the 
> exception that it is passed in.
> Here is a copy of the HandleException funciton before and after 11.2
>               2.11.1
>                public void handleException(Map<String, Object> ctx, Throwable 
> ex) {
>         try {
>             super.handleException(ctx, ex);
>             camelExchange.setException(ex); 
>         } finally {
>             // copy 
> 2.11.2
>   public void handleException(Map<String, Object> ctx, Throwable ex) {
>         try {
>             super.handleException(ctx, ex);
>             // need to call the conduitSelector complete method to enable the 
> fail over feature
>             ConduitSelector conduitSelector = 
> cxfExchange.get(ConduitSelector.class);
>             if (conduitSelector != null) {
>                 conduitSelector.complete(cxfExchange);
>                 ex = cxfExchange.getOutMessage().getContent(Exception.class);
>                 if (ex == null && cxfExchange.getInMessage() != null) {
>                     ex = 
> cxfExchange.getInMessage().getContent(Exception.class);
>                 }
>                 if (ex != null) {
>                     camelExchange.setException(ex);
>                 }
>             } else {
>                 camelExchange.setException(ex);
>             }
>         } finally {
> So for our testcase where we have a cxf client calling through camel to a 
> Corba web service, the exception that the webservice is passing back to camel 
> is no longer honoured.
> I believe this change was introduced by the following jira:
> https://issues.apache.org/jira/browse/CAMEL-6609
> I have attached the wsdl of the corba web-service.
> In the service we are calling PingMe expecting to get back a 
> PingMeFault_Exception. The exception is set in the cxf corba binding and 
> reached the exception handler in camel. But the exception is no longer being 
> sent back to the client. Instead a generic SoapFaultException is reaching the 
> client.
> Cheers,
> John.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to