I’m no psychic but I bet you two things: This holiday you already took a bunch of pictures that went straight into facebook and you drank A LOT. Now you’ll probably edit your photos in the morning, but it seems a shame to lose those drunken shots.  What if you could save them? Let’s see how you can do that using Mule. We’ll see how we can make an app that pulls all our photos and upload them into box.

Getting Started On Facebook

So, we’ll need to consume both the facebook API and the Box API. This requires to register new applications on both services, get api keys, etc… I will not go over these topics in this post since they have already been covered previously. There’s a great post by Tom Stroobants about how to set a facebook application and connecting to it using Mule’s Facebook cloud connector. If you are familiar with it you may continue reading, otherwise I suggest to take a look at this post.

Get yourself in the box

As for Box, the process of  setting up a Box application and authenticating to it was also covered in this post. Again, you can go ahead if familiar with it, reading is suggested before continuing.

Install the connectors in Studio

Last thing before we begin: You need to install the latest versions of the box and facebook connectors in Mule Studio. They’re available through Studio’s cloud connectors update site. To install simply:

  1. Open Studio and go to the Help menu -> Install new software
  2. Select the mule cloud connector update site and check the box and facebook connectors
  3. Click ok and follow the wizard

Creating the Flow

Let’s first take a look at the complete flow and then let’s analyze each step. Now if your head is still hurting and you want to just skip this for now and cut n’ paste the code you can grab the Mule config here and paste into your flow. Note that you’ll need to add your API keys, so use this template for the file in src/main/mule-app.properties and fill in the blanks with the information above.

tldr;

Step 1: Listen to others

So, we begin with a simple http inbound endpoint. This is just for starting the process. In this example, this is a request-response endpoint since we’d like to provide the user with a friendly message saying that the synchronization has started. We will elaborate on this on step 2.

Step 2: Don’t keep people waiting

This process requires downloading quite a few photos and then upload them back to Box. This is a process that can take a while and we don’t want to hold up resources by maintaining the http connection alive, and most importantly we don’t want to hold up the user waiting for a response. The <async> processor comes handy for this end. We’ll use it by wrapping the message processors that make for this long running processing. What Mule will do next is to begin execution of those processors in a background thread, while the main thread that is attending the original http call will jump to the next processor that’s not contained into the <async> construct (in this case, it will jump straight to step 9)

Step 3: Know yourself

We begin the cloud party by pulling down your photos. So we go to the Cloud Connectors pallete in Studio and throw in a Facebook component into the flow. Then double click in it and configure the Get User Photos operation as shown in this pic:

A couple of notes on this config:

  • This processor sets the message payload to a list of pojos of class com.restfb.types.Photo. Each one of these instances represent a photo on facebook and contain the necessary information to manipulate the photo such as id, source URL, etc., but it does not contain the photo’s byte stream.
  • This config actually works! Values like “me”, “last year” and “today” are actually valid on Facebook API and mean exactly what you imagine they mean. How cool is that?!!
  • I’m not such a big facebook user so I took a wide range in order to get a lot of pics. Moving forward, you could consider setting the since-until parameters to “yesterday”-”now” and have this flow execute automatically every night… Whatever is the most useful for you ;)

Step 4: You need repeatable routines

Now we need to iterate through this photo collection and download/upload each one of them. The <foreach> processor  introduced in Mule 3.3 is just what you need for this. Since the collection to be iterated is placed on the message payload, you can just drag & drop it from the scopes pallete without the need of setting up anything else. What you shouldn’t loose sight of is that just as step 3 and 4 are embedded inside an <async> component, steps 5 to 8 will be embedded inside the <for-each> and thus the payload those message processors are going to receive are one single instance of com.restfb.types.Photo.

Step 5: Call things by their name

Just as in any other storage system, each file in the Box must have a name. Using the goodies of the Mule Expression Language (MEL) also introduced in Mule 3.3, we will easily generate a filename using the photo’s id and we’ll store it into a flow variable. Just go to the transformers pallete, throw in a Variable component and configure it like this:

NOTE: The decision of  generating the filename using the photo’s id is merely a simplicity call. You can use whatever criteria you’d like!

Step 6: Go get what you want

