【发布时间】: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