Ibm mobilefirst 在Worklight HTTP适配器中使用参数时出错

Ibm mobilefirst 在Worklight HTTP适配器中使用参数时出错,ibm-mobilefirst,worklight-adapters,Ibm Mobilefirst,Worklight Adapters,使用Worklight 6.2.0.0 我正试图通过Worklight的HTTP适配器使用我们公司的一个web服务。我有web服务的WSDL,我使用“发现后端服务”工具来生成适配器JavaScript和XML web服务有2个输入参数和3个输出参数,都是字符串 当我在客户机上调用该过程时,我会这样做: var invocationData = { adapter : 'messageHandlerAdapter', procedure : 'message

使用Worklight 6.2.0.0

我正试图通过Worklight的HTTP适配器使用我们公司的一个web服务。我有web服务的WSDL,我使用“发现后端服务”工具来生成适配器JavaScript和XML

web服务有2个输入参数和3个输出参数,都是字符串

当我在客户机上调用该过程时,我会这样做:

    var invocationData = {
        adapter : 'messageHandlerAdapter',
        procedure : 'messageHandlerService_messageHandler',
        parameters : ['a','b']
};

var invocationOptions = {
        onSuccess : messageHandlerSuccess,
        onFailure : messageHandlerFailure   
};  

WL.Client.invokeProcedure(invocationData,invocationOptions);
您可以在invocationData数组中看到虚拟参数。运行此操作将导致以下错误:

无法将java.lang.String强制转换为org.mozilla.javascript.Scriptable

如果删除这些参数,则不会出现错误,web服务调用似乎成功,但不会得到任何响应(显然)

通过对论坛的搜索,我发现:

这是沿着相同的路线,并且响应是可能有一个无效的JSON对象在某处。然而,我所做的只是使用自动生成的适配器代码并调用它

我是Worklight的新手,因此我们非常感谢您的建议

WSDL:


编码类型=文档文字,WSA\U产品=10.1A-不适用
这里有一个链接,指向ProjectExplorer中服务描述的图片


通常,我们将XML传递给基于SOAP的web服务。对于worklight,我们必须将XML转换为JSON并将其传递给适配器。考虑到您的输入,SOAP就像

<a>
   <b>value1</b>
   <c>value2</c>
</a> 
因此,u必须将上面的JSON作为参数传递

headers={
        "SOAPAction": "YOUR ACTION NAME"
    }
您的适配器调用如下所示

var invocationData = {
        adapter : 'messageHandlerAdapter',
        procedure : 'messageHandlerService_messageHandler',
        parameters : [params,headers]
};

var invocationOptions = {
        onSuccess : messageHandlerSuccess,
        onFailure : messageHandlerFailure   
};  

WL.Client.invokeProcedure(invocationData,invocationOptions);

您当前在项目的“服务”文件夹下有一项服务。
在Project Explorer视图中,右键单击您的服务,它将显示要传递给messageHandlerService\u messageHandler过程的示例参数:

您可以复制此示例JSON并通过粘贴示例值并将其设置为所需值来调用适配器过程:


如果您还需要传递自定义HTTP头,您应该在参数JSON后添加一个逗号,并在自定义头中添加另一个JSON字符串。

您可以提供WSDL吗?它是一个公司web服务,因此有点敏感。我将发布,但会模糊位置。您是否尝试使用适配器?我已扩展了服务定义。它只是两个字符串输入参数。HTTP适配器似乎希望参数在invocationData对象中是JSON的,所以我认为我这样做是正确的?有没有一种简单的方法可以在发送出站SOAP消息之前查看它?如果是这种情况(如中所示,适配器参数作为JSON对象传递),我们如何使用Invoke Worklight过程来测试对Web服务的调用并查看响应?非常好。我用它来获得所需的JSON结构,现在一切都正常了。我还使用SoapUI来确保SOAP数据尽可能接近WSDL规范。但是我在服务属性窗口中没有“示例过程参数”区域。它在其他方面看起来完全相同,但此区域完全缺失。请确保您使用的是最新的Worklight Studio v6.2,因为此版本中引入了此版本。难以置信!我很确定我已经安装了6.2,但我已经安装了6.1。呸。
headers={
        "SOAPAction": "YOUR ACTION NAME"
    }
var invocationData = {
        adapter : 'messageHandlerAdapter',
        procedure : 'messageHandlerService_messageHandler',
        parameters : [params,headers]
};

var invocationOptions = {
        onSuccess : messageHandlerSuccess,
        onFailure : messageHandlerFailure   
};  

WL.Client.invokeProcedure(invocationData,invocationOptions);