Ibm mobilefirst worklight application center上载文件失败

Ibm mobilefirst worklight application center上载文件失败,ibm-mobilefirst,Ibm Mobilefirst,将应用程序上载到Worklight Application Center时,message.log中出现以下错误: "com.ibm.puremeap.resources.desktop.UploadService W JSON error when trying to upload file IBMApplicationCenter.apk" 此外,在trace.log中,整个堆栈跟踪如下所示: [4/10/13 20:23:23:350 CST] 00000148 id=

将应用程序上载到Worklight Application Center时,message.log中出现以下错误:

"com.ibm.puremeap.resources.desktop.UploadService W JSON error when trying to upload file IBMApplicationCenter.apk"
此外,在trace.log中,整个堆栈跟踪如下所示:

[4/10/13 20:23:23:350 CST] 00000148 id=         com.ibm.puremeap.resources.desktop.UploadService             W JSON error when trying to upload file IBMApplicationCenter.apk
[4/10/13 20:23:23:351 CST] 00000148 id=         UploadService                                                2 response THROW
org.apache.wink.json4j.JSONException: The value for key: [pkg] was null.  Object required.
    at org.apache.wink.json4j.JSONObject.getString(JSONObject.java:1098)
    at com.ibm.puremeap.resources.desktop.UploadService.fileUploaded(UploadService.java:198)
    at com.ibm.puremeap.resources.desktop.UploadService.__fileUploadedJSON__(UploadService.java:102)
    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:616)
    at org.apache.wink.server.internal.handlers.InvokeMethodHandler.handleRequest(InvokeMethodHandler.java:63)
    at org.apache.wink.server.handlers.AbstractHandler.handleRequest(AbstractHandler.java:33)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:67)
    at org.apache.wink.server.internal.handlers.CreateInvocationParametersHandler.handleRequest(CreateInvocationParametersHandler.java:54)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:67)
    at org.apache.wink.server.handlers.AbstractHandler.handleRequest(AbstractHandler.java:34)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:67)
    at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleSubResourceMethod(FindResourceMethodHandler.java:183)
    at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleRequest(FindResourceMethodHandler.java:110)
    at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleSubResourceLocator(FindResourceMethodHandler.java:230)
    at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleRequest(FindResourceMethodHandler.java:115)
    at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleSubResourceLocator(FindResourceMethodHandler.java:230)
    at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleRequest(FindResourceMethodHandler.java:115)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:67)
    at org.apache.wink.server.internal.handlers.FindRootResourceHandler.handleRequest(FindRootResourceHandler.java:95)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:67)
    at org.apache.wink.server.internal.handlers.HeadMethodHandler.handleRequest(HeadMethodHandler.java:53)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:67)
    at org.apache.wink.server.internal.handlers.OptionsMethodHandler.handleRequest(OptionsMethodHandler.java:46)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:67)
    at org.apache.wink.server.internal.handlers.SearchResultHandler.handleRequest(SearchResultHandler.java:33)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:67)
    at org.apache.wink.server.internal.log.ResourceInvocation.handleRequest(ResourceInvocation.java:92)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:67)
    at org.apache.wink.server.internal.log.Requests.handleRequest(Requests.java:76)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
    at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:67)
    at org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:52)
    at org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:207)
    at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:154)
    at org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:133)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1234)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:757)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:440)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1041)
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:81)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:930)
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:274)
    at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:529)
    at com.ibm.ws.threading.internal.Worker.executeWork(Worker.java:398)
    at com.ibm.ws.threading.internal.Worker.run(Worker.java:380)
    at java.lang.Thread.run(Thread.java:636)

[4/10/13 20:23:23:352 CST] 00000148 id=         UploadService                                                2 response Result: {0} 
                                                                                                               [{"message":"The value for key: [pkg] was null.  Object required.","status":200,"exception":"org.apache.wink.json4j.JSONException","acl_upload_denied":"IBMApplicationCenter.apk"}]
有人能告诉我如何解决这个问题吗? 顺便说一句,我成功地尝试在worklight控制台中部署wlapp和适配器

我的环境是:

