我正在部署一个worklight http适配器,该适配器只有一个方法可以从DB中检索某些内容并将其映射到path / foo / bar / 1
在websphere控制台中,我可以看到我的应用程序已启动且日志中没有错误,但是当我从Mobile First App调用适配器时,我得到了这个json响应:
{
"errors": [
"Runtime: Failed to parse JSON string
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /foo/bar/1 was not found on this server.</p>
<hr>
<address>IBM_HTTP_Server at my.server.edu Port XXX</address>
</body></html>"
],
"info": [
],
"isSuccessful": false,
"warnings": [
]
}
我知道适配器正在工作,因为它至少返回此错误响应。但问题是,如果我看到它在websphere控制台中启动,我的应用程序无法找到?我已经尝试停止它并再次启动它并检查部署描述符并且看起来很好。
<application id="Application_ID" version="5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" >
<display-name> myApp</display-name>
<module>
<web>
<web-uri> myApp.war</web-uri>
<context-root> foo</context-root>
</web>
</module>
</application>
调用适配器后,在日志中我可以看到
[Wed Jun 15 10:00:28 2016] [错误] [客户端XX.XX.XXX.XXX]文件不存在:/ opt / IBM / HTTPServer / htdocs / foo
XX.XX.XXX.XXX - - [15 / Jun / 2016:12:03:10 -0500]“GET / foo / bar / 1 HTTP / 1.1”404 301
我用谷歌搜索信息进行故障排除,但我仍然无法找出根本原因。任何有关继续排除故障的帮助都表示赞赏。
答案 0 :(得分:2)
error_log条目表示WAS WebServer插件(假设它在基于Apache的服务器中配置)不认为它对/ foo的请求负责。
通常,插件从appciation服务器上生成的plugin-cfg.xml中读取应用程序上下文根。您是否在Web服务器系统上更新并将/ foo视为上下文根?
答案 1 :(得分:1)
什么版本的&#39; Worklight&#39; (或IBM MobileFirst Platform)您使用的是?鉴于您听起来正在尝试将适配器作为REST调用进行调用,我假设您使用的是7.0或更高版本,因为这是首次引入REST对适配器的支持。
您提到您已将适配器映射到/ foo / bar / 1,但请注意适配器URL遵循以下模式:
*(pointer+offset)
其中http(s)://<server>:<port>/<Context>/adapters/<adapter-name>/*
是项目的名称,<Context>
是Javascript适配器中方法的名称。
如果您使用*
客户端API从移动应用中调用适配器,则只需提供WLResourceRequest
部分,其余部分将自动处理