我正在构建一个HTTP适配器,以通过其REST API检索有关IBM Rational Asset Manager(RAM)中资产的信息。我可以使用
检索RAM中的所有资产https://<server>/tools/cm/ram/oslc/simpleQuery
这可以在浏览器中正常工作,在Firefox中使用RESTClient,在使用
调用时使用我的适配器var input = {
method : 'get',
returnedContentType : 'xml',
path : 'tools/cm/ram/oslc/simpleQuery'
};
return WL.Server.invokeHttp(input);
问题在于我在回复中获得了数百个资产。我想通过使用类似
的查询来过滤来自RAM的响应https://<server>/tools/cm/ram/oslc/simpleQuery?query=ram_asset:community="My Community"
这可以从浏览器或RESTClient中正常工作。
但是当我使用
将查询参数添加到我的适配器时var input = {
method : 'get',
returnedContentType : 'xml',
path : 'tools/cm/ram/oslc/simpleQuery',
parameters : {"query" : 'ram_asset:community="My Community"'
};
return WL.Server.invokeHttp(input);
RAM不返回任何资产。这让我相信参数没有正确添加到URI中。我怀疑这可能是因为查询值中包含特殊字符(&#39;:&#39;和&#39; =&#39;)。我尝试使用%3A和%3D进行编码但没有运气。
根据其他用户的建议,我也尝试将查询参数直接包含在带编码的路径中,但仍然没有从RAM返回任何内容:
var input = {
method : 'get',
returnedContentType : 'xml',
path : 'tools/cm/ram/oslc/simpleQuery?query=ram_asset:community%3D%22My+Community%22'
};
WL适配器是否可能无法正确处理参数?关于如何解决它的任何想法?
答案 0 :(得分:1)
我终于找到了解决方案。搜索值需要有双引号 - RAM不接受单引号。最终的解决方案是
params = {query: 'ram_asset:community="My Community"'};
如果你在想“这不是他开始的吗?”,你是对的。我还有一只红鲱鱼让我失望,因为我的社区只允许经过身份验证的用户查看其中包含的资产。我的Firefox浏览器会话已经过身份验证,但Worklight适配器未经过身份验证,这解释了为什么浏览器和RESTClient看到我的资产而适配器没有看到。还有其他公共社区,所以适配器看到资产,而不是我的。当我允许未经身份验证的用户在我的社区中查看资产时,适配器开始看到它们。