WSO2脚本调解器无法解析自关闭XML标记

时间:2014-10-24 20:57:37

标签: wso2 wso2esb

我正在使用脚本调解器将XML响应转换为JSON。如果XML格式正确,则介体可以正常工作,但如果XML具有自闭标记,则会失败..

非常感谢任何解决此问题的想法。

<!-- XML data-->
<getMyClsScheduleResponse >
<RegisteredClass>
  <ClassNumber>10757</ClassNumber>
  <SubjectCode>AAS</SubjectCode>
  <CatalogNumber>510</CatalogNumber>
  <SectionNumber>001</SectionNumber>
  <SectionType>IND</SectionType>
  <SectionTypeDescr>Independent Study</SectionTypeDescr>
  <SessionDescr>Regular</SessionDescr>
  <CourseDescr>Supervised Research</CourseDescr>
  <ClassTopic />
  <CreditHours>1 - 6</CreditHours>
  <LMSURL /> <!--  Self Closing tag -->
  <Meeting>
     <MeetingNumber>1</MeetingNumber>
     <Days />
     <Times />
     <StartDate>09/02/2014</StartDate>
     <EndDate>12/10/2014</EndDate>
     <Location>TBA</Location>
     <TopicDescr />
  </Meeting>

/** Script Mediator */              
function transformPayload(output) {
payload = output.getPayloadJSON();
results = payload.getMyClsScheduleResponse.RegisteredClasses;
var response = new Array();

var registeredClass = new Array();
for (i=0;i<results.length; i++ ) {
    class_schedule = results[i];
    newcls = new Object();
    newcls.Link = class_schedule.LMSURL; // Error at this line.. 
}

}

错误日志:

TID: [0]  [ESB]  [2014-10-24 14:19:45,541] ERROR -  The script engine returned an error executing the external js script : Value {name ='null', keyValue ='conf:/repository/esb/js/functions.js'} function transformPayload {org.apache.synapse.mediators.bsf.ScriptMediator}
com.sun.phobos.script.util.ExtendedScriptException: org.mozilla.javascript.WrappedException: Wrapped com.sun.phobos.script.util.ExtendedScriptException: org.mozilla.javascript.EvaluatorException: syntax error (<Unknown source>#1) in <Unknown source> at line number 1 (<Unknown source>#53) in <Unknown source> at line number 53
    at com.sun.phobos.script.javascript.RhinoScriptEngine.invokeMethod(RhinoScriptEngine.java:259)

由于 Kranthi

2 个答案:

答案 0 :(得分:0)

为什么使用脚本调解器将XML更改为JSON?你要做的是,正确设置内容类型以获得所需的格式响应。

答案 1 :(得分:0)

根据给定的场景,自闭项标签会出现问题(正如你所描述的那样)。在自闭标签的情况下,它返回值为null。解决方法是检查js介体和句柄中的值自闭标签时的空值。

您可以使用以下js函数在js介体中的此类场景中设置值。

function assignValuesWithNull(value){
     var returnValue;
     if(!value){
        returnValue='';
     }
     else{
        returnValue=value;
     }
     return returnValue;
}