请求时找不到在 websphere 中部署的应用程序
Deployed application in websphere it's not found when requesting it
我正在部署一个 worklight http 适配器,它有一个单一的方法来从数据库中检索一些东西并且它被映射到路径 /foo/bar/1
在 websphere 控制台中,我可以看到我的应用程序已经启动并且日志中没有错误,但是当我从移动优先应用程序调用适配器时,我得到这个 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": [
]
}
我知道适配器正在工作,因为它 returns 至少响应了这个错误。但问题是,如果我看到它在 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>
调用适配器后,在日志中我可以看到
[2016 年 6 月 15 日星期三 10:00:28] [错误] [客户端 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
我已经在谷歌上搜索了信息以进行故障排除,但我仍然无法找出根本原因。任何有助于继续进行故障排除的帮助,我们都将不胜感激。
error_log 条目表示 WAS WebServer 插件(假设它已在基于 Apache 的服务器中配置)认为它不负责对 /foo 的请求。
通常情况下,插件会从应用服务器上生成的插件-cfg.xml 中读取应用程序上下文根。您的网络服务器系统是最新的并且知道 /foo 是上下文根吗?
您使用的是什么版本的 'Worklight'(或 IBM MobileFirst Platform)?鉴于听起来您正在尝试将适配器作为 REST 调用来调用,我假设您使用的是 7.0 或更高版本,因为这是首次引入对适配器的 REST 支持的时间。
您提到您已将适配器映射到 /foo/bar/1,但请注意适配器 URL 遵循以下模式:
http(s)://<server>:<port>/<Context>/adapters/<adapter-name>/*
其中 <Context>
是您的项目名称,*
是您的 Javascript 适配器中方法的名称。
如果您使用 WLResourceRequest
客户端 API 从移动应用程序调用您的适配器,您应该只需要提供 <adapter-name>/*
部分,其余的将是自动处理。
我正在部署一个 worklight http 适配器,它有一个单一的方法来从数据库中检索一些东西并且它被映射到路径 /foo/bar/1
在 websphere 控制台中,我可以看到我的应用程序已经启动并且日志中没有错误,但是当我从移动优先应用程序调用适配器时,我得到这个 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": [
]
}
我知道适配器正在工作,因为它 returns 至少响应了这个错误。但问题是,如果我看到它在 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>
调用适配器后,在日志中我可以看到
[2016 年 6 月 15 日星期三 10:00:28] [错误] [客户端 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
我已经在谷歌上搜索了信息以进行故障排除,但我仍然无法找出根本原因。任何有助于继续进行故障排除的帮助,我们都将不胜感激。
error_log 条目表示 WAS WebServer 插件(假设它已在基于 Apache 的服务器中配置)认为它不负责对 /foo 的请求。
通常情况下,插件会从应用服务器上生成的插件-cfg.xml 中读取应用程序上下文根。您的网络服务器系统是最新的并且知道 /foo 是上下文根吗?
您使用的是什么版本的 'Worklight'(或 IBM MobileFirst Platform)?鉴于听起来您正在尝试将适配器作为 REST 调用来调用,我假设您使用的是 7.0 或更高版本,因为这是首次引入对适配器的 REST 支持的时间。
您提到您已将适配器映射到 /foo/bar/1,但请注意适配器 URL 遵循以下模式:
http(s)://<server>:<port>/<Context>/adapters/<adapter-name>/*
其中 <Context>
是您的项目名称,*
是您的 Javascript 适配器中方法的名称。
如果您使用 WLResourceRequest
客户端 API 从移动应用程序调用您的适配器,您应该只需要提供 <adapter-name>/*
部分,其余的将是自动处理。