Question

Worklight Developer Edition 6.1.

We are using the following code to call a simple HTTPS service that returns a redirect. From a Chrome browser the service can be called successfully with GET and POST.

With the Chrome Dev HTTP Client as well as with curl the call works fine:

curl -I https://XXX.ca/mobile
HTTP/1.1 302 Found
Date: Tue, 25 Mar 2014 20:50:21 GMT
Server: IBM_HTTP_Server
P3P: CP="NON UNI DEM IVAa IVDa STA PRE"
Location: https://XXX.ca/auth/Login?GAREASONCODE=-1&GARESOURCEID=sbip19&GAURI=https://XXX.ca/mobile&Reason=-1&APPID=sbip19&URI=https://XXX.ca/
mobile
Content-Type: text/html; charset=iso-8859-1

In an adapter with GET, we receive an HttpHostConnectException:

function testFlow() {
    var input = {
        path: 'mobile',
        method : 'get',
        returnedContentType : 'plain'
    };

    return WL.Server.invokeHttp(input);
}

################################## Response ####################################

{
   "errors": [
      "Runtime: Http request failed: org.apache.http.conn.HttpHostConnectException: Connection to https:\/\/XXX.ca refused"
   ],
   "info": [
   ],
   "isSuccessful": false,
   "warnings": [
   ]
}

################################### Exception ##################################

[ERROR   ] FWLSE0099E: An error occurred while invoking procedure  [project LinkMobileWave0]authenticate/HttpRequestFWLSE0100E:  parameters: [project LinkMobileWave0]
Http request failed: org.apache.http.conn.HttpHostConnectException: Connection to https://XXX.ca refused
FWLSE0101E: Caused by:  [project LinkMobileWave0]org.apache.http.conn.HttpHostConnectException: Connection to https://XXX.ca refusedjava.lang.RuntimeException: Http request failed: org.apache.http.conn.HttpHostConnectException: Connection to https://XXX.ca refused
    at com.worklight.adapters.http.HTTPConnectionManager.execute(HTTPConnectionManager.java:241)
    at com.worklight.adapters.http.HttpClientContext.doExecute(HttpClientContext.java:176)
    at com.worklight.adapters.http.HttpClientContext.execute(HttpClientContext.java:160)
    at com.worklight.adapters.http.HTTP.execRequest(HTTP.java:144)
    at com.worklight.adapters.http.HTTP.invoke(HTTP.java:133)
    at com.worklight.integration.model.ProcedureInvoker.invokeProcedure(ProcedureInvoker.java:57)
    at com.worklight.integration.model.Procedure.invoke(Procedure.java:166)
    at com.worklight.integration.model.InvocationContext.call(InvocationContext.java:169)
    at com.worklight.integration.model.InvocationContext.call(InvocationContext.java:38)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at com.worklight.integration.model.InvocationContext$DirectExecutorService.execute(InvocationContext.java:284)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:132)
    at com.worklight.integration.model.InvocationContext.submit(InvocationContext.java:138)
    at com.worklight.integration.model.InvocationContextManager.submitInvocation(InvocationContextManager.java:58)
    at com.worklight.integration.services.impl.DataAccessServiceImpl.callProcedure(DataAccessServiceImpl.java:497)
    at com.worklight.integration.services.impl.DataAccessServiceImpl.access$100(DataAccessServiceImpl.java:56)
    at com.worklight.integration.services.impl.DataAccessServiceImpl$4.execute(DataAccessServiceImpl.java:392)
    at com.worklight.core.auth.impl.AuthenticationServiceBean.accessResource(AuthenticationServiceBean.java:76)
    at com.worklight.integration.services.impl.DataAccessServiceImpl.invokeProcedureInternal(DataAccessServiceImpl.java:389)
    at com.worklight.integration.services.impl.DataAccessServiceImpl.invokeDynamicProcedure(DataAccessServiceImpl.java:456)
    at com.worklight.integration.services.impl.DataAccessServiceImpl.invokeDynamicProcedureWithEnclosingProcedureProperties(DataAccessServiceImpl.java:440)
    at com.worklight.integration.js.JavaScriptIntegrationLibraryImplementation.invokeDynamicProcedureWithEnclosingProcedureProperties(JavaScriptIntegrationLibraryImplementation.java:136)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:126)
    at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:225)
    at org.mozilla.javascript.optimizer.OptRuntime.callN(OptRuntime.java:52)
    at org.mozilla.javascript.gen._integration_js_1._c_anonymous_10(/integration.js:95)
    at org.mozilla.javascript.gen._integration_js_1.call(/integration.js)
    at org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32)
    at org.mozilla.javascript.gen._5C_5Cvmware_host_5CShared_Folders_5CDocuments_5Cwin_workspace_5CLinkMobileWave0_5Cadapters_5Cauthenticate_authenticate_impl_js_4._c_testFlow_5(%5C%5Cvmware-host%5CShared+Folders%5CDocuments%5Cwin_workspace%5CLinkMobileWave0%5Cadapters%5Cauthenticate/authenticate-impl.js:281)
    at org.mozilla.javascript.gen._5C_5Cvmware_host_5CShared_Folders_5CDocuments_5Cwin_workspace_5CLinkMobileWave0_5Cadapters_5Cauthenticate_authenticate_impl_js_4.call(%5C%5Cvmware-host%5CShared+Folders%5CDocuments%5Cwin_workspace%5CLinkMobileWave0%5Cadapters%5Cauthenticate/authenticate-impl.js)
    at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394)
    at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091)
    at org.mozilla.javascript.gen._5C_5Cvmware_host_5CShared_Folders_5CDocuments_5Cwin_workspace_5CLinkMobileWave0_5Cadapters_5Cauthenticate_authenticate_impl_js_4.call(%5C%5Cvmware-host%5CShared+Folders%5CDocuments%5Cwin_workspace%5CLinkMobileWave0%5Cadapters%5Cauthenticate/authenticate-impl.js)
    at com.worklight.integration.js.JavaScriptManager.callFunction(JavaScriptManager.java:240)
    at com.worklight.integration.js.JavaScriptManager.invokeFunction(JavaScriptManager.java:214)
    at com.worklight.integration.js.JavaScriptManager.invokeFunction(JavaScriptManager.java:194)
    at com.worklight.integration.services.impl.AdapterManagerImpl.invokeFunction(AdapterManagerImpl.java:104)
    at com.worklight.integration.js.JavaScriptProcedureInvoker.invoke(JavaScriptProcedureInvoker.java:42)
    at com.worklight.integration.model.ProcedureInvoker.invokeProcedure(ProcedureInvoker.java:57)
    at com.worklight.integration.model.Procedure.invoke(Procedure.java:166)
    at com.worklight.integration.model.InvocationContext.call(InvocationContext.java:169)
    at com.worklight.integration.model.InvocationContext.call(InvocationContext.java:38)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at com.worklight.server.util.ProjectLocal$1RunnableWrapper.run(ProjectLocal.java:267)
    at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.http.conn.HttpHostConnectException: Connection to https://XXX.ca refused
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:158)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
    at com.worklight.adapters.http.HTTPConnectionManager.execute(HTTPConnectionManager.java:239)
    ... 50 more
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:618)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:375)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
    ... 56 more

