【问题标题】:WP8 not show error when onFailure invoke http adapter hybrid Mobilefirst 7.1WP8 在 onFailure 调用 http 适配器混合 Mobilefirst 7.1 时不显示错误
【发布时间】:2016-09-22 13:58:10
【问题描述】:

此问题仅在 WP8 上(Android、iOS 和 BB10 都可以)。

调用适配器时的示例代码:

var invocationData = {
    adapter : appAdapterName,
    procedure : 'checkSignature',
    parameters : [arg0, arg1]
};

WL.Client.invokeProcedure(invocationData, {
    onSuccess : checkSignatureSuccess,
    onFailure : checkSignatureFailure
});

处理成功:

function checkSignatureSuccess(result){
    alert("success");
}

处理错误:

function checkSignatureFailure(result){
        alert(result.errorCode);
    }

当我关闭后端服务时,在 Android、iOS 和 BB10 上会显示警报“PROCEDURE_ERROR”。但在 WP8 上,没有显示任何警报。

这是我的后端服务关闭时来自 message.log 的日志。

    response:
Not Found
Server=Apache-Coyote/1.1
Content-Type=text/html;charset=utf-8
Content-Length=1144
Date=Thu, 22 Sep 2016 11:22:05 GMT
<html><head><title>xxxxxxxx</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>xxxxxx: HTTP Status 404 - xxxxxxxxxxxxxxxxxxxxxxxxxxxx</h1><HR size="1" noshade="noshade"><p><b>xxxxxx: type</b> xxxxxx: Status report</p><p><b>xxxxx: message</b> <u>xxxxxxxxxxxxxxxxxxxxxxxxx</u></p><p><b>xxxxxx: description</b> <u>xxxxxxxx: The requested resource is not available.</u></p><HR size="1" noshade="noshade"><h3>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</h3></body></html> [project xxxxx]
[9/22/16 18:20:00:102 ICT] 00000127 om.worklight.integration.services.impl.DataAccessServiceImpl E FWLSE0099E: An error occurred while invoking procedure  [project xxxxx]ApplicationHTTPAdapter/checkSignature:  parameters: [project xxxxx]
TypeError: Cannot read property "Body" from undefined (2016-09-22T17:04:18.759Z/6733847e906e1c3f58643f980a1375aa2209260b/ApplicationHTTPAdapter-impl.js#121)
FWLSE0101E: Caused by:  [project xxxxx]nullorg.mozilla.javascript.EcmaError: TypeError: Cannot read property "Body" from undefined (2016-09-22T17:04:18.759Z/6733847e906e1c3f58643f980a1375aa2209260b/ApplicationHTTPAdapter-impl.js#121)
    at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3687)
    at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3665)
    at org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3693)
    at org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3712)
    at org.mozilla.javascript.ScriptRuntime.undefReadError(ScriptRuntime.java:3725)
    at org.mozilla.javascript.ScriptRuntime.getObjectProp(ScriptRuntime.java:1483)
    at org.mozilla.javascript.gen._2016_09_22T17_04_18_759Z_6733847e906e1c3f58643f980a1375aa2209260b_ApplicationHTTPAdapter_impl_js_3._c_sendRequest_5(2016-09-22T17:04:18.759Z/6733847e906e1c3f58643f980a1375aa2209260b/ApplicationHTTPAdapter-impl.js:121)
    at org.mozilla.javascript.gen._2016_09_22T17_04_18_759Z_6733847e906e1c3f58643f980a1375aa2209260b_ApplicationHTTPAdapter_impl_js_3._c_checkSignature_76(2016-09-22T17:04:18.759Z/6733847e906e1c3f58643f980a1375aa2209260b/ApplicationHTTPAdapter-impl.js:1785)
    at org.mozilla.javascript.gen._2016_09_22T17_04_18_759Z_6733847e906e1c3f58643f980a1375aa2209260b_ApplicationHTTPAdapter_impl_js_3.call(2016-09-22T17:04:18.759Z/6733847e906e1c3f58643f980a1375aa2209260b/ApplicationHTTPAdapter-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._2016_09_22T17_04_18_759Z_6733847e906e1c3f58643f980a1375aa2209260b_ApplicationHTTPAdapter_impl_js_3.call(2016-09-22T17:04:18.759Z/6733847e906e1c3f58643f980a1375aa2209260b/ApplicationHTTPAdapter-impl.js)
    at com.worklight.integration.js.JavaScriptManager.callFunction(JavaScriptManager.java:267)
    at com.worklight.integration.js.JavaScriptManager.invokeFunction(JavaScriptManager.java:241)
    at com.worklight.integration.js.JavaScriptManager.invokeFunction(JavaScriptManager.java:211)
    at com.worklight.integration.services.impl.AdapterManagerImpl.invokeFunction(AdapterManagerImpl.java:113)
    at com.worklight.integration.js.JavaScriptProcedureInvoker.invoke(JavaScriptProcedureInvoker.java:42)
    at com.worklight.integration.model.ProcedureInvoker.invokeProcedure(ProcedureInvoker.java:54)
    at com.worklight.integration.model.Procedure.invoke(Procedure.java:166)
    at com.worklight.integration.services.impl.DataAccessServiceImpl.callProcedureInternal(DataAccessServiceImpl.java:775)
    at com.worklight.integration.services.impl.DataAccessServiceImpl.callProcedure(DataAccessServiceImpl.java:721)
    at com.worklight.integration.services.impl.DataAccessServiceImpl.access$200(DataAccessServiceImpl.java:74)
    at com.worklight.integration.services.impl.DataAccessServiceImpl$3.execute(DataAccessServiceImpl.java:603)
    at com.worklight.core.auth.impl.AuthenticationServiceBean.accessResource(AuthenticationServiceBean.java:82)
    at com.worklight.integration.services.impl.DataAccessServiceImpl.invokeProcedureInternal(DataAccessServiceImpl.java:600)
    at com.worklight.integration.services.impl.DataAccessServiceImpl.invokeProcedure(DataAccessServiceImpl.java:160)
    at com.worklight.gadgets.serving.handler.BackendQueryHandler.getContent(BackendQueryHandler.java:95)
    at com.worklight.gadgets.serving.handler.BackendQueryHandler.doPost(BackendQueryHandler.java:56)
    at com.worklight.gadgets.serving.GadgetAPIServlet.doGetOrPost(GadgetAPIServlet.java:178)
    at com.worklight.gadgets.serving.GadgetAPIServlet.doPost(GadgetAPIServlet.java:135)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
    at com.worklight.gadgets.serving.GadgetAPIServlet.service(GadgetAPIServlet.java:118)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1240)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:760)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:127)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:88)
    at com.worklight.core.auth.impl.AuthenticationFilter$1.execute(AuthenticationFilter.java:224)
    at com.worklight.core.auth.impl.AuthenticationServiceBean.accessResource(AuthenticationServiceBean.java:82)
    at com.worklight.core.auth.impl.AuthenticationFilter.doFilter(AuthenticationFilter.java:229)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:85)
    at com.worklight.analytics.AnalyticsFilter.doFilter(AnalyticsFilter.java:124)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:85)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:949)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1029)
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:78)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:885)
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:252)
    at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:584)
    at com.ibm.ws.threading.internal.Worker.executeWork(Worker.java:439)
    at com.ibm.ws.threading.internal.Worker.run(Worker.java:421)
    at java.lang.Thread.run(Thread.java:745)

                                 com.worklight.common.log.filters.ErrorFilter

