bunny icon indicating copy to clipboard operation
bunny copied to clipboard

javascript: error accessing parsed json in ExpressionTool

Open jeremiahsavage opened this issue 8 years ago • 1 comments

I am getting an error with bunny 1.0.1 and the latest develop with the following cwl:

git clone https://github.com/jeremiahsavage/cwl_expressiontool_parse_json.git

I can run the example with cwltool successfully:

$ cwltool cwl_expressiontool_parse_json/decider_star_pass_2.cwl cwl_expressiontool_parse_json/decider_star_pass_2.json 
/home/jeremiah/.virtualenvs/cwl/bin/cwltool 1.0.20170817131858
Resolved 'cwl_expressiontool_parse_json/decider_star_pass_2.cwl' to 'file:///home/jeremiah/cwl_expressiontool_parse_json/decider_star_pass_2.cwl'
{
    "output_readgroup_str": "ID:A CN:GSCID DT:2014-03-12T00 LB:SRR1186262 PL:illumina PM:HiSeq2500 PU:SRX483601 SM:SRA144716", 
    "output_fastq_paths": [
        {
            "checksum": "sha1$f5387588b104fe845892991876f17ae1821b1c7a", 
            "basename": "A_1.fq.gz", 
            "nameroot": "A_1.fq", 
            "nameext": ".gz", 
            "location": "file:///home/jeremiah/A_1.fq.gz", 
            "path": "/home/jeremiah/A_1.fq.gz", 
            "class": "File", 
            "size": 675288
        }, 
        {
            "checksum": "sha1$39c08a86fbcdaf8d77d20e0a9f4cf2ff627a267b", 
            "basename": "A_2.fq.gz", 
            "nameroot": "A_2.fq", 
            "nameext": ".gz", 
            "location": "file:///home/jeremiah/A_2.fq.gz", 
            "path": "/home/jeremiah/A_2.fq.gz", 
            "class": "File", 
            "size": 675200
        }
    ]
}
Final process status is success

But I get an error with the develop branch bunny:

$ java -jar ~/code/bunny/rabix-cli/target/rabix-cli-1.0.1.jar cwl_expressiontool_parse_json/decider_star_pass_2.cwl cwl_expressiontool_parse_json/decider_star_pass_2.json 
[2017-08-30 15:06:32.452] [DEBUG] Config path: /home/jeremiah/code/bunny/rabix-cli/config
[2017-08-30 15:06:32.455] [DEBUG] Configuration directory found localy.
[2017-08-30 15:06:33.753] [DEBUG] DAGCache initialized with size=16
[2017-08-30 15:06:33.754] [DEBUG] ApplicationCache initialized with size=16
[2017-08-30 15:06:33.946] [INFO] Backend 9fa3d8b6-75df-4402-aa99-9ba490a53950 registered.
[2017-08-30 15:06:33.965] [DEBUG] Start Job Job [id=null, parentId=null, rootId=9e77ec17-f235-4359-96ee-1fa775cbe9a3, name=null, status=PENDING, message=null, config=null, inputs={fastq1_paths=[FileValue [size=null, path=A_1.fq.gz, location=null, checksum=null, secondaryFiles=[], properties={sbg:metadata=null}]], readgroup_paths=[FileValue [size=null, path=A.json, location=null, checksum=null, secondaryFiles=[], properties={sbg:metadata=null}]], fastq_s_paths=[], fastq2_paths=[FileValue [size=null, path=A_2.fq.gz, location=null, checksum=null, secondaryFiles=[], properties={sbg:metadata=null}]]}, outputs=null]
.
.
.
[2017-08-30 15:06:39.649] [INFO] Docker container 0caff877d4d2c849aa39f3bcdd2cb6580b6fa0c7ca03a9265aed7f07e1a52f55 has started.
[2017-08-30 15:06:40.114] [ERROR] Failed to execute status command for 9e77ec17-f235-4359-96ee-1fa775cbe9a3. Could not collect outputs.
org.rabix.executor.ExecutorException: Could not collect outputs.
	at org.rabix.executor.handler.impl.JobHandlerImpl.postprocess(JobHandlerImpl.java:392) ~[rabix-cli-1.0.1.jar:na]
	at org.rabix.executor.execution.command.StatusCommand.run(StatusCommand.java:54) ~[rabix-cli-1.0.1.jar:na]
	at org.rabix.executor.execution.JobHandlerCommand.run(JobHandlerCommand.java:51) [rabix-cli-1.0.1.jar:na]
	at org.rabix.executor.execution.JobHandlerRunnable.run(JobHandlerRunnable.java:60) [rabix-cli-1.0.1.jar:na]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_144]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_144]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144]
Caused by: org.rabix.bindings.BindingException: Failed to populate outputs
	at org.rabix.bindings.cwl.CWLProcessor.postprocess(CWLProcessor.java:134) ~[rabix-cli-1.0.1.jar:na]
	at org.rabix.bindings.cwl.CWLBindings.postprocess(CWLBindings.java:83) ~[rabix-cli-1.0.1.jar:na]
	at org.rabix.executor.handler.impl.JobHandlerImpl.postprocess(JobHandlerImpl.java:370) ~[rabix-cli-1.0.1.jar:na]
	... 6 common frames omitted
