【问题标题】:WSO2 - error decoding json message in input to proxy: Cannot call method "info" of undefinedWSO2-代理输入中的错误解码json消息:无法调用未定义的方法“信息”
【发布时间】:2021-10-23 12:32:58
【问题描述】:

我正在尝试在 wso2 中编写一个代理,给定一个 jason 格式的输入,它调用一个签名略有不同的 web 服务。我编写了一个 Javascript 函数来执行转换,但收到以下错误消息:

[2021-10-23 14:21:14,520] 错误 {ScriptMediator} - {proxy:cambioStatoPratica} 脚本引擎在执行内联 js 脚本函数调解 com.sun.phobos.script.util.ExtendedScriptException 时返回错误: org.mozilla.javascript.EcmaError:TypeError:无法在第 3 行调用未定义(#3)的方法“信息” 在 com.sun.phobos.script.javascript.RhinoCompiledScript.eval(RhinoCompiledScript.java:68) 在 javax.script.CompiledScript.eval(CompiledScript.java:92) 在 org.apache.synapse.mediators.bsf.ScriptMediator.mediateForInlineScript(ScriptMediator.java:395) 在 org.apache.synapse.mediators.bsf.ScriptMediator.invokeScript(ScriptMediator.java:290) 在 org.apache.synapse.mediators.bsf.ScriptMediator.mediate(ScriptMediator.java:258) 在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109) 在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71) 在 org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) 在 org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:228) 在 org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 在 org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:375) 在 org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:434) 在 org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:182) 在 org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) 引起:org.mozilla.javascript.EcmaError:TypeError:无法调用未定义的方法“info”(#3) 在 org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3687) 在 org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3665) 在 org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3693) 在 org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3712) 在 org.mozilla.javascript.ScriptRuntime.undefCallError(ScriptRuntime.java:3731) 在 org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.java:2258) 在 org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2251) 在 org.mozilla.javascript.gen._Unknown_Source__19._c_script_0(:3) 在 org.mozilla.javascript.gen._Unknown_Source__19.call() 在 org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394) 在 org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091) 在 org.mozilla.javascript.gen._Unknown_Source__19.call() 在 org.mozilla.javascript.gen._Unknown_Source__19.exec() 在 com.sun.phobos.script.javascript.RhinoCompiledScript.eval(RhinoCompiledScript.java:55) ... 16 更多

这是我写的小例子,简单的代理:

<?xml version="1.0" encoding="UTF-8"?>
<proxy name="changeStatus" startOnLoad="true" transports="http https" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <endpoint name="endpoint_urn_uuid_97b72a79-6507-4b7b-9d46-1d3e6e07931c">
            <address uri="[MY HTTP REST SERVICE]">
                <suspendOnFailure>
                    <initialDuration>-1</initialDuration>
                    <progressionFactor>1</progressionFactor>
                </suspendOnFailure>
                <markForSuspension>
                    <retriesBeforeSuspension>0</retriesBeforeSuspension>
                </markForSuspension>
            </address>
        </endpoint>
        <inSequence>
            <script language="js"><![CDATA[var plInput = mc.getPayloadJSON();
                 
                log.info("Log messaggio ricevuto: "+ JSON.stringify(plInput)); 
                 
                var localRespinta = true;
                var localConclusa = true;
                
                if (plInput.stato == 1)
                {
                    localRespinta = false;
                    localConclusa = false;
                    
                }
                if (plInput.stato == 2)
                {
                    localRespinta = false;
                    localConclusa = true;
                    
                }
                if (plInput.stato == 3)
                {
                    localRespinta = false;
                    localConclusa = true;
                    
                }

                var log = mc.getServiceLog();
                var keys = Object.keys(plInput);
                var response = 
                {
                            "key":      plInput.key,
                            "id":       plInput.id,
                            "motivo":   plInput.motivo,
                            "respinta": localRespinta,
                            "conclusa": localConclusa
                };
               
               log.info("Logging inside Script Mediator"+JSON.stringify(response));
               mc.setPayloadJSON(response);]]></script>
        </inSequence>
        <outSequence>
            <send/>
        </outSequence>
        <faultSequence/>
    </target>
</proxy>

有人可以帮帮我吗?

【问题讨论】:

    标签: javascript wso2


    【解决方案1】:

    好吧,我自己从未使用过 WSO2,但让我们看看您收到的错误消息。是这样的:

    TypeError: 无法在第 3 行调用未定义 (#3) 的方法“info”

    错误似乎很清楚。您正在尝试在 undefined 上调用 info 方法,但您无法在 undefined 上调用方法。

    让我们看一下脚本的第 3 行,错误告诉我们问题是:

                    log.info("Log messaggio ricevuto: "+ JSON.stringify(plInput)); 
    

    这里肯定调用了info 方法。因此log 必须是未定义的。

    在脚本的第 1 行有一个名为 mc 的变量,我看不到它的定义,但由于您的脚本超过了该行,mc 必须是 WSO2 为您定义的东西。但是,查看脚本的其余部分,我在底部看到以下行:

                    var log = mc.getServiceLog();
    

    所以看来log 不是 WSO2 为您定义的东西。这是您在脚本中定义的东西,问题是您在定义之前尝试使用它。

    因此,解决方法是将声明 log 的行移到第 3 行上方,以便您的代码部分如下所示:

                    var log = mc.getServiceLog();
                    log.info("Log messaggio ricevuto: "+ JSON.stringify(plInput)); 
    

    【讨论】:

    • 难以置信。我已经检查了几十次代码,我没有注意到我没有声明变量。菜鸟错误:(非常感谢
    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2013-07-16
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多