【问题讨论】:

  • 你能试试 ////// function checkSignatureFailure(result){ alert(JSON.stringify(result)); } ////// 只是为了查看是否有任何响应到达客户端。另外,如果您等待 30 秒,您会看到错误回调触发吗?只是想看看它是否在等待默认的 30 秒超时时间
  • Hai Vivin,非常感谢您的回复。我试图使用 JSON.stringify(result) 并且仍然没有收到任何响应。我也等到 30 秒并且没有收到错误代码“REQUEST_TIMEOUT”。有一段时间,我在这种情况下使用 setTimeout javascript 函数并且仅用于 WP8 平台,直到我找到了这种情况的解决方案。呵呵。如果您有任何其他建议,请告诉我。无论如何,谢谢 Vivin。

标签: windows-phone-8 ibm-mobilefirst hybrid-mobile-app worklight-adapters mobilefirst-adapters


【解决方案1】:

Windows Phone 不支持alert 方法的显示。相反,您需要想出一种不同的方式在您的应用程序中向最终用户显示提示。

例如,使用这个:Prompt in Windows Phone

navigator.notification.alert(
    'You are the winner!',  // message
    alertDismissed,         // callback
    'Game Over',            // title
    'Done'                  // buttonName
);

function alertDismissed() {
    // do something
}

【讨论】:

  • Hai Idan,无论如何感谢您的回答,但我认为问题不在于警报方法。因为,如果我再次打开我的后端服务,WP8 会显示警报“成功”。我尝试使用更改页面事件 jquery mobile 更改警报方法,但 WP8 仍然无法读取它。看起来 WP8 没有收到来自 WL.Client.invokeProcedure 的任何响应。
猜你喜欢
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多