类转换:java.lang.String 不能转换为 org.mozilla.javascript.Scriptable

Posted

技术标签:

【中文标题】类转换:java.lang.String 不能转换为 org.mozilla.javascript.Scriptable【英文标题】:Class Cast: java.lang.String cannot be cast to org.mozilla.javascript.Scriptable 【发布时间】:2014-04-21 06:48:54 【问题描述】:

在调用 http 适配器过程时,它会弹出一个包含 ProcedureName、Signature 和 Paramaters 的对话框,当我在输入两个字符串类型参数后点击运行按钮时,我得到“Class Cast: java.lang.String cannot be 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);

【问题讨论】:

【参考方案1】:

该错误表明您的代码中某处存在无效的 JSON 对象。

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

改用json.stringify(body),它应该可以实现您想要做的事情。

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

【讨论】:

以上是关于类转换:java.lang.String 不能转换为 org.mozilla.javascript.Scriptable的主要内容,如果未能解决你的问题,请参考以下文章

GStringImpl 不能转换为 java.lang.String

为啥显示 java.lang.ClassCastException: android.text.SpannableString 不能转换为 java.lang.String?

java.math.BigDecimal 不能转换为 java.lang.String?

javax.faces.FacesException: java.lang.ClassCastException: java.lang.String 不能转换为 javax.faces.compone

io.undertow.servlet.util.IteratorEnumeration 不能转换为 java.lang.String

JPype1 = 0.7.0:TypeError:无法转换str java类型类java.lang.String