Hi Peter,

I figured that even when using version 2.5.0, importByLocation is default for 
me. I did debug it as well as the import tags in the created .xml files do have 
an attribute location. 

When I was previously talking about the error, this happened during executing 
one of my pipelines. Therefore I’ve used some previously created descriptors, 
they did work in version 2.3.0 though. These descriptors are based on ruta 
scripts, which do not change anymore. However, I’ve also the option to create 
(or update) a ruta script manually and then using the application in order to 
create the proper descriptor in xml. The weird thing I’ve just noticed is, when 
creating the .xml descriptor from my ruta script, the (or an) error already 
occurred when using version 2.3.0, however, the process of creating the .xml 
descriptor did not abort. When using version 2.5.0 the creation process does 
abort though. Either way, the pipeline with version 2.5.0 does not work. When 
running my pipeline, either with the newly created descriptors (where the error 
occurs during creation) or with the existing ones, the process is aborted with 
the error from my first message.

The error I show you below, actually occurs when running my importer. Hence I 
also add the importer. The previous error, as already mentioned actually 
occurred when running my pipeline and thus using the fixed created descriptor. 
So for now I think it makes more sense, to first solve the problem with 
creating the descriptor from my ruta scripts. I think afterwards I can solve 
the other issue as well, since they somehow relate to each other.

Below I’d like to give you some more information, also according to your 
request:

The _APP_TypeSystem.xml is stored in the following path relative to the project 
root /app/informationExtraction/appTypes/
Furthermore I do have a directory /app/rutaComponents with the following content
./descriptor (Fixed descriptors)
./generatedComponents (Dynamic components)
./descriptor
./resources
./script
./resources
./script (Fixed scripts)
./scriptImporter (Importer for dynamic and new scripts)
With the script importer, I can import scripts from 
./generatedComponents/script in order to create a descriptor in 
./generatedComponents/descriptor

- Complete error:

org.apache.uima.ruta.extensions.RutaParseRuntimeException: 
org.apache.uima.ruta.extensions.RutaParseRuntimeException: 
org.apache.uima.ruta.extensions.RutaParseRuntimeException: 
org.apache.uima.ruta.extensions.RutaParseRuntimeException: 
java.lang.RuntimeException: Cannot resolve imports in _APP_TypeSystem
        at 
org.apache.uima.ruta.parser.RutaParser.emitErrorMessage(RutaParser.java:397)
        at 
org.apache.uima.ruta.parser.RutaParser.file_input(RutaParser.java:733)
        at 
org.apache.uima.ruta.descriptor.RutaDescriptorFactory.parseDescriptorInformation(RutaDescriptorFactory.java:146)
        at 
rutaComponents.scriptImporter.RutaComponentGenerator.generate(RutaComponentGenerator.java:79)
        at controllers.RutaController.saveRutaFile(RutaController.java:91)
        at 
Routes$$anonfun$routes$1$$anonfun$applyOrElse$82$$anonfun$apply$82.apply(routes_routing.scala:1494)
        at 
Routes$$anonfun$routes$1$$anonfun$applyOrElse$82$$anonfun$apply$82.apply(routes_routing.scala:1494)
        at 
play.core.Router$HandlerInvokerFactory$$anon$4.resultCall(Router.scala:264)
        at 
play.core.Router$HandlerInvokerFactory$JavaActionInvokerFactory$$anon$15$$anon$1.invocation(Router.scala:255)
        at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:55)
        at play.GlobalSettings$1.call(GlobalSettings.java:67)
        at play.core.j.JavaAction$$anonfun$11.apply(JavaAction.scala:82)
        at play.core.j.JavaAction$$anonfun$11.apply(JavaAction.scala:82)
        at 
scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
        at 
scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
        at 
play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:40)
        at 
play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:46)
        at 
play.core.j.HttpExecutionContext.execute(HttpExecutionContext.scala:32)
        at scala.concurrent.impl.Future$.apply(Future.scala:31)
        at scala.concurrent.Future$.apply(Future.scala:485)
        at play.core.j.JavaAction$class.apply(JavaAction.scala:82)
        at 
play.core.Router$HandlerInvokerFactory$JavaActionInvokerFactory$$anon$15$$anon$1.apply(Router.scala:252)
        at 
play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:130)
        at 
play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:130)
        at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
        at 
play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:129)
        at 
play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:128)
        at scala.Option.map(Option.scala:145)
        at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:128)
        at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:121)
        at 
play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:483)
        at 
play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:483)
        at 
play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:519)
        at 
play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:519)
        at 
play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:496)
        at 
play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:496)
        at 
scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
        at 
scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
        at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:41)
        at 
akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at 
scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at 
scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at 
scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: org.apache.uima.ruta.extensions.RutaParseRuntimeException: 
org.apache.uima.ruta.extensions.RutaParseRuntimeException: 
org.apache.uima.ruta.extensions.RutaParseRuntimeException: 
java.lang.RuntimeException: Cannot resolve imports in _APP_TypeSystem
        at 
