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));
+ }
+ }
+
}