You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2022/07/28 12:31:23 UTC

[uima-uimafit] branch feature/195-Detect-descriptors-via-SPI created (now 81f5454)

This is an automated email from the ASF dual-hosted git repository.

rec pushed a change to branch feature/195-Detect-descriptors-via-SPI
in repository https://gitbox.apache.org/repos/asf/uima-uimafit.git


      at 81f5454  #195 - Detect descriptors via SPI

This branch includes the following new commits:

     new 81f5454  #195 - Detect descriptors via SPI

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[uima-uimafit] 01/01: #195 - Detect descriptors via SPI

Posted by re...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rec pushed a commit to branch feature/195-Detect-descriptors-via-SPI
in repository https://gitbox.apache.org/repos/asf/uima-uimafit.git

commit 81f5454e281975cef6965225bd793090c6934def
Author: Richard Eckart de Castilho <re...@apache.org>
AuthorDate: Thu Jul 28 14:29:47 2022 +0200

    #195 - Detect descriptors via SPI
    
    - Add ability to pick up type system descriptors via SPI
---
 .../uima/fit/factory/TypeSystemDescriptionFactory.java | 18 ++++++++++++++++++
 uimafit-parent/pom.xml                                 |  2 +-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/uimafit-core/src/main/java/org/apache/uima/fit/factory/TypeSystemDescriptionFactory.java b/uimafit-core/src/main/java/org/apache/uima/fit/factory/TypeSystemDescriptionFactory.java
index a91d9a3..b13bd35 100644
--- a/uimafit-core/src/main/java/org/apache/uima/fit/factory/TypeSystemDescriptionFactory.java
+++ b/uimafit-core/src/main/java/org/apache/uima/fit/factory/TypeSystemDescriptionFactory.java
@@ -25,6 +25,7 @@ import static org.apache.uima.util.CasCreationUtils.mergeTypeSystems;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.ServiceLoader;
 import java.util.WeakHashMap;
 
 import org.apache.uima.fit.internal.ClassLoaderUtils;
@@ -36,12 +37,14 @@ import org.apache.uima.resource.metadata.Import;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
 import org.apache.uima.resource.metadata.impl.Import_impl;
 import org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl;
+import org.apache.uima.spi.TypeSystemDescriptionProvider;
 import org.apache.uima.util.InvalidXMLException;
 import org.apache.uima.util.XMLInputSource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public final class TypeSystemDescriptionFactory {
+
   private static final Logger LOG = LoggerFactory.getLogger(TypeSystemDescriptionFactory.class);
 
   private static final Object SCAN_LOCK = new Object();
@@ -58,6 +61,7 @@ public final class TypeSystemDescriptionFactory {
   }
 
   private TypeSystemDescriptionFactory() {
+
     // This class is not meant to be instantiated
   }
 
@@ -69,6 +73,7 @@ public final class TypeSystemDescriptionFactory {
    * @return A TypeSystemDescription that includes the types from all of the specified files.
    */
   public static TypeSystemDescription createTypeSystemDescription(String... descriptorNames) {
+
     TypeSystemDescription typeSystem = new TypeSystemDescription_impl();
     List<Import> imports = new ArrayList<>();
     for (String descriptorName : descriptorNames) {
@@ -90,6 +95,7 @@ public final class TypeSystemDescriptionFactory {
    */
   public static TypeSystemDescription createTypeSystemDescriptionFromPath(
           String... descriptorURIs) {
+
     TypeSystemDescription typeSystem = new TypeSystemDescription_impl();
     List<Import> imports = new ArrayList<>();
     for (String descriptorURI : descriptorURIs) {
@@ -113,6 +119,7 @@ public final class TypeSystemDescriptionFactory {
    */
   public static TypeSystemDescription createTypeSystemDescription()
           throws ResourceInitializationException {
+
     ClassLoader cl = ClassLoaderUtils.findClassloader();
     TypeSystemDescription tsd = typeDescriptorByClassloader.get(cl);
     if (tsd == null) {
@@ -130,6 +137,15 @@ public final class TypeSystemDescriptionFactory {
           }
         }
 
+        ServiceLoader<TypeSystemDescriptionProvider> loader = ServiceLoader
+                .load(TypeSystemDescriptionProvider.class);
+        loader.forEach(tsdp -> {
+          for (TypeSystemDescription _tsd : tsdp.listTypeSystemDescriptions()) {
+            tsdList.add(_tsd);
+            LOG.debug("Loaded SPI-provided type system at [{}]", _tsd.getSourceUrlString());
+          }
+        });
+
         LOG.trace("Merging type systems and resolving imports...");
         ResourceManager resMgr = ResourceManagerFactory.newResourceManager();
         tsd = mergeTypeSystems(tsdList, resMgr);
@@ -149,6 +165,7 @@ public final class TypeSystemDescriptionFactory {
    *           if the locations could not be resolved.
    */
   public static String[] scanTypeDescriptors() throws ResourceInitializationException {
+
     synchronized (SCAN_LOCK) {
       ClassLoader cl = ClassLoaderUtils.findClassloader();
       String[] typeDescriptorLocations = typeDescriptorLocationsByClassloader.get(cl);
@@ -165,6 +182,7 @@ public final class TypeSystemDescriptionFactory {
    * all auto-import locations.
    */
   public static void forceTypeDescriptorsScan() {
+
     synchronized (SCAN_LOCK) {
       typeDescriptorLocationsByClassloader.clear();
       typeDescriptorByClassloader.clear();
diff --git a/uimafit-parent/pom.xml b/uimafit-parent/pom.xml
index 30fe106..843345a 100644
--- a/uimafit-parent/pom.xml
+++ b/uimafit-parent/pom.xml
@@ -52,7 +52,7 @@
     <mockito-version>4.4.0</mockito-version>
     <spring-version>5.3.20</spring-version>
     <slf4j-version>1.7.36</slf4j-version>
-    <uima-version>3.3.0</uima-version>
+    <uima-version>3.4.0-SNAPSHOT</uima-version>
     <xmlunit-version>2.9.0</xmlunit-version>
   </properties>