ibmmobilefirst-Class Cast:java.lang.String不能转换为org.mozilla.j

ibm mobilefirst - Class Cast: java.lang.String cannot be cast to org.mozilla.javascript.Scriptable

本文关键字:转换 org mozilla 不能 String Cast java lang ibmmobilefirst-Class      更新时间:2023-09-26

在调用http适配器过程时,它会弹出一个包含ProcedureName、Signature和Paramaters的对话框,当我在输入两个字符串类型参数后点击Run按钮时,我会收到"class Cast:java.lang.string cannot Cast to org.mozilla.javascript.Scriptable"错误。

仅供参考,我使用worklight应用程序框架数据对象编辑器创建了一个worklight适配器(自动生成.xml和impl.js文件)

impl.js文件

function CurrencyConvertor_ConversionRate(params, headers){
    var soapEnvNS;
    soapEnvNS = 'http://schemas.xmlsoap.org/soap/envelope/';
    var request = buildBody(params, 'xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.webserviceX.NET/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" ', soapEnvNS);
    return invokeWebService(request, headers);
}

function buildBody(params, namespaces, soapEnvNS){
    var body =
        '<soap:Envelope xmlns:soap="' + soapEnvNS + '">'n' +
        '<soap:Body>'n';
    body = jsonToXml(params, body, namespaces);
    body += 
        '</soap:Body>'n' +
        '</soap:Envelope>'n';
    return body;
}
function getAttributes(jsonObj) {
    var attrStr = '';
    for(var attr in jsonObj) {
        var val = jsonObj[attr];
        if (attr.charAt(0) == '@') {
            attrStr += ' ' + attr.substring(1);
            attrStr += '="' + val + '"';
        }
    }
    return attrStr;
}
function jsonToXml(jsonObj, xmlStr, namespaces) {
    var toAppend = '';
    for(var attr in jsonObj) {
        var val = jsonObj[attr];
        if (attr.charAt(0) != '@') {
            toAppend += "<" + attr;
            if (typeof val  === 'object') {
                toAppend += getAttributes(val);
                if (namespaces != null)
                    toAppend += ' ' + namespaces;
                toAppend += ">'n";
                toAppend = jsonToXml(val, toAppend);
            }
            else {
                toAppend += ">" + val;
            }
            toAppend += "</" + attr + ">'n";
        }
    }
    return xmlStr += toAppend;
}

function invokeWebService(body, headers){
    var input = {
        method : 'post',
        returnedContentType : 'xml',
        path : '/CurrencyConvertor.asmx',
        body: {
            content : body.toString(),
            contentType : 'text/xml; charset=utf-8'
        }
    };
    //Adding custom HTTP headers if they were provided as parameter to the procedure call 
    headers && (input['headers'] = headers);
    return WL.Server.invokeHttp(input);
}

该错误表示代码中的某个位置存在无效的JSON对象。

很可能是在使用body.toString()将正文转换为字符串时出现此错误因为toString将返回无效的JSON对象值[object Object](既不是有效的String也不是有效的Array)

相反,使用json.stringify(body),它应该会产生你想要做的事情。

此外,尝试添加一些日志行以方便跟踪错误