Author: bvahdat
Date: Fri Feb 10 15:56:38 2012
New Revision: 1242829

URL: http://svn.apache.org/viewvc?rev=1242829&view=rev
Log:
CAMEL-4998: Populate the HttpUrlConnectionMessageSender & 
HttpsUrlConnectionMessageSender field values into the Camel's extension of 
these classes. Also added 2 unit-tests verifying this.

Modified:
    
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java
    
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ProducerRemoteRouteTimeOutTest.java

Modified: 
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java?rev=1242829&r1=1242828&r2=1242829&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java
 (original)
+++ 
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java
 Fri Feb 10 15:56:38 2012
@@ -17,6 +17,8 @@
 package org.apache.camel.component.spring.ws;
 
 import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
 import java.net.HttpURLConnection;
 import java.net.URI;
 import java.util.ArrayList;
@@ -31,6 +33,8 @@ import org.apache.camel.Exchange;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.camel.util.ExchangeHelper;
+import org.apache.camel.util.ReflectionHelper;
+import org.apache.camel.util.ReflectionHelper.FieldCallback;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -85,7 +89,7 @@ public class SpringWebserviceProducer ex
         }
     }
 
-    private static void populateTimeout(SpringWebserviceConfiguration 
configuration) {
+    private static void populateTimeout(SpringWebserviceConfiguration 
configuration) throws Exception {
         WebServiceTemplate webServiceTemplate = 
configuration.getWebServiceTemplate();
         List<WebServiceMessageSender> webServiceMessageSenders = new 
ArrayList<WebServiceMessageSender>(webServiceTemplate.getMessageSenders().length);
         Collections.addAll(webServiceMessageSenders, 
webServiceTemplate.getMessageSenders());
@@ -94,15 +98,15 @@ public class SpringWebserviceProducer ex
                 CommonsHttpMessageSender commonsHttpMessageSender = 
(CommonsHttpMessageSender) webServiceMessageSender;
                 setTimeOut(commonsHttpMessageSender, configuration);
             } else if (webServiceMessageSender instanceof 
HttpsUrlConnectionMessageSender) {
-                // Should check HttpsUrlConnectionMessageSender first as it 
extends HttpUrlConnectionMessageSender
+                // Should check HttpsUrlConnectionMessageSender beforehand as 
it extends HttpUrlConnectionMessageSender
                 if (shouldConsiderTimeoutConfiguration(configuration)) {
                     webServiceMessageSenders.remove(webServiceMessageSender);
-                    webServiceMessageSenders.add(new 
CamelHttpsUrlConnectionMessageSender(configuration));
+                    webServiceMessageSenders.add(new 
CamelHttpsUrlConnectionMessageSender(configuration, 
(HttpsUrlConnectionMessageSender) webServiceMessageSender));
                 }
             } else if (webServiceMessageSender instanceof 
HttpUrlConnectionMessageSender) {
                 if (shouldConsiderTimeoutConfiguration(configuration)) {
                     webServiceMessageSenders.remove(webServiceMessageSender);
-                    webServiceMessageSenders.add(new 
CamelHttpUrlConnectionMessageSender(configuration));
+                    webServiceMessageSenders.add(new 
CamelHttpUrlConnectionMessageSender(configuration, 
(HttpUrlConnectionMessageSender) webServiceMessageSender));
                 }
             } else {
                 // Warn only if the timeout option has been explicitly 
specified
@@ -132,12 +136,15 @@ public class SpringWebserviceProducer ex
         }
     }
 