With a POST we are successful:

##################################### POST #####################################

function testFlow() {
    var input = {
        path: 'mobile',
        method : 'post',
        returnedContentType : 'plain'
    };

    return WL.Server.invokeHttp(input);
}

################################### Response ###################################

{
   "errors": [
   ],
   "info": [
   ],
   "isSuccessful": true,
   "responseHeaders": {
      "Connection": "Keep-Alive",
      "Content-Length": "459",
      "Content-Type": "text\/html; charset=iso-8859-1",
      "Date": "Tue, 25 Mar 2014 19:11:11 GMT",
      "Keep-Alive": "timeout=10, max=100",
      "Location": "https:\/\/XXX.ca\/auth\/Login?GAREASONCODE=-1&GARESOURCEID=sbip19&GAURI=https:\/\/XXX.ca:443\/mobile&Reason=-1&APPID=sbip19&URI=https:\/\/XXX.ca:443\/mobile",
      "P3P": "CP=\"NON UNI DEM IVAa IVDa STA PRE\"",
      "Server": "IBM_HTTP_Server"
   },
   "responseTime": 733,
   "statusCode": 302,
   "statusReason": "Found",
   "text": "<!DOCTYPE HTML PUBLIC \"-\/\/IETF\/\/DTD HTML 2.0\/\/EN\">\n<html><head>\n<title>302 Found<\/title>\n<\/head><body>\n<h1>Found<\/h1>\n<p>The document has moved <a href=\"https:\/\/XXX.ca\/auth\/Login?GAREASONCODE=-1&GARESOURCEID=sbip19&GAURI=https:\/\/XXX.ca:443\/mobile&Reason=-1&APPID=sbip19&URI=https:\/\/XXX.ca:443\/mobile\">here<\/a>.<\/p>\n<hr>\n<address>IBM_HTTP_Server at XXX.ca Port 443<\/address>\n<\/body><\/html>",
   "totalTime": 733,
   "warnings": [
   ]
}
Was it helpful?

Solution 2

This is currently being investigated by the Worklight development team to find whether this is a bug or not; if yes, a fix will be published.

OTHER TIPS

This ended up being a Worklight problem. [APAR PI14842: HTTPS GET PROBLEM WHEN USING WL.SERVER.INVOKEHTTP] (http://www.ibm.com/support/docview.wss?uid=swg1PI14842)

When an HTTPS GET request results in a HTTP 302 redirect response, the invokeHttp method will stall until it times out and then ends with

Runtime: Http request failed:
org.apache.http.conn.HttpHostConnectException: Connection to https:\/\/XXX.ca refused

You can watch APAR PI14842 to find out when a fix will be available.

Perhaps you did not implement the "get method" as the same with "post method". Could you check or paste the codes the adapter trying to invoke

Looking at the API docs for WL.Server.invokeHttp, it doesn't seem like 'path' is listed as values it accepts.

From the error you are getting, it also doesn't seem like it's using it either on a GET. The connection is probably being refused because it attempts to connect to https://XXX.ca instead of https://XXX.ca/mobile ?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top