- RHEL v6.x 64 bit
- Worklight v5.0.6
- DB2 10.x
我做了进一步的调查:

  • 使用Win7 64位上的Worklight服务器并连接到同一数据库实例。一切都很好。此外,我浏览了运行在LinuxEnv上的应用程序中心。appcenter在Win7上上载的应用程序显示正常

  • 检查了来自两个环境(RHEL 6和Win7)的trace.log中的pkg值。结果不同

  • 在Win7的trace.log上:

    [2013/4/11   10:48:18:944 TST] 00000040 id=         ApplicationService                                           > __create__ ENTRY {0} {1} {2} 
                                                                                                                   uri=http://[hostname_win7]:9080/applicationcenter/service/desktop/application/
                                                                                                                   securityContext=org.apache.wink.server.internal.contexts.SecurityContextImpl_1700851040
                                                                                                                   {"os":"Android","pkg":"com.ibm.appcenter","version":"1","versionName":"1.0","label":"IBM App Center","author":"appcenteradmin","author_display":"appcenteradmin","mandatory":"N","description":"","remote_url":"","is_installer":"Y","is_active":"Y","is_ready_prod":"Y","files":[{"type":"apk","cid":"1","size":1599708,"filename":"IBMApplicationCenter.apk"}]}
    
    [4/11/13 11:44:48:694 CST] 00000308 id=         ApplicationService                                           > __create__ ENTRY {0} {1} {2} 
                                                                                                                   uri=http://[hostname_RHEL]:10080/applicationcenter/service/desktop/application
                                                                                                                   securityContext=org.apache.wink.server.internal.contexts.SecurityContextImpl_1489398078
                                                                                                                   {"files":[{"filename":"IBMApplicationCenter.apk","type":"apk","cid":null,"size":null}],"os":"Android","description":"This is application null.","mandatory":"N","pkg":null,"label":null,"version":null}
    
    在RHEL 6的trace.log上:

    [2013/4/11   10:48:18:944 TST] 00000040 id=         ApplicationService                                           > __create__ ENTRY {0} {1} {2} 
                                                                                                                   uri=http://[hostname_win7]:9080/applicationcenter/service/desktop/application/
                                                                                                                   securityContext=org.apache.wink.server.internal.contexts.SecurityContextImpl_1700851040
                                                                                                                   {"os":"Android","pkg":"com.ibm.appcenter","version":"1","versionName":"1.0","label":"IBM App Center","author":"appcenteradmin","author_display":"appcenteradmin","mandatory":"N","description":"","remote_url":"","is_installer":"Y","is_active":"Y","is_ready_prod":"Y","files":[{"type":"apk","cid":"1","size":1599708,"filename":"IBMApplicationCenter.apk"}]}
    
    [4/11/13 11:44:48:694 CST] 00000308 id=         ApplicationService                                           > __create__ ENTRY {0} {1} {2} 
                                                                                                                   uri=http://[hostname_RHEL]:10080/applicationcenter/service/desktop/application
                                                                                                                   securityContext=org.apache.wink.server.internal.contexts.SecurityContextImpl_1489398078
                                                                                                                   {"files":[{"filename":"IBMApplicationCenter.apk","type":"apk","cid":null,"size":null}],"os":"Android","description":"This is application null.","mandatory":"N","pkg":null,"label":null,"version":null}
    

    尝试将APK上载到Worklight Application Center时出错。在此步骤中,将分析APK。RHEL跟踪日志表明不仅pkg丢失(null),而且APK大小也为null。这可能表明APK是相当错误的

    第一步是验证APK是否正确。为此,只需解压缩它(APK是一个zip文件),并验证它是否包含AndroidManifest.xml。该文件是二进制文件,pkg值将来自该文件。如果它丢失了,这是致命的

    接下来,验证aapt可以分析APK(位于平台工具中的Android SDK中):

    您似乎试图上载IBMApplicationCenter.apk,因此在您的特定情况下,它是:

    aapt dump badging IBMApplicationCenter.apk
    
    这将输出多行,通常以一行开始,例如

    package: name='com.ibm.appcenter' versionCode='1' versionName='1.0'
    
    这就是pkg值的来源。如果这不起作用,则Worklight Application Center无法找到pkg,或者Android清单无效

    在APK上传机制中,会发生以下情况:

    • 如果在服务器配置文件(Liberty的bootstrap.properties、Tomcat的catalina.properties或WAS的Java VM properties)中设置了属性android.aapt或android.aapt.dir,则会在该位置搜索aapt,并按照前面所述执行“aapt转储标记”,输出由Worklight Application Center进行分析。这可以解释为什么您在Win7和RHEL上看到不同的行为,因为您在那里有不同的aapt可执行文件
    • 如果未设置任何属性android.aapt或android.aapt.dir,则Worklight Application Center不使用aapt,而是尝试解码APK本身。因此,您可以尝试在服务器中取消设置android.aapt属性并重新启动服务器,以检查这是否解决了问题

    亲爱的Georg,感谢您的帮助和讲解。问题是通过取消设置属性来解决的。根本原因是“aapt”需要32位库,而我有64位环境和库。但是,令人好奇的是,为什么Worklight的文档没有任何相关信息。这是一个很好的提示!我让Worklight文档团队意识到这一点,以便将来改进文档。顺便说一下,您可以阅读如何使aapt在64位Linux中工作。