As we said before, the Photo object we have only contains information about the photo but not the photo’s bytes. In version 2.0 of the facebook connector we are introducing a new operation called Download Image that provides a Byte[] of any given image. It is very easy to use, just drop another facebook box on the flow and set it like this:

 Step 7: Don’t cross the streams!

The message payload is now the photo’s Byte array.  On the other hand, the Box connector needs an InputStream to upload the photo. So, we go to the transformers pallete and drop a Groovy transformer. This transformer will have a very simple configuration that looks like this:

Step 8: Learn to share

Ok, this is it, now it’s time to upload the photo. Go to the cloud connectors pallete, throw a Box component and make it look like this:

Step 9: Always be polite!

So, we are now out of the <for-each> block and also out of the <async> block. However, notice that it wouldn’t be acqurate to say that the execution flow has reached step 9, because as explained before the execution of the <async> flow moved to another thread and the main one moved immediately to this last step. This last processor is just about letting the user know we’re working on his request. We’ll just set the payload to a nice and polite string using the Set Payload component in the transformers pallette like this:

This is when the beauty of the <async> processor manifest itself. The user gets this response before the API request in Step 3 even reaches facebook!

Summary

And this is it! A 9 step program to upload your facebook photos to Box. As an example of the end result, here’s a screenshoot from my Box account showing my wife an I getting married. Wait, did anybody say wedding?. Bring in more Alcohol!

Final Notes:

  • Remember that you need the authentication flows. Again, this is explained in the prior posts referenced at the beginning of this article.
  • When configuring the facebook connector, keep in mind that you need to request the “user_photos” and “friends_photos” scopes while doing the OAuth2 authorization.
  • For reference, you can download this sample application here. To install, do a git clone and then File-> Import in Mule Studio.

I hope you feel this exited about the simplicity of it as I do. Feel free to reach in if you have any comments or questions.

No related posts.

Interested in 3 days of knowledge sharing, hands-on labs, industry focused sessions, and plenty of networking? Register for the premier integration event, CONNECT London »

5 Responses to “Mule up your holiday’s pics: from Facebook to Box”

questans January 2nd, 2013, 2:49 am

Hi Mariano, The facebook connector for Mulesoft available is failing extract expiration time (as the regex patterns are incorrect) & refresh token(which is not part of the response I believe) and eventually the OAuthAccessTokenId key is removed, no further operations can be performed in FB, please suggest solution for this as I need to use this

Mariano Gonzalez January 2nd, 2013, 8:36 am

Hello questans… Strange what you mention because it is working for me. Anyway, I have sent this feedback to the cloud connectors team and they’re looking into it.

Thank you so much for the feedback!

Regards

questans January 3rd, 2013, 12:08 am

Thanks Mariano,

Please find below the stack trace for the exception I’m getting:

