[
https://issues.apache.org/jira/browse/UIMA-5423?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Peter Klügl resolved UIMA-5423.
-------------------------------
Resolution: Fixed
Fix Version/s: 2.6.1ruta
fixed
> Variables in Ruta scripts are not initialized properly by RutaEngine if their
> script is called by others
> --------------------------------------------------------------------------------------------------------
>
> Key: UIMA-5423
> URL: https://issues.apache.org/jira/browse/UIMA-5423
> Project: UIMA
> Issue Type: Bug
> Components: Ruta
> Affects Versions: 2.3.0ruta
> Reporter: Peter Klügl
> Assignee: Peter Klügl
> Fix For: 2.6.1ruta
>
>
> Variables in Ruta scripts are not initialized properly by RutaEngine if their
> script is called by others.
>
> We found this issue in Ruta 2.3.1, but it’s still in Ruta 2.6.0.
> I attached the sample project TestVariable.zip to this mail.
>
> Example: script3.ruta
> ----
> DECLARE Value(STRING value);
> STRING value;
> W{-> CREATE(Value, "value" = value), ASSIGN(value, W.ct)};
> ----
> Creates an annotation "Value" with an empty feature "value".
> The variable "value" stores the word (and is evaluated by other rules – the
> real use case doesn't matters here).
>
> Input testfiles:
> input-01.txt: snark
> input-02.txt: cat
>
> Output after running Ruta with script3.ruta:
> input-01.txt.xmi: Value annotation for "snark" with an empty value (nil)
> input-02.txt.xmi: Value annotation for "cat" with an empty value (nil)
> => works as expected.
>
> We added two scripts to call finally script3.ruta in the order
> script1 calls script2 => script2 calls script3 => scripts3
> to creates Value annotation.
> (our real project is complex - uses packages ...)
>
> Now we call script1.ruta on the same input, but the output annotation Value
> contains a wrong value feature for all documents after the first.
> input-01.txt.xmi: Value annotation for "snark" with an empty value (nil)
> input-02.txt.xmi: Value annotation "cat" with value feature "snark" (instead
> of nil as before).
> It seems the variable is not initialized properly if it is defined in a
> sub-script, which is called by other scripts.
>
> It doesn't help to initialized the variable in script3, e.g:
> STRING value = "dog"
> ----
> The output is unchanged the Value annotation return the stored variable,
> which was set by script3.ruta while processing the first input file.
>
> One of my colleguage examined the issue and proposed to patch RutaEngine
> class to solve this issue.
> We added the following lines to:
> private void resetEnvironment(RutaModule module, CAS cas):
> ---
> 641a642,646
> > final Collection<RutaModule> scripts = module.getScripts().values();
> > for (final RutaModule subModule : scripts) {
> > resetEnvironment(subModule, cas);
> > }
> ---
>
> This solves the issue in our applications which integrates Ruta.
> Known workaround: clear or initialize the variables at the end of the script.
> But I prefer if the issue is fixed in the RutaEngine class.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)