Repository: camel Updated Branches: refs/heads/master b3783a536 -> 9937c6194
CAMEL-9273: Use http client for camel-weather. Thanks to Arno Noordover for the patch. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2219cc96 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2219cc96 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2219cc96 Branch: refs/heads/master Commit: 2219cc96fb49e26d2fe85d0e096259fde8e0d2e8 Parents: b3783a5 Author: Claus Ibsen <davscl...@apache.org> Authored: Thu May 5 09:19:47 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu May 5 09:19:47 2016 +0200 ---------------------------------------------------------------------- components/camel-weather/pom.xml | 4 ++ .../component/weather/WeatherConsumer.java | 47 +++++++++++++------- .../component/weather/WeatherProducer.java | 39 ++++++++++------ .../weather/CurrentWeatherConsumerXmlTest.java | 1 - 4 files changed, 59 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/2219cc96/components/camel-weather/pom.xml ---------------------------------------------------------------------- diff --git a/components/camel-weather/pom.xml b/components/camel-weather/pom.xml index 5c4150d..e35ac46 100644 --- a/components/camel-weather/pom.xml +++ b/components/camel-weather/pom.xml @@ -36,6 +36,10 @@ <dependencies> <dependency> + <groupId>commons-httpclient</groupId> + <artifactId>commons-httpclient</artifactId> + </dependency> + <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> </dependency> http://git-wip-us.apache.org/repos/asf/camel/blob/2219cc96/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConsumer.java ---------------------------------------------------------------------- diff --git a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConsumer.java b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConsumer.java index 8469e79..591f86d 100644 --- a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConsumer.java +++ b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConsumer.java @@ -16,12 +16,13 @@ */ package org.apache.camel.component.weather; -import java.net.URL; - import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.impl.ScheduledPollConsumer; import org.apache.camel.util.ObjectHelper; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,23 +44,35 @@ public class WeatherConsumer extends ScheduledPollConsumer { @Override protected int poll() throws Exception { LOG.debug("Going to execute the Weather query {}", query); - String weather = getEndpoint().getCamelContext().getTypeConverter().mandatoryConvertTo(String.class, new URL(query)); - LOG.debug("Got back the Weather information {}", weather); - if (ObjectHelper.isEmpty(weather)) { - throw new IllegalStateException("Got the unexpected value '" + weather + "' as the result of the query '" + query + "'"); - } + HttpClient httpClient = new HttpClient(); + GetMethod getMethod = new GetMethod(query); + try { + int status = httpClient.executeMethod(getMethod); + if (status != HttpStatus.SC_OK) { + LOG.warn("HTTP call for weather returned error status code {} - {} as a result with query: {}", status, getMethod.getStatusLine(), query); + return 0; + } + String weather = getEndpoint().getCamelContext().getTypeConverter().mandatoryConvertTo(String.class, getMethod.getResponseBodyAsStream()); + LOG.debug("Got back the Weather information {}", weather); + if (ObjectHelper.isEmpty(weather)) { + // empty response + return 0; + } - Exchange exchange = getEndpoint().createExchange(); - String header = getEndpoint().getConfiguration().getHeaderName(); - if (header != null) { - exchange.getIn().setHeader(header, weather); - } else { - exchange.getIn().setBody(weather); - } - exchange.getIn().setHeader(WeatherConstants.WEATHER_QUERY, query); + Exchange exchange = getEndpoint().createExchange(); + String header = getEndpoint().getConfiguration().getHeaderName(); + if (header != null) { + exchange.getIn().setHeader(header, weather); + } else { + exchange.getIn().setBody(weather); + } + exchange.getIn().setHeader(WeatherConstants.WEATHER_QUERY, query); - getProcessor().process(exchange); + getProcessor().process(exchange); - return 1; + return 1; + } finally { + getMethod.releaseConnection(); + } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/2219cc96/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherProducer.java b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherProducer.java index 346ace6..65f9706 100644 --- a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherProducer.java +++ b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherProducer.java @@ -16,11 +16,12 @@ */ package org.apache.camel.component.weather; -import java.net.URL; - import org.apache.camel.Exchange; import org.apache.camel.impl.DefaultProducer; import org.apache.camel.util.ObjectHelper; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; public class WeatherProducer extends DefaultProducer { @@ -44,20 +45,30 @@ public class WeatherProducer extends DefaultProducer { q = getEndpoint().getConfiguration().getQuery(location); } - log.debug("Going to execute the Weather query {}", q); - String weather = getEndpoint().getCamelContext().getTypeConverter().mandatoryConvertTo(String.class, new URL(q)); - log.debug("Got back the Weather information {}", weather); + HttpClient httpClient = new HttpClient(); + GetMethod method = new GetMethod(q); + try { + log.debug("Going to execute the Weather query {}", q); + int statusCode = httpClient.executeMethod(method); + if (statusCode != HttpStatus.SC_OK) { + throw new IllegalStateException("Got the invalid http status value '" + method.getStatusLine() + "' as the result of the query '" + query + "'"); + } + String weather = getEndpoint().getCamelContext().getTypeConverter().mandatoryConvertTo(String.class, method.getResponseBodyAsStream()); + log.debug("Got back the Weather information {}", weather); - if (ObjectHelper.isEmpty(weather)) { - throw new IllegalStateException("Got the unexpected value '" + weather + "' as the result of the query '" + q + "'"); - } + if (ObjectHelper.isEmpty(weather)) { + throw new IllegalStateException("Got the unexpected value '" + weather + "' as the result of the query '" + q + "'"); + } - String header = getEndpoint().getConfiguration().getHeaderName(); - if (header != null) { - exchange.getIn().setHeader(header, weather); - } else { - exchange.getIn().setBody(weather); + String header = getEndpoint().getConfiguration().getHeaderName(); + if (header != null) { + exchange.getIn().setHeader(header, weather); + } else { + exchange.getIn().setBody(weather); + } + exchange.getIn().setHeader(WeatherConstants.WEATHER_QUERY, q); + } finally { + method.releaseConnection(); } - exchange.getIn().setHeader(WeatherConstants.WEATHER_QUERY, q); } } http://git-wip-us.apache.org/repos/asf/camel/blob/2219cc96/components/camel-weather/src/test/java/org/apache/camel/component/weather/CurrentWeatherConsumerXmlTest.java ---------------------------------------------------------------------- diff --git a/components/camel-weather/src/test/java/org/apache/camel/component/weather/CurrentWeatherConsumerXmlTest.java b/components/camel-weather/src/test/java/org/apache/camel/component/weather/CurrentWeatherConsumerXmlTest.java index 8fd3be7..de54c63 100644 --- a/components/camel-weather/src/test/java/org/apache/camel/component/weather/CurrentWeatherConsumerXmlTest.java +++ b/components/camel-weather/src/test/java/org/apache/camel/component/weather/CurrentWeatherConsumerXmlTest.java @@ -24,7 +24,6 @@ public class CurrentWeatherConsumerXmlTest extends BaseWeatherConsumerTest { protected void checkWeatherContent(String weather) { log.debug("The weather in {} format is {}{}", new Object[] {WeatherMode.XML, LS, weather}); - assertStringContains(weather, "<?xml version=\"1.0\" encoding=\"utf-8\"?>"); assertStringContains(weather, "<coord"); assertStringContains(weather, "<temperature"); }