DEBUG 2013-01-03 13:00:02,414
[[modifiedfacebookconnector].connector.http.mule.default.receiver.03]
org.mule.module.facebook.adapters.FacebookConnectorOAuth2Adapter:
Retrieving access token…
DEBUG 2013-01-03 13:00:02,555
[HttpClient-connection-cleaner-connector.http.mule.default]
org.apache.commons.httpclient.util.IdleConnectionHandler: Checking for
connections, idleTimeout: 1357198199555
DEBUG 2013-01-03 13:00:02,561
[[modifiedfacebookconnector].connector.http.mule.default.receiver.03]
org.mule.module.facebook.adapters.FacebookConnectorOAuth2Adapter: Sending
request to [https://graph.facebook.com/oauth/access_token] using the
following as content
[code=3DAQBkwDHQJX0eRR2ubn-zvhGvUAW9wL7Bsl7MqpxAuJsM4IqomipUjpr_g3T2Qd1EiwQ=
VjzoWH1b_nz4txbj9C41dLRxA-MyzPmmal3Yao-QYGLdmNPhLkNOQFb3nQDO5NnA_tSX4dyQ20K=
E-WyL4c1FJiFY5gKmJey5z1xmVMeR8VvTHHOOK3Zlv5J8AVOSq9YNsM9NJjUFXcEs1CGJ6ZUNH&=
client_id=3D469693893077541&client_secret=3Dcf584b67bb65147f4709fb344530c6f=
b&grant_type=3Dauthorization_code&redirect_uri=3Dhttp%3A%2F%2Flocalhost%3A8=
078%2Fauthorization]
DEBUG 2013-01-03 13:00:03,555
[HttpClient-connection-cleaner-connector.http.mule.default]
org.apache.commons.httpclient.util.IdleConnectionHandler: Checking for
connections, idleTimeout: 1357198200555
DEBUG 2013-01-03 13:00:04,427
[[modifiedfacebookconnector].connector.http.mule.default.receiver.03]
org.mule.module.facebook.adapters.FacebookConnectorOAuth2Adapter: Received
response
[access_token=3DAAAGrLyGmaiUBADwlWRhUZAZBxcxy9fUVzZAJe1jSzhYe4dlZCZCPoapMmQ=
78K5jrrRhNWcUsmcOR8p8YCzrMyFa888EQNur0FOwZCfa664wwZDZD&expires=3D5107279]
DEBUG 2013-01-03 13:00:04,428
[[modifiedfacebookconnector].connector.http.mule.default.receiver.03]
org.mule.module.facebook.adapters.FacebookConnectorOAuth2Adapter: Access
token retrieved successfully [accessToken =3D
AAAGrLyGmaiUBADwlWRhUZAZBxcxy9fUVzZAJe1jSzhYe4dlZCZCPoapMmQ78K5jrrRhNWcUsmc=
OR8p8YCzrMyFa888EQNur0FOwZCfa664wwZDZD]

DEBUG 2013-01-03 13:00:04,428
[[modifiedfacebookconnector].connector.http.mule.default.receiver.03]
org.mule.module.facebook.adapters.FacebookConnectorOAuth2Adapter:
Attempting to extract expiration time using [expirationPattern =3D
expires_in=3D([^&]+?)$]
DEBUG 2013-01-03 13:00:04,428
[[modifiedfacebookconnector].connector.http.mule.default.receiver.03]
org.mule.module.facebook.adapters.FacebookConnectorOAuth2Adapter: Token
expiration could not be extracted from [response =3D
access_token=3DAAAGrLyGmaiUBADwlWRhUZAZBxcxy9fUVzZAJe1jSzhYe4dlZCZCPoapMmQ7=
8K5jrrRhNWcUsmcOR8p8YCzrMyFa888EQNur0FOwZCfa664wwZDZD&expires=3D5107279]

DEBUG 2013-01-03 13:00:04,428
[[modifiedfacebookconnector].connector.http.mule.default.receiver.03]
org.mule.module.facebook.adapters.FacebookConnectorOAuth2Adapter:
Attempting to extract refresh token time using [refreshTokenPattern =3D
"refresh_token":"([^&]+?)"]
DEBUG 2013-01-03 13:00:04,428
[[modifiedfacebookconnector].connector.http.mule.default.receiver.03]
org.mule.module.facebook.adapters.FacebookConnectorOAuth2Adapter: Refresh
token could not be extracted from [response =3D
access_token=3DAAAGrLyGmaiUBADwlWRhUZAZBxcxy9fUVzZAJe1jSzhYe4dlZCZCPoapMmQ7=
8K5jrrRhNWcUsmcOR8p8YCzrMyFa888EQNur0FOwZCfa664wwZDZD&expires=3D5107279]

DEBUG 2013-01-03 13:00:04,555
[HttpClient-connection-cleaner-connector.http.mule.default]
org.apache.commons.httpclient.util.IdleConnectionHandler: Checking for
connections, idleTimeout: 1357198201555
DEBUG 2013-01-03 13:00:05,555
[HttpClient-connection-cleaner-connector.http.mule.default]
org.apache.commons.httpclient.util.IdleConnectionHandler: Checking for
connections, idleTimeout: 1357198202555
WARN 2013-01-03 13:00:05,598
[[modifiedfacebookconnector].connector.http.mule.default.receiver.03]
org.mule.DefaultMuleMessage: setProperty(key, value) called with null
value; removing key: OAuthAccessTokenId; please report the following stack
trace to dev@mule.codehaus.org
java.lang.Throwable
at org.mule.DefaultMuleMessage.setProperty(DefaultMuleMessage.java:457)
at
org.mule.DefaultMuleMessage.setInvocationProperty(DefaultMuleMessage.java:4=
27)
at
org.mule.module.facebook.oauth.FetchAccessTokenMessageProcessor.process(Fet=
chAccessTokenMessageProcessor.java:59)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute=
(MessageProcessorNotificationExecutionInterceptor.java:46)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMess=
ageProcessorChain.java:93)
at
org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMess=
ageProcessorChain.java:66)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper.doProcess(Interc=
eptingChainLifecycleWrapper.java:57)
at
org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMess=
ageProcessorChain.java:66)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper.access$001(Inter=
ceptingChainLifecycleWrapper.java:29)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper$1.process(Interc=
eptingChainLifecycleWrapper.java:90)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute=
(MessageProcessorNotificationExecutionInterceptor.java:46)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper.process(Intercep=
tingChainLifecycleWrapper.java:85)
at
org.mule.api.processor.MessageProcessors$LifecyleAwareMessageProcessorWrapp=
er.process(MessageProcessors.java:114)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute=
(MessageProcessorNotificationExecutionInterceptor.java:46)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMess=
ageProcessorChain.java:93)
at
org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMess=
ageProcessorChain.java:66)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.AbstractInterceptingMessageProcessorBase.processNext(Abs=
tractInterceptingMessageProcessorBase.java:105)
at
org.mule.processor.AsyncInterceptingMessageProcessor.process(AsyncIntercept=
ingMessageProcessor.java:98)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute=
(MessageProcessorNotificationExecutionInterceptor.java:46)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMess=
ageProcessorChain.java:93)
at
org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMess=
ageProcessorChain.java:66)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.AbstractInterceptingMessageProcessorBase.processNext(Abs=
tractInterceptingMessageProcessorBase.java:105)
at
org.mule.interceptor.AbstractEnvelopeInterceptor.process(AbstractEnvelopeIn=
terceptor.java:55)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute=
(MessageProcessorNotificationExecutionInterceptor.java:46)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.AbstractInterceptingMessageProcessorBase.processNext(Abs=
tractInterceptingMessageProcessorBase.java:105)
at
org.mule.processor.AbstractFilteringMessageProcessor.process(AbstractFilter=
ingMessageProcessor.java:44)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute=
(MessageProcessorNotificationExecutionInterceptor.java:46)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.AbstractInterceptingMessageProcessorBase.processNext(Abs=
tractInterceptingMessageProcessorBase.java:105)
at
org.mule.construct.AbstractPipeline$1.process(AbstractPipeline.java:102)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute=
(MessageProcessorNotificationExecutionInterceptor.java:46)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMess=
ageProcessorChain.java:93)
at
org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMess=
ageProcessorChain.java:66)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper.doProcess(Interc=
eptingChainLifecycleWrapper.java:57)
at
org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMess=
ageProcessorChain.java:66)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper.access$001(Inter=
ceptingChainLifecycleWrapper.java:29)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper$1.process(Interc=
eptingChainLifecycleWrapper.java:90)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute=
(MessageProcessorNotificationExecutionInterceptor.java:46)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper.process(Intercep=
tingChainLifecycleWrapper.java:85)
at
org.mule.construct.AbstractPipeline$3.process(AbstractPipeline.java:194)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute=
(MessageProcessorNotificationExecutionInterceptor.java:46)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.chain.SimpleMessageProcessorChain.doProcess(SimpleMessag=
eProcessorChain.java:47)
at
org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMess=
ageProcessorChain.java:66)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper.doProcess(Interc=
eptingChainLifecycleWrapper.java:57)
at
org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMess=
ageProcessorChain.java:66)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper.access$001(Inter=
ceptingChainLifecycleWrapper.java:29)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper$1.process(Interc=
eptingChainLifecycleWrapper.java:90)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute=
(MessageProcessorNotificationExecutionInterceptor.java:46)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper.process(Intercep=
tingChainLifecycleWrapper.java:85)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute=
(MessageProcessorNotificationExecutionInterceptor.java:46)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.chain.SimpleMessageProcessorChain.doProcess(SimpleMessag=
eProcessorChain.java:47)
at
org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMess=
ageProcessorChain.java:66)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper.doProcess(Interc=
eptingChainLifecycleWrapper.java:57)
at
org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMess=
ageProcessorChain.java:66)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper.access$001(Inter=
ceptingChainLifecycleWrapper.java:29)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper$1.process(Interc=
eptingChainLifecycleWrapper.java:90)
at
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execut=
e(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at
org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute=
(MessageProcessorNotificationExecutionInterceptor.java:46)
at
org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcess=
orExecutionTemplate.java:43)
at
org.mule.processor.chain.InterceptingChainLifecycleWrapper.process(Intercep=
tingChainLifecycleWrapper.java:85)
at
org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageRece=
iver.java:220)
at
org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageRece=
iver.java:202)
at
org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageRece=
iver.java:194)
at
org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageRece=
iver.java:181)
at
org.mule.transport.http.HttpMessageReceiver$HttpWorker$1.process(HttpMessag=
eReceiver.java:311)
at
org.mule.transport.http.HttpMessageReceiver$HttpWorker$1.process(HttpMessag=
eReceiver.java:306)
at
org.mule.execution.ExecuteCallbackInterceptor.execute(ExecuteCallbackInterc=
eptor.java:20)
at
org.mule.execution.HandleExceptionInterceptor.execute(HandleExceptionInterc=
eptor.java:34)
at
org.mule.execution.HandleExceptionInterceptor.execute(HandleExceptionInterc=
eptor.java:18)
at
org.mule.execution.BeginAndResolveTransactionInterceptor.execute(BeginAndRe=
solveTransactionInterceptor.java:58)
at
org.mule.execution.ResolvePreviousTransactionInterceptor.execute(ResolvePre=
viousTransactionInterceptor.java:48)
at
org.mule.execution.SuspendXaTransactionInterceptor.execute(SuspendXaTransac=
tionInterceptor.java:54)
at
org.mule.execution.ValidateTransactionalStateInterceptor.execute(ValidateTr=
ansactionalStateInterceptor.java:44)
at
org.mule.execution.IsolateCurrentTransactionInterceptor.execute(IsolateCurr=
entTransactionInterceptor.java:44)
at
org.mule.execution.ExternalTransactionInterceptor.execute(ExternalTransacti=
onInterceptor.java:52)
at
org.mule.execution.RethrowExceptionInterceptor.execute(RethrowExceptionInte=
rceptor.java:32)
at
org.mule.execution.RethrowExceptionInterceptor.execute(RethrowExceptionInte=
rceptor.java:17)
at
org.mule.execution.TransactionalErrorHandlingExecutionTemplate.execute(Tran=
sactionalErrorHandlingExecutionTemplate.java:113)
at
org.mule.execution.TransactionalErrorHandlingExecutionTemplate.execute(Tran=
sactionalErrorHandlingExecutionTemplate.java:34)
at
org.mule.transport.http.HttpMessageReceiver$HttpWorker.doRequest(HttpMessag=
eReceiver.java:305)
at
org.mule.transport.http.HttpMessageReceiver$HttpWorker.processRequest(HttpM=
essageReceiver.java:251)
at
org.mule.transport.http.HttpMessageReceiver$HttpWorker.run(HttpMessageRecei=
ver.java:163)
at org.mule.work.WorkerContext.run(WorkerContext.java:311)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
DEBUG 2013-01-03 13:00:05,607
[[modifiedfacebookconnector].connector.http.mule.default.receiver.03]
org.mule.processor.chain.DefaultMessageProcessorChain: Invoking
DefaultMessageProcessorChain '(inner iterating chain) of
'ModifiedFacebookConnectorFlow1' processor chain'

Ron Zamkadny June 6th, 2013, 12:53 am

Facebook Connector receives the “code” from the fb, but do not make GET-request to auth service to receive “access_token”!

Mariano Gonzalez June 7th, 2013, 8:03 am

Hello Ron,

We’ve been using the connector this week and it works just fine for us. Could you provide your app’s config and the connector version you’re using?

Thanks

Leave a Comment