org.apache.uima.ruta.parser.RutaParser.emitErrorMessage(RutaParser.java:397)
        at 
org.apache.uima.ruta.parser.RutaParser.globalStatements(RutaParser.java:891)
        at 
org.apache.uima.ruta.parser.RutaParser.file_input(RutaParser.java:714)
        ... 42 more
Caused by: org.apache.uima.ruta.extensions.RutaParseRuntimeException: 
org.apache.uima.ruta.extensions.RutaParseRuntimeException: 
java.lang.RuntimeException: Cannot resolve imports in _APP_TypeSystem
        at 
org.apache.uima.ruta.parser.RutaParser.emitErrorMessage(RutaParser.java:397)
        at 
org.apache.uima.ruta.parser.RutaParser.globalStatement(RutaParser.java:929)
        at 
org.apache.uima.ruta.parser.RutaParser.globalStatements(RutaParser.java:870)
        ... 43 more
Caused by: org.apache.uima.ruta.extensions.RutaParseRuntimeException: 
java.lang.RuntimeException: Cannot resolve imports in _APP_TypeSystem
        at 
org.apache.uima.ruta.parser.RutaParser.emitErrorMessage(RutaParser.java:397)
        at 
org.apache.uima.ruta.parser.RutaParser.importStatement(RutaParser.java:2609)
        at 
org.apache.uima.ruta.parser.RutaParser.globalStatement(RutaParser.java:916)
        ... 44 more
Caused by: java.lang.RuntimeException: Cannot resolve imports in _APP_TypeSystem
        at 
org.apache.uima.ruta.RutaEnvironment.importPackageFromTypeSystem(RutaEnvironment.java:594)
        at 
org.apache.uima.ruta.parser.RutaParser.importPackage(RutaParser.java:548)
        at 
org.apache.uima.ruta.parser.RutaParser.importStatement(RutaParser.java:2565)
        ... 45 more
Caused by: org.apache.uima.util.InvalidXMLException: An import could not be 
resolved.  No file with name "_APP_TypeSystem.xml" was found in the class path 
or data path. (Descriptor: <unknown>)
        at 
org.apache.uima.resource.metadata.impl.Import_impl.findAbsoluteUrl(Import_impl.java:122)
        at 
org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl.resolveImports(TypeSystemDescription_impl.java:230)
        at 
org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl.resolveImports(TypeSystemDescription_impl.java:210)
        at 
org.apache.uima.ruta.RutaEnvironment.importPackageFromTypeSystem(RutaEnvironment.java:592)
        ... 47 more

- This is the relevant code of the importer:

public class RutaComponentGenerator {

    public static String GENERATED_COMPONENTS_PATH = "app" + File.separator + 
"rutaComponents" + File.separator + "generatedComponents" + File.separator;

    /**
     * The path where the script will be written
     **/
    public static String SCRIPT_OUTPUT_PATH = GENERATED_COMPONENTS_PATH + 
"script" + File.separator;

    /**
     * The path where the generated *TypeSystem.xml will be written
     **/
    private File typeSystemOutputDirectory = new File(GENERATED_COMPONENTS_PATH 
+ "descriptor");

    /**
     * The path where the generated *Engine.xml will be written
     **/
    private File analysisEngineOutputDirectory = new 
File(GENERATED_COMPONENTS_PATH + "descriptor");

    // The paths where other relevant scripts descriptors, and resources are
    private String[] scriptPaths = new String[]{"app" + File.separator + 
"rutaComponents" + File.separator + "script", GENERATED_COMPONENTS_PATH + 
"script"};
    private String[] descriptorPaths = new String[]{"app" + File.separator + 
"rutaComponents" + File.separator + "descriptor", GENERATED_COMPONENTS_PATH + 
"descriptor", "app" + File.separator + "informationExtraction" + File.separator 
+ "lexiaTypes"};
    private String[] resourcePaths = new String[]{"app" + File.separator + 
"rutaComponents" + File.separator + "resources", GENERATED_COMPONENTS_PATH + 
"resources"};

