You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/10/01 08:53:00 UTC
[1/2] git commit: CAMEL-6804: camel-facebook - Problem with
jsonStoreEnabled option
Updated Branches:
refs/heads/master c38e1dc0f -> 7f1c961a2
CAMEL-6804: camel-facebook - Problem with jsonStoreEnabled option
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/539dd95c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/539dd95c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/539dd95c
Branch: refs/heads/master
Commit: 539dd95c2e28fca6c6ea59741b2eaa7be67a153f
Parents: c38e1dc
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Oct 1 08:49:33 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Oct 1 08:49:33 2013 +0200
----------------------------------------------------------------------
.../component/facebook/FacebookComponent.java | 5 ++-
.../component/facebook/FacebookConstants.java | 1 +
.../component/facebook/FacebookConsumer.java | 41 ++++++++++++--------
.../component/facebook/FacebookEndpoint.java | 11 +++++-
.../component/facebook/FacebookProducer.java | 29 +++++++++++---
.../facebook/FacebookComponentConsumerTest.java | 23 ++++++++---
.../facebook/FacebookComponentProducerTest.java | 16 ++++++--
7 files changed, 94 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/539dd95c/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookComponent.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookComponent.java
index 4ae234f..fb45b71 100644
--- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookComponent.java
+++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookComponent.java
@@ -54,7 +54,10 @@ public class FacebookComponent extends UriEndpointComponent {
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
FacebookEndpointConfiguration config = copyComponentProperties();
- return new FacebookEndpoint(uri, this, remaining, config);
+ final FacebookEndpoint endpoint = new FacebookEndpoint(uri, this, remaining, config);
+ // set endpoint property inBody so that it's available in initState()
+ setProperties(endpoint, parameters);
+ return endpoint;
}
private FacebookEndpointConfiguration copyComponentProperties() throws Exception {
http://git-wip-us.apache.org/repos/asf/camel/blob/539dd95c/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConstants.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConstants.java
index e7f9f3d..7893396 100644
--- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConstants.java
+++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConstants.java
@@ -33,4 +33,5 @@ public interface FacebookConstants {
// date format used by Facebook Reading since and until fields
String FACEBOOK_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
+ String RAW_JSON_HEADER = FACEBOOK_PROPERTY_PREFIX + "rawJSON";
}
http://git-wip-us.apache.org/repos/asf/camel/blob/539dd95c/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java
index 459768e..0448a0e 100644
--- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java
+++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java
@@ -18,18 +18,8 @@ package org.apache.camel.component.facebook;
import java.lang.reflect.Array;
import java.text.SimpleDateFormat;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.TimeUnit;
-
-import facebook4j.Reading;
-
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.component.facebook.data.FacebookMethodsType;
@@ -41,6 +31,10 @@ import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import facebook4j.Facebook;
+import facebook4j.Reading;
+import facebook4j.json.DataObjectFactory;
+
import static org.apache.camel.component.facebook.FacebookConstants.FACEBOOK_DATE_FORMAT;
import static org.apache.camel.component.facebook.FacebookConstants.READING_PPROPERTY;
import static org.apache.camel.component.facebook.FacebookConstants.READING_PREFIX;
@@ -133,8 +127,20 @@ public class FacebookConsumer extends ScheduledPollConsumer {
// invoke the consumer method
final Map<String, Object> args = getMethodArguments();
try {
- Object result = invokeMethod(endpoint.getConfiguration().getFacebook(),
- method, args);
+ // also check whether we need to get raw JSON
+ String rawJSON = null;
+ Object result;
+ if (endpoint.getConfiguration().getJsonStoreEnabled() == null
+ || !endpoint.getConfiguration().getJsonStoreEnabled()) {
+ result = invokeMethod(endpoint.getConfiguration().getFacebook(),
+ method, args);
+ } else {
+ final Facebook facebook = endpoint.getConfiguration().getFacebook();
+ synchronized (facebook) {
+ result = invokeMethod(facebook, method, args);
+ rawJSON = DataObjectFactory.getRawJSON(result);
+ }
+ }
// process result according to type
if (result != null && (result instanceof Collection || result.getClass().isArray())) {
@@ -142,11 +148,11 @@ public class FacebookConsumer extends ScheduledPollConsumer {
final Object array = getResultAsArray(result);
final int length = Array.getLength(array);
for (int i = 0; i < length; i++) {
- processResult(Array.get(array, i));
+ processResult(Array.get(array, i), rawJSON);
}
return length;
} else {
- processResult(result);
+ processResult(result, rawJSON);
return 1; // number of messages polled
}
} catch (Throwable t) {
@@ -154,9 +160,12 @@ public class FacebookConsumer extends ScheduledPollConsumer {
}
}
- private void processResult(Object result) throws Exception {
+ private void processResult(Object result, String rawJSON) throws Exception {
Exchange exchange = endpoint.createExchange();
exchange.getIn().setBody(result);
+ if (rawJSON != null) {
+ exchange.getIn().setHeader(FacebookConstants.RAW_JSON_HEADER, rawJSON);
+ }
try {
// send message to next processor in the route
getProcessor().process(exchange);
http://git-wip-us.apache.org/repos/asf/camel/blob/539dd95c/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookEndpoint.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookEndpoint.java
index 51eb324..02e9245 100644
--- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookEndpoint.java
+++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookEndpoint.java
@@ -72,6 +72,10 @@ public class FacebookEndpoint extends DefaultEndpoint implements FacebookConstan
}
public Consumer createConsumer(Processor processor) throws Exception {
+ // make sure inBody is not set for consumers
+ if (inBody != null) {
+ throw new IllegalArgumentException("Option inBody is not supported for consumer endpoint");
+ }
final FacebookConsumer consumer = new FacebookConsumer(this, processor);
// also set consumer.* properties
configureConsumer(consumer);
@@ -108,7 +112,12 @@ public class FacebookEndpoint extends DefaultEndpoint implements FacebookConstan
private void initState() {
// get endpoint property names
- final Set<String> arguments = getEndpointPropertyNames(configuration);
+ final Set<String> arguments = new HashSet<String>();
+ arguments.addAll(getEndpointPropertyNames(configuration));
+ // add inBody argument for producers
+ if (inBody != null) {
+ arguments.add(inBody);
+ }
final String[] argNames = arguments.toArray(new String[arguments.size()]);
candidates = new ArrayList<FacebookMethodsType>();
http://git-wip-us.apache.org/repos/asf/camel/blob/539dd95c/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookProducer.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookProducer.java
index 15f1035..6a5d695 100644
--- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookProducer.java
+++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookProducer.java
@@ -35,9 +35,11 @@ import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import facebook4j.Facebook;
+import facebook4j.json.DataObjectFactory;
+
import static org.apache.camel.component.facebook.data.FacebookMethodsTypeHelper.MatchType;
import static org.apache.camel.component.facebook.data.FacebookMethodsTypeHelper.filterMethods;
-import static org.apache.camel.component.facebook.data.FacebookMethodsTypeHelper.getCandidateMethods;
import static org.apache.camel.component.facebook.data.FacebookMethodsTypeHelper.getMissingProperties;
import static org.apache.camel.component.facebook.data.FacebookPropertiesHelper.getEndpointProperties;
import static org.apache.camel.component.facebook.data.FacebookPropertiesHelper.getExchangeProperties;
@@ -56,9 +58,6 @@ public class FacebookProducer extends DefaultAsyncProducer {
public FacebookProducer(FacebookEndpoint endpoint) {
super(endpoint);
this.endpoint = endpoint;
-
- // get candidate methods using endpoint configuration
- getCandidateMethods(endpoint.getEndpointUri());
}
@Override
@@ -86,13 +85,31 @@ public class FacebookProducer extends DefaultAsyncProducer {
LOG.debug("Invoking method {} with {}", method.getName(), properties.keySet());
}
- Object result = FacebookMethodsTypeHelper.invokeMethod(
- endpoint.getConfiguration().getFacebook(), method, properties);
+ // also check whether we need to get Raw JSON
+ Object result;
+ String rawJSON = null;
+ if (endpoint.getConfiguration().getJsonStoreEnabled() == null
+ || !endpoint.getConfiguration().getJsonStoreEnabled()) {
+ result = FacebookMethodsTypeHelper.invokeMethod(
+ endpoint.getConfiguration().getFacebook(), method, properties);
+ } else {
+ final Facebook facebook = endpoint.getConfiguration().getFacebook();
+ // lock out the underlying Facebook object from other threads
+ synchronized (facebook) {
+ result = FacebookMethodsTypeHelper.invokeMethod(
+ facebook, method, properties);
+ rawJSON = DataObjectFactory.getRawJSON(result);
+ }
+ }
// producer returns a single response, even for methods with List return types
exchange.getOut().setBody(result);
// copy headers
exchange.getOut().setHeaders(exchange.getIn().getHeaders());
+ if (rawJSON != null) {
+ exchange.getOut().setHeader(FacebookConstants.FACEBOOK_PROPERTY_PREFIX + "rawJSON",
+ rawJSON);
+ }
} catch (Throwable t) {
exchange.setException(ObjectHelper.wrapRuntimeCamelException(t));
http://git-wip-us.apache.org/repos/asf/camel/blob/539dd95c/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java
index b64832b..51ca80e 100644
--- a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java
+++ b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java
@@ -26,7 +26,6 @@ import java.util.Set;
import java.util.concurrent.TimeUnit;
import facebook4j.api.SearchMethods;
-
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.junit.Test;
@@ -64,14 +63,25 @@ public class FacebookComponentConsumerTest extends CamelFacebookTestSupport {
assertMockEndpointsSatisfied();
}
+ @Test
+ public void testJsonStoreEnabled() throws Exception {
+ final MockEndpoint mock = getMockEndpoint("mock:testJsonStoreEnabled");
+ mock.expectedMinimumMessageCount(1);
+ mock.assertIsSatisfied();
+
+ final String rawJSON = mock.getExchanges().get(0).getIn().getHeader(FacebookConstants.RAW_JSON_HEADER, String.class);
+ assertNotNull("Null rawJSON", rawJSON);
+ assertFalse("Empty rawJSON", rawJSON.isEmpty());
+ }
+
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
- public void configure() {
+ public void configure() throws Exception {
- // start with a 7 day window for the first delayed poll
- String since = new SimpleDateFormat(FacebookConstants.FACEBOOK_DATE_FORMAT).format(
- new Date(System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(7, TimeUnit.DAYS)));
+ // start with a 30 day window for the first delayed poll
+ String since = "RAW(" + new SimpleDateFormat(FacebookConstants.FACEBOOK_DATE_FORMAT).format(
+ new Date(System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(30, TimeUnit.DAYS))) + ")";
for (String name : searchNames) {
if (!excludedNames.contains(name)) {
@@ -87,6 +97,9 @@ public class FacebookComponentConsumerTest extends CamelFacebookTestSupport {
.to("mock:consumeQueryResult" + name);
}
+ from("facebook://me?jsonStoreEnabled=true&" + getOauthParams())
+ .to("mock:testJsonStoreEnabled");
+
// TODO add tests for the rest of the supported methods
}
};
http://git-wip-us.apache.org/repos/asf/camel/blob/539dd95c/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentProducerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentProducerTest.java b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentProducerTest.java
index 21e4709..c9d9015 100644
--- a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentProducerTest.java
+++ b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentProducerTest.java
@@ -21,13 +21,12 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-
-import facebook4j.Facebook;
-
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.junit.Test;
+import facebook4j.Facebook;
+
public class FacebookComponentProducerTest extends CamelFacebookTestSupport {
private final Set<String> noArgNames = new HashSet<String>();
@@ -84,6 +83,13 @@ public class FacebookComponentProducerTest extends CamelFacebookTestSupport {
assertMockEndpointsSatisfied();
}
+ @Test
+ public void testJsonStoreEnabled() throws Exception {
+ final String rawJSON = template().requestBody("direct://testJsonStoreEnabled", new String[] { "me" }, String.class);
+ assertNotNull("NULL rawJSON", rawJSON);
+ assertFalse("Empty rawJSON", rawJSON.isEmpty());
+ }
+
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@@ -120,6 +126,10 @@ public class FacebookComponentProducerTest extends CamelFacebookTestSupport {
}
}
+ from("direct://testJsonStoreEnabled")
+ .to("facebook://users?inBody=ids&jsonStoreEnabled=true&" + getOauthParams())
+ .setBody(simple("header." + FacebookConstants.RAW_JSON_HEADER));
+
// TODO add tests for the rest of the supported methods
}
};
[2/2] git commit: CAMEL-6804: camel-facebook - Problem with
jsonStoreEnabled option
Posted by da...@apache.org.
CAMEL-6804: camel-facebook - Problem with jsonStoreEnabled option
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7f1c961a
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7f1c961a
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7f1c961a
Branch: refs/heads/master
Commit: 7f1c961a23e27fbd652ed133815253db55865926
Parents: 539dd95
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Oct 1 08:52:08 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Oct 1 08:52:08 2013 +0200
----------------------------------------------------------------------
.../camel/component/facebook/FacebookConsumer.java | 17 ++++++++++++-----
.../camel/component/facebook/FacebookProducer.java | 6 +++---
.../facebook/FacebookComponentProducerTest.java | 6 +++---
3 files changed, 18 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/7f1c961a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java
index 0448a0e..78c4764 100644
--- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java
+++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java
@@ -18,8 +18,19 @@ package org.apache.camel.component.facebook;
import java.lang.reflect.Array;
import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.concurrent.TimeUnit;
+
+import facebook4j.Facebook;
+import facebook4j.Reading;
+import facebook4j.json.DataObjectFactory;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.component.facebook.data.FacebookMethodsType;
@@ -31,10 +42,6 @@ import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import facebook4j.Facebook;
-import facebook4j.Reading;
-import facebook4j.json.DataObjectFactory;
-
import static org.apache.camel.component.facebook.FacebookConstants.FACEBOOK_DATE_FORMAT;
import static org.apache.camel.component.facebook.FacebookConstants.READING_PPROPERTY;
import static org.apache.camel.component.facebook.FacebookConstants.READING_PREFIX;
http://git-wip-us.apache.org/repos/asf/camel/blob/7f1c961a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookProducer.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookProducer.java
index 6a5d695..5819402 100644
--- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookProducer.java
+++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookProducer.java
@@ -21,6 +21,9 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutorService;
+
+import facebook4j.Facebook;
+import facebook4j.json.DataObjectFactory;
import org.apache.camel.AsyncCallback;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
@@ -35,9 +38,6 @@ import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import facebook4j.Facebook;
-import facebook4j.json.DataObjectFactory;
-
import static org.apache.camel.component.facebook.data.FacebookMethodsTypeHelper.MatchType;
import static org.apache.camel.component.facebook.data.FacebookMethodsTypeHelper.filterMethods;
import static org.apache.camel.component.facebook.data.FacebookMethodsTypeHelper.getMissingProperties;
http://git-wip-us.apache.org/repos/asf/camel/blob/7f1c961a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentProducerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentProducerTest.java b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentProducerTest.java
index c9d9015..613d814 100644
--- a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentProducerTest.java
+++ b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentProducerTest.java
@@ -21,12 +21,12 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+
+import facebook4j.Facebook;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.junit.Test;
-import facebook4j.Facebook;
-
public class FacebookComponentProducerTest extends CamelFacebookTestSupport {
private final Set<String> noArgNames = new HashSet<String>();
@@ -85,7 +85,7 @@ public class FacebookComponentProducerTest extends CamelFacebookTestSupport {
@Test
public void testJsonStoreEnabled() throws Exception {
- final String rawJSON = template().requestBody("direct://testJsonStoreEnabled", new String[] { "me" }, String.class);
+ final String rawJSON = template().requestBody("direct://testJsonStoreEnabled", new String[]{"me"}, String.class);
assertNotNull("NULL rawJSON", rawJSON);
assertFalse("Empty rawJSON", rawJSON.isEmpty());
}