Ibm mobilefirst Worklight 6.1 HTTPS适配器:HttpHostConnectException与GET一起异常,但与POST一起成功
Worklight Developer Edition 6.1 我们使用以下代码调用一个简单的HTTPS服务,该服务返回重定向。通过Chrome浏览器,可以使用GET和POST成功调用该服务 使用Chrome Dev HTTP客户端和curl,调用工作正常:Ibm mobilefirst Worklight 6.1 HTTPS适配器:HttpHostConnectException与GET一起异常,但与POST一起成功,ibm-mobilefirst,worklight-adapters,Ibm Mobilefirst,Worklight Adapters,Worklight Developer Edition 6.1 我们使用以下代码调用一个简单的HTTPS服务,该服务返回重定向。通过Chrome浏览器,可以使用GET和POST成功调用该服务 使用Chrome Dev HTTP客户端和curl,调用工作正常: 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="NO
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
在带有GET的适配器中,我们收到一个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
有了一个帖子,我们就成功了:
##################################### 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": [
]
}
《代码》杂志#####################################
函数testFlow(){
变量输入={
路径:'移动',
方法:“post”,
returnedContentType:“普通”
};
返回WL.Server.invokeHttp(输入);
}
###################################回应###################################
{
“错误”:[
],
“信息”:[
],
“isSuccessful”:正确,
“负责人”:{
“连接”:“保持活动状态”,
“内容长度”:“459”,
“内容类型”:“text\/html;charset=iso-8859-1”,
“日期”:“2014年3月25日星期二19:11:11 GMT”,
“保持活动”:“超时=10,最大=100”,
“位置”:“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=”非统一数据IVAa IVDa STA PRE\”,
“服务器”:“IBM_HTTP_服务器”
},
“响应时间”:733,
“状态代码”:302,
“状态原因”:“已找到”,
“文本”:“\n\n302已找到\n\n发现\n文档已移到此处。\n\nIBM\u HTTP\u服务器位于XXX.ca端口443\n”, “总时间”:733, “警告”:[ ] }
也许您没有实现与“post方法”相同的“get方法”。您是否可以检查或粘贴适配器试图调用的代码查看WL.Server.invokeHttp的API文档,它似乎没有将“path”列为它接受的值 从您得到的错误来看,它也不像是在GET上使用它。
连接可能被拒绝,因为它试图连接到而不是?Worklight开发团队目前正在调查这是否是一个bug;如果是,将发布修复程序。这最终导致Worklight出现问题。[
APAR PI14842:HTTPS在使用WL.SERVER.INVOKEHTTP时出现问题()
当HTTPS
GET
请求导致HTTP 302重定向响应时,invokeHttp
方法将暂停,直到超时,然后以
Runtime: Http request failed:
org.apache.http.conn.HttpHostConnectException: Connection to https:\/\/XXX.ca refused
您可以观看APAR PI14842以了解何时有可用的修复程序。这只是HTTPS的问题吗?此外,您是否能够使用Wireshark或类似工具捕获适配器GET?也许对网络流量的仔细检查将有助于了解发生了什么。没有HTTP端点,而且我们还没有私钥,因此无法使用wireshark进行捕获和解密。您没有阅读我的问题吗?它清楚地表明,使用curl、chrome和chromehttp客户端可以很好地工作。那么这个问题的答案是什么呢?我对worklight 5.0也有同样的感受。6@satyaonrails,您需要申请iFix;打开PMR并声明您正在使用5.0.6.x,以及指向此Stackoverflow问题的链接。但是,请事先查看约翰·格雷厄姆的信息。