    /**
     * Prepares Generates the XML files needed for the AnalysisEngine and the 
TypeSystem of the new RUTA component
     *
     * @param scriptName The file name of the script for which the 
RUTA-component shall be generated
     */
    public void generate(String scriptName) {

        if (!typeSystemOutputDirectory.exists()) {
            typeSystemOutputDirectory.mkdirs();
        }
        if (!analysisEngineOutputDirectory.exists()) {
            analysisEngineOutputDirectory.mkdirs();
        }

        RutaDescriptorFactory factory = null;
        try {
            factory = new RutaDescriptorFactory("app" + File.separator + 
"rutaComponents" + File.separator + "descriptor" + File.separator + 
"BasicTypeSystem.xml", "app" + File.separator + "rutaComponents" + 
File.separator + "descriptor" + File.separator + "BasicEngine.xml");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        RutaBuildOptions options = new RutaBuildOptions();
        options.setEncoding("UTF-8");
        options.setResolveImports(true);

        // ToDo: Ensure that Mercurial-controlled scripts can't be rebuilt with 
this mechanism (for security reasons)
        // ToDo: Ensure that the filename is unique for all scripts
        File scriptToBuild = new File(SCRIPT_OUTPUT_PATH + scriptName + 
".ruta");

        try {
            RutaDescriptorInformation descriptorInformation = 
factory.parseDescriptorInformation(scriptToBuild, options);
            String packageString = "";

            String engineOutput = new File(analysisEngineOutputDirectory, 
packageString + descriptorInformation.getScriptName() + 
options.getAnalysisEngineSuffix() + ".xml").getAbsolutePath();

            String typeSystemOutput = new File(typeSystemOutputDirectory, 
packageString + descriptorInformation.getScriptName() + 
options.getTypeSystemSuffix() + ".xml").getAbsolutePath();

            Pair<AnalysisEngineDescription, TypeSystemDescription> descriptions 
= factory.createDescriptions(engineOutput, typeSystemOutput, 
descriptorInformation, options, scriptPaths, descriptorPaths, resourcePaths);

            write(descriptions.getKey(), engineOutput);
            write(descriptions.getValue(), typeSystemOutput);
        } catch (RecognitionException re) {
            System.err.println("Failed to parse UIMA Ruta script file: " + 
scriptToBuild.getAbsolutePath());
            re.printStackTrace();
        } catch (IOException ioe) {
            System.err.println("Failed to load UIMA Ruta script file: " + 
scriptToBuild.getAbsolutePath());
            ioe.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void write(XMLizable desc, String aFilename) throws SAXException, 
IOException {
        OutputStream os = null;
        try {
            File out = new File(aFilename);
            out.getParentFile().mkdirs();
            os = new FileOutputStream(out);
            Logger.info("Debug info: Writing descriptor to: " + out);
            desc.toXML(os);
        } finally {
            IOUtils.closeQuietly(os);
        }
    }
}
- Again some sample imports I’m using:

// Import types
IMPORT PACKAGE de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos FROM 
_LEXIA_TypeSystem AS pos;

I’d really appreciate any help and thanks so much in advance!

Best,
Ingo
> On 10 Nov 2016, at 16:33, Peter Klügl <[email protected]> wrote:
> 
> Hi,
> 
> this should work just like in 2.3.0. However, there are some changes
> (and a bug concerning the datapath).
> 
> I assume that you use the ruta-maven-plugin to create the descriptors?
> Did you use import-by-location before? I think the default changed to
> import-by-name.
> 
> <importByName>true</importByName>
> 
> You can switch the import back to import-by-location in the plugin
> configuration (set it to false), but I rather recommend to use
> import-by-name in maven built projects.
> In order to do this, you best place the type system descriptor in the
> classpath. If you do not want to refer to the type system with package,
> place it directly in the classpath root, e.g., in src/main/resources.
> 
> In case of a DKPro Core type system, add the artifact as a dependency if
> not done yet and change your import to:
> 
> IMPORT PACKAGE de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos FROM
> desc.type.POS AS pos;
> 
> Then, you do not need to copy anything since the typesystem is directly
> loaded from the dependency (the jar in the m2 repo).
> 
> btw, there is an up-to-date example project for the integration of DKPro
> Core in Ruta scripts:
> https://github.com/pkluegl/ruta/tree/master/ruta-german-novel-with-dkpro
> 
> In case this did not solve your problem: How did you import the
> typesystem before?
> - Is the type system located in the root of the classpath?
> - Did you specify descriptorPaths in the configuration parameters?
> - Have you set the datapath?
> 
> Best,
> 
> Peter
> 
> 
> Am 10.11.2016 um 15:57 schrieb Ingo Glaser:
>> Hey guys,
>> 
>> I recently updated from Apache UIMA Ruta version 2.3.0 to 2.5.0. However, 
>> after the upgrade, my application does not run anymore, due to some error in 
>> the ruta scripts. I get the following error:
>> 
>> Caused by: org.apache.uima.util.InvalidXMLException: An import could not be 
>> resolved.  No file with name "_APP_TypeSystem.xml" was found in the class 
>> path or data path. (Descriptor: <unknown>)
>> at 
>> org.apache.uima.resource.metadata.impl.Import_impl.findAbsoluteUrl(Import_impl.java:115)
>> at 
>> org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl.resolveImports(TypeSystemDescription_impl.java:228)
>> at 
>> org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl.resolveImports(TypeSystemDescription_impl.java:208)
>> at 
>> org.apache.uima.ruta.RutaEnvironment.importPackageFromTypeSystem(RutaEnvironment.java:592)
>> ... 67 more
>> I assume that's because of the import within my ruta script. Do you have any 
>> idea, if and how the way we import something in a script has changed from 
>> version 2.3 to 2.5?
>> 
>> I do import like this:
>> 
>> IMPORT PACKAGE de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos FROM 
>> _APP_TypeSystem AS pos;
>> 
>> Thanks already in advance for your help!
>> 
>> 
>> 
>> 
> 

Reply via email to