Caused by: org.rabix.bindings.cwl.expression.CWLExpressionException: Failed evaluating expression ${
   // generate fastq paths
   var fastq_array = [];
   var readgroup_basename_array = [];

   function local_basename(path) {
     var basename = path.split(/[\\/]/).pop();
     return basename
   }

   function include(arr,obj) {
     return (arr.indexOf(obj) != -1)
   }

   if (inputs.fastq1_paths.length > 0 && inputs.fastq1_paths.length == inputs.fastq2_paths.length) {
     for (var i = 0; i < inputs.fastq1_paths.length; i++) {
       fastq_array.push(inputs.fastq1_paths[i]);
       fastq_array.push(inputs.fastq2_paths[i]);

       var fastq1_name = local_basename(inputs.fastq1_paths[i].location);
       var predicted_rg_name = fastq1_name.slice(0,-8) + ".json";
       readgroup_basename_array.push(predicted_rg_name);
     }
   }
   else {
     for (var i = 0; i < inputs.fastq_s_paths.length; i++) {
       fastq_array.push(inputs.fastq_s_paths[i]);

       var fastq_s_name = local_basename(inputs.fastq_s_paths[i].location);
       var predicted_rg_name = fastq_s_name.slice(0,-8) + ".json";
       readgroup_basename_array.push(predicted_rg_name);
     }
   }

   // get needed readgroup objects
   var use_readgroup_array = [];
   for (var i = 0; i < inputs.readgroup_paths.length; i++) {
     var this_readgroup_object = inputs.readgroup_paths[i];
     var this_readgroup_basename = local_basename(this_readgroup_object.location);
     if (include(readgroup_basename_array, this_readgroup_basename)) {
       use_readgroup_array.push(this_readgroup_object)
     }
   }

   // generate readgroup string
   var readgroup_str = "";
   for (var i = 0; i < use_readgroup_array.length; i++) {
     var readgroup_json = JSON.parse(use_readgroup_array[i].contents);
     var this_readgroup = "";
     this_readgroup = "ID:" + readgroup_json["ID"] + " ";
     var keys = Object.keys(readgroup_json).sort();
     for (var j = 0; j < keys.length; j++) {
       var key = keys[j];
       var value = readgroup_json[key];
       if (key != "ID") {
         this_readgroup = this_readgroup + key + ":" + value + " ";
       }
     }
     this_readgroup = this_readgroup.substring(0, this_readgroup.length-1);
     readgroup_str = readgroup_str + this_readgroup + " , ";
   }
   readgroup_str = readgroup_str.substring(0, readgroup_str.length-3);

   return {'output_fastq_paths': fastq_array, "output_readgroup_str": readgroup_str};
 }
.
	at org.rabix.bindings.cwl.expression.javascript.CWLExpressionJavascriptResolver.evaluate(CWLExpressionJavascriptResolver.java:89) ~[rabix-cli-1.0.1.jar:na]
	at org.rabix.bindings.cwl.CWLProcessor.postprocess(CWLProcessor.java:131) ~[rabix-cli-1.0.1.jar:na]
	... 8 common frames omitted
Caused by: org.mozilla.javascript.EcmaError: TypeError: Cannot read property "ID" from null (script#50)
	at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3951) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3929) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3962) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3981) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ScriptRuntime.undefReadError(ScriptRuntime.java:3993) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ScriptRuntime.getObjectElem(ScriptRuntime.java:1453) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.Interpreter.doGetElem(Interpreter.java:2214) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1264) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:815) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:109) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:393) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3282) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.InterpretedFunction.exec(InterpretedFunction.java:120) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.Context.evaluateString(Context.java:1219) ~[rabix-cli-1.0.1.jar:na]
	at org.rabix.bindings.cwl.expression.javascript.CWLExpressionJavascriptResolver.evaluate(CWLExpressionJavascriptResolver.java:69) ~[rabix-cli-1.0.1.jar:na]
	... 9 common frames omitted
[2017-08-30 15:06:40.117] [ERROR] Failed to execute status command for 9e77ec17-f235-4359-96ee-1fa775cbe9a3. Could not collect outputs.
org.rabix.executor.ExecutorException: Could not collect outputs.
	at org.rabix.executor.handler.impl.JobHandlerImpl.postprocess(JobHandlerImpl.java:392) ~[rabix-cli-1.0.1.jar:na]
	at org.rabix.executor.execution.command.StatusCommand.run(StatusCommand.java:54) ~[rabix-cli-1.0.1.jar:na]
	at org.rabix.executor.execution.JobHandlerCommand.run(JobHandlerCommand.java:51) [rabix-cli-1.0.1.jar:na]
	at org.rabix.executor.execution.JobHandlerRunnable.run(JobHandlerRunnable.java:60) [rabix-cli-1.0.1.jar:na]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_144]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_144]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144]
Caused by: org.rabix.bindings.BindingException: Failed to populate outputs
	at org.rabix.bindings.cwl.CWLProcessor.postprocess(CWLProcessor.java:134) ~[rabix-cli-1.0.1.jar:na]
	at org.rabix.bindings.cwl.CWLBindings.postprocess(CWLBindings.java:83) ~[rabix-cli-1.0.1.jar:na]
	at org.rabix.executor.handler.impl.JobHandlerImpl.postprocess(JobHandlerImpl.java:370) ~[rabix-cli-1.0.1.jar:na]
	... 6 common frames omitted
Caused by: org.rabix.bindings.cwl.expression.CWLExpressionException: Failed evaluating expression ${
   // generate fastq paths
   var fastq_array = [];
   var readgroup_basename_array = [];

   function local_basename(path) {
     var basename = path.split(/[\\/]/).pop();
     return basename
   }

   function include(arr,obj) {
     return (arr.indexOf(obj) != -1)
   }

   if (inputs.fastq1_paths.length > 0 && inputs.fastq1_paths.length == inputs.fastq2_paths.length) {
     for (var i = 0; i < inputs.fastq1_paths.length; i++) {
       fastq_array.push(inputs.fastq1_paths[i]);
       fastq_array.push(inputs.fastq2_paths[i]);

       var fastq1_name = local_basename(inputs.fastq1_paths[i].location);
       var predicted_rg_name = fastq1_name.slice(0,-8) + ".json";
       readgroup_basename_array.push(predicted_rg_name);
     }
   }
   else {
     for (var i = 0; i < inputs.fastq_s_paths.length; i++) {
       fastq_array.push(inputs.fastq_s_paths[i]);

       var fastq_s_name = local_basename(inputs.fastq_s_paths[i].location);
       var predicted_rg_name = fastq_s_name.slice(0,-8) + ".json";
       readgroup_basename_array.push(predicted_rg_name);
     }
   }

   // get needed readgroup objects
   var use_readgroup_array = [];
   for (var i = 0; i < inputs.readgroup_paths.length; i++) {
     var this_readgroup_object = inputs.readgroup_paths[i];
     var this_readgroup_basename = local_basename(this_readgroup_object.location);
     if (include(readgroup_basename_array, this_readgroup_basename)) {
       use_readgroup_array.push(this_readgroup_object)
     }
   }

   // generate readgroup string
   var readgroup_str = "";
   for (var i = 0; i < use_readgroup_array.length; i++) {
     var readgroup_json = JSON.parse(use_readgroup_array[i].contents);
     var this_readgroup = "";
     this_readgroup = "ID:" + readgroup_json["ID"] + " ";
     var keys = Object.keys(readgroup_json).sort();
     for (var j = 0; j < keys.length; j++) {
       var key = keys[j];
       var value = readgroup_json[key];
       if (key != "ID") {
         this_readgroup = this_readgroup + key + ":" + value + " ";
       }
     }
     this_readgroup = this_readgroup.substring(0, this_readgroup.length-1);
     readgroup_str = readgroup_str + this_readgroup + " , ";
   }
   readgroup_str = readgroup_str.substring(0, readgroup_str.length-3);

   return {'output_fastq_paths': fastq_array, "output_readgroup_str": readgroup_str};
 }
.
	at org.rabix.bindings.cwl.expression.javascript.CWLExpressionJavascriptResolver.evaluate(CWLExpressionJavascriptResolver.java:89) ~[rabix-cli-1.0.1.jar:na]
	at org.rabix.bindings.cwl.CWLProcessor.postprocess(CWLProcessor.java:131) ~[rabix-cli-1.0.1.jar:na]
	... 8 common frames omitted
Caused by: org.mozilla.javascript.EcmaError: TypeError: Cannot read property "ID" from null (script#50)
	at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3951) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3929) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3962) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3981) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ScriptRuntime.undefReadError(ScriptRuntime.java:3993) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ScriptRuntime.getObjectElem(ScriptRuntime.java:1453) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.Interpreter.doGetElem(Interpreter.java:2214) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1264) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:815) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:109) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:393) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3282) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.InterpretedFunction.exec(InterpretedFunction.java:120) ~[rabix-cli-1.0.1.jar:na]
	at org.mozilla.javascript.Context.evaluateString(Context.java:1219) ~[rabix-cli-1.0.1.jar:na]
	at org.rabix.bindings.cwl.expression.javascript.CWLExpressionJavascriptResolver.evaluate(CWLExpressionJavascriptResolver.java:69) ~[rabix-cli-1.0.1.jar:na]
	... 9 common frames omitted

jeremiahsavage avatar Aug 30 '17 20:08 jeremiahsavage

Hi, we have made a new release (v1.0.2) just now, this fix should be included inside.

milos-ljubinkovic avatar Oct 18 '17 18:10 milos-ljubinkovic