-    private static class CamelHttpUrlConnectionMessageSender extends 
HttpUrlConnectionMessageSender {
+    protected static class CamelHttpUrlConnectionMessageSender extends 
HttpUrlConnectionMessageSender {
 
         private final SpringWebserviceConfiguration configuration;
 
-        CamelHttpUrlConnectionMessageSender(SpringWebserviceConfiguration 
configuration) {
+        CamelHttpUrlConnectionMessageSender(SpringWebserviceConfiguration 
configuration, HttpUrlConnectionMessageSender webServiceMessageSender) {
             this.configuration = configuration;
+
+            // Populate the single acceptGzipEncoding property
+            
setAcceptGzipEncoding(webServiceMessageSender.isAcceptGzipEncoding());
         }
 
         @Override
@@ -149,12 +156,46 @@ public class SpringWebserviceProducer ex
 
     }
 
-    private static class CamelHttpsUrlConnectionMessageSender extends 
HttpsUrlConnectionMessageSender {
+    protected static class CamelHttpsUrlConnectionMessageSender extends 
HttpsUrlConnectionMessageSender {
 
         private final SpringWebserviceConfiguration configuration;
 
-        CamelHttpsUrlConnectionMessageSender(SpringWebserviceConfiguration 
configuration) {
+        CamelHttpsUrlConnectionMessageSender(SpringWebserviceConfiguration 
configuration, final HttpsUrlConnectionMessageSender webServiceMessageSender) 
throws Exception {
             this.configuration = configuration;
+
+            // Populate the single acceptGzipEncoding property beforehand as 
we have got a proper set/is API for it
+            
setAcceptGzipEncoding(webServiceMessageSender.isAcceptGzipEncoding());
+
+            // Populate the fields having no getXXX available on 
HttpsUrlConnectionMessageSender
+            
ReflectionHelper.doWithFields(HttpsUrlConnectionMessageSender.class, new 
FieldCallback() {
+
+                @Override
+                public void doWith(Field field) throws 
IllegalArgumentException, IllegalAccessException {
+                    if (!Modifier.isStatic(field.getModifiers())) {
+                        String fieldName = field.getName();
+                        if ("logger".equals(fieldName) || 
"acceptGzipEncoding".equals(fieldName)) {
+                            // skip them
+                            return;
+                        }
+
+                        field.setAccessible(true);
+                        Object value = field.get(webServiceMessageSender);
+
+                        Field inheritedField;
+                        try {
+                            inheritedField = 
CamelHttpsUrlConnectionMessageSender.this.getClass().getSuperclass().getDeclaredField(fieldName);
+                        } catch (NoSuchFieldException e) {
+                            throw new IllegalArgumentException("Unexpected 
exception!", e);
+                        }
+
+                        inheritedField.setAccessible(true);
+                        
inheritedField.set(CamelHttpsUrlConnectionMessageSender.this, value);
+                        LOG.trace("Populated the field {} with the value {}", 
value, fieldName);
+                    }
+                }
+
+            });
+
         }
 
         @Override
@@ -166,7 +207,7 @@ public class SpringWebserviceProducer ex
 
     }
 
-    private static class DefaultWebserviceMessageCallback implements 
WebServiceMessageCallback {
+    protected static class DefaultWebserviceMessageCallback implements 
WebServiceMessageCallback {
         private final String soapActionHeader;
         private final URI wsAddressingActionHeader;
         private final SpringWebserviceConfiguration configuration;

Modified: 
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ProducerRemoteRouteTimeOutTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ProducerRemoteRouteTimeOutTest.java?rev=1242829&r1=1242828&r2=1242829&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ProducerRemoteRouteTimeOutTest.java
 (original)
+++ 
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ProducerRemoteRouteTimeOutTest.java
 Fri Feb 10 15:56:38 2012
@@ -16,18 +16,30 @@
  */
 package org.apache.camel.component.spring.ws;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
 import java.net.SocketTimeoutException;
+import java.security.SecureRandom;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
 
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
-
+import 
org.apache.camel.component.spring.ws.SpringWebserviceProducer.CamelHttpUrlConnectionMessageSender;
+import 
org.apache.camel.component.spring.ws.SpringWebserviceProducer.CamelHttpsUrlConnectionMessageSender;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import org.springframework.test.context.ContextConfiguration;
 import 
org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+import org.springframework.ws.transport.http.HttpUrlConnectionMessageSender;
+import org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender;
 
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -83,4 +95,53 @@ public class ProducerRemoteRouteTimeOutT
         return hasThrowableInChain(throwable.getCause(), clazz);
     }
 
+    @Test
+    public void 
verifyTheFieldPopulationFromHttpUrlConnectionMessageSenderToCamelHttpUrlConnectionMessageSender()
 throws Exception {
+        HttpUrlConnectionMessageSender fromConnectionMessageSender = new 
HttpUrlConnectionMessageSender();
+        fromConnectionMessageSender.setAcceptGzipEncoding(false);
+
+        CamelHttpUrlConnectionMessageSender toConnectionMessageSender = new 
CamelHttpUrlConnectionMessageSender(new SpringWebserviceConfiguration(), 
fromConnectionMessageSender);
+        assertFalse("acceptGzipEncoding property didn't get populated", 
toConnectionMessageSender.isAcceptGzipEncoding());
+
+        fromConnectionMessageSender.setAcceptGzipEncoding(true);
+        toConnectionMessageSender = new 
CamelHttpUrlConnectionMessageSender(new SpringWebserviceConfiguration(), 
fromConnectionMessageSender);
+        assertTrue("acceptGzipEncoding property didn't get populated 
properly!", toConnectionMessageSender.isAcceptGzipEncoding());
+    }
+
+    @Test
+    public void 
verifyTheFieldPopulationFromHttpsUrlConnectionMessageSenderToCamelHttpsUrlConnectionMessageSender()
 throws Exception {
+        HttpsUrlConnectionMessageSender fromConnectionMessageSender = new 
HttpsUrlConnectionMessageSender();
+        fromConnectionMessageSender.setAcceptGzipEncoding(false);
+        fromConnectionMessageSender.setHostnameVerifier(new HostnameVerifier() 
{
+
+            @Override
+            public boolean verify(String s, SSLSession sslsession) {
+                return false;
+            }
+        });
+        fromConnectionMessageSender.setKeyManagers(new KeyManager[] {new 
KeyManager() {
+        }});
+        fromConnectionMessageSender.setSecureRandom(new SecureRandom());
+        fromConnectionMessageSender.setSslProtocol("sslProtocol");
+        fromConnectionMessageSender.setSslProvider("sslProvider");
+        fromConnectionMessageSender.setTrustManagers(new TrustManager[] {new 
TrustManager() {
+        }});
+
+        CamelHttpsUrlConnectionMessageSender toConnectionMessageSender = new 
CamelHttpsUrlConnectionMessageSender(new SpringWebserviceConfiguration(), 
fromConnectionMessageSender);
+
+        assertFalse("acceptGzipEncoding field didn't get populated", 
toConnectionMessageSender.isAcceptGzipEncoding());
+        for (Field expectedField : 
fromConnectionMessageSender.getClass().getDeclaredFields()) {
+            if (Modifier.isStatic(expectedField.getModifiers())) {
+                continue;
+            }
+            expectedField.setAccessible(true);
+            String fieldName = expectedField.getName();
+
+            Field actualField = 
toConnectionMessageSender.getClass().getSuperclass().getDeclaredField(fieldName);
+            actualField.setAccessible(true);
+
+            assertSame("The field '" + fieldName + "' didn't get populated 
properly!", expectedField.get(fromConnectionMessageSender), 
actualField.get(toConnectionMessageSender));
+        }
+    }
+
 }


Reply via email to