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

rzo1 pushed a commit to branch opennlp-2.x
in repository https://gitbox.apache.org/repos/asf/opennlp.git


The following commit(s) were added to refs/heads/opennlp-2.x by this push:
     new 631e04324 GH-1522: Download the 1.5 models from 
downloads.sourceforge.net (#1524)
631e04324 is described below

commit 631e043244ba86d9737877d7e7680edfb3248c8f
Author: Richard Zowalla <[email protected]>
AuthorDate: Mon Nov 2 11:16:24 2026 +0100

    GH-1522: Download the 1.5 models from downloads.sourceforge.net (#1524)
    
    The project web copy at opennlp.sourceforge.net/models-1.5 returns 404. The 
same files are still served from the SourceForge file release area, so the 
tests and createPear.xml now use 
https://downloads.sourceforge.net/project/opennlp/models-1.5/. 
EnabledWhenCDNAvailable gets an optional path, probed with a HEAD request, 
because the root of downloads.sourceforge.net returns 404.
---
 .../opennlp/tools/AbstractModelLoaderTest.java     |  2 +-
 .../opennlp/tools/EnabledWhenCDNAvailable.java     |  9 +++++++-
 .../cmdline/chunker/ChunkerModelLoaderTest.java    |  3 ++-
 .../namefind/TokenNameFinderModelLoaderTest.java   |  3 ++-
 .../tools/namefind/TokenNameFinderModelTest.java   |  3 ++-
 .../java/opennlp/tools/postag/POSTaggerMETest.java | 12 +++++++----
 opennlp-uima/createPear.xml                        | 24 +++++++++++-----------
 .../src/test/java/opennlp/uima/AbstractIT.java     |  2 +-
 .../java/opennlp/uima/FullAnnotatorsFlowIT.java    |  3 ++-
 .../test/java/opennlp/uima/SingleAnnotatorIT.java  |  3 ++-
 pom.xml                                            |  2 +-
 11 files changed, 41 insertions(+), 25 deletions(-)

diff --git 
a/opennlp-tools/src/test/java/opennlp/tools/AbstractModelLoaderTest.java 
b/opennlp-tools/src/test/java/opennlp/tools/AbstractModelLoaderTest.java
index 059a07d35..fa07e6a24 100644
--- a/opennlp-tools/src/test/java/opennlp/tools/AbstractModelLoaderTest.java
+++ b/opennlp-tools/src/test/java/opennlp/tools/AbstractModelLoaderTest.java
@@ -34,7 +34,7 @@ public abstract class AbstractModelLoaderTest {
 
   private static final Logger logger = 
LoggerFactory.getLogger(AbstractModelLoaderTest.class);
 
-  private static final String BASE_URL_MODELS_V15 = 
System.getProperty("opennlp.model.v15.base.url", 
"https://opennlp.sourceforge.net/models-1.5/";);
+  private static final String BASE_URL_MODELS_V15 = 
System.getProperty("opennlp.model.v15.base.url", 
"https://downloads.sourceforge.net/project/opennlp/models-1.5/";);
   private static final String BASE_URL_MODELS_V183 = 
System.getProperty("opennlp.model.v183.base.url", 
"https://dlcdn.apache.org/opennlp/models/langdetect/1.8.3/";);
   protected static final Path OPENNLP_DIR = 
Paths.get(System.getProperty("OPENNLP_DOWNLOAD_HOME",
           System.getProperty("user.home"))).resolve(".opennlp");
diff --git 
a/opennlp-tools/src/test/java/opennlp/tools/EnabledWhenCDNAvailable.java 
b/opennlp-tools/src/test/java/opennlp/tools/EnabledWhenCDNAvailable.java
index fccc55266..3c3f31986 100644
--- a/opennlp-tools/src/test/java/opennlp/tools/EnabledWhenCDNAvailable.java
+++ b/opennlp-tools/src/test/java/opennlp/tools/EnabledWhenCDNAvailable.java
@@ -41,6 +41,12 @@ public @interface EnabledWhenCDNAvailable {
 
   String hostname();
 
+  /**
+   * The path of a resource on {@link #hostname()} that must be reachable, 
starting with
+   * {@code /}. Empty to check the root of the host.
+   */
+  String path() default "";
+
   int TIMEOUT_MS = 2000;
 
   // JUnit5 execution condition to decide whether tests can assume CDN 
downloads are possible (= online).
@@ -57,10 +63,11 @@ public @interface EnabledWhenCDNAvailable {
           socket.connect(new InetSocketAddress(host, 443), TIMEOUT_MS);
 
           // Then, try to check the HTTP status by making an HTTPS request
-          final URL url = new URL("https://"; + host);
+          final URL url = new URL("https://"; + host + annotation.path());
           final HttpsURLConnection connection = (HttpsURLConnection) 
url.openConnection();
           connection.setConnectTimeout(TIMEOUT_MS);
           connection.setReadTimeout(TIMEOUT_MS);
+          connection.setRequestMethod("HEAD");
           int statusCode = connection.getResponseCode();
 
           // If the HTTP status code indicates success (2xx range), return 
enabled
diff --git 
a/opennlp-tools/src/test/java/opennlp/tools/cmdline/chunker/ChunkerModelLoaderTest.java
 
b/opennlp-tools/src/test/java/opennlp/tools/cmdline/chunker/ChunkerModelLoaderTest.java
index 25436f861..bb449c863 100644
--- 
a/opennlp-tools/src/test/java/opennlp/tools/cmdline/chunker/ChunkerModelLoaderTest.java
+++ 
b/opennlp-tools/src/test/java/opennlp/tools/cmdline/chunker/ChunkerModelLoaderTest.java
@@ -31,7 +31,8 @@ import opennlp.tools.AbstractModelLoaderTest;
 import opennlp.tools.EnabledWhenCDNAvailable;
 import opennlp.tools.chunker.ChunkerModel;
 
-@EnabledWhenCDNAvailable(hostname = "opennlp.sourceforge.net")
+@EnabledWhenCDNAvailable(hostname = "downloads.sourceforge.net",
+    path = "/project/opennlp/models-1.5/en-token.bin")
 public class ChunkerModelLoaderTest extends AbstractModelLoaderTest {
 
   // SUT
diff --git 
a/opennlp-tools/src/test/java/opennlp/tools/cmdline/namefind/TokenNameFinderModelLoaderTest.java
 
b/opennlp-tools/src/test/java/opennlp/tools/cmdline/namefind/TokenNameFinderModelLoaderTest.java
index 662866397..25b383c22 100644
--- 
a/opennlp-tools/src/test/java/opennlp/tools/cmdline/namefind/TokenNameFinderModelLoaderTest.java
+++ 
b/opennlp-tools/src/test/java/opennlp/tools/cmdline/namefind/TokenNameFinderModelLoaderTest.java
@@ -31,7 +31,8 @@ import opennlp.tools.AbstractModelLoaderTest;
 import opennlp.tools.EnabledWhenCDNAvailable;
 import opennlp.tools.namefind.TokenNameFinderModel;
 
-@EnabledWhenCDNAvailable(hostname = "opennlp.sourceforge.net")
+@EnabledWhenCDNAvailable(hostname = "downloads.sourceforge.net",
+    path = "/project/opennlp/models-1.5/en-token.bin")
 public class TokenNameFinderModelLoaderTest extends AbstractModelLoaderTest {
 
   // SUT
diff --git 
a/opennlp-tools/src/test/java/opennlp/tools/namefind/TokenNameFinderModelTest.java
 
b/opennlp-tools/src/test/java/opennlp/tools/namefind/TokenNameFinderModelTest.java
index 806ec6d38..2b04a1aa5 100644
--- 
a/opennlp-tools/src/test/java/opennlp/tools/namefind/TokenNameFinderModelTest.java
+++ 
b/opennlp-tools/src/test/java/opennlp/tools/namefind/TokenNameFinderModelTest.java
@@ -111,7 +111,8 @@ public class TokenNameFinderModelTest extends 
AbstractNameFinderTest {
   /*
    * OPENNLP-1369
    */
-  @EnabledWhenCDNAvailable(hostname = "opennlp.sourceforge.net")
+  @EnabledWhenCDNAvailable(hostname = "downloads.sourceforge.net",
+      path = "/project/opennlp/models-1.5/en-token.bin")
   @Test
   void testNERWithPOSModelV15() throws IOException, URISyntaxException {
 
diff --git 
a/opennlp-tools/src/test/java/opennlp/tools/postag/POSTaggerMETest.java 
b/opennlp-tools/src/test/java/opennlp/tools/postag/POSTaggerMETest.java
index dc4a62685..eb738b40d 100644
--- a/opennlp-tools/src/test/java/opennlp/tools/postag/POSTaggerMETest.java
+++ b/opennlp-tools/src/test/java/opennlp/tools/postag/POSTaggerMETest.java
@@ -97,7 +97,8 @@ public class POSTaggerMETest extends AbstractModelLoaderTest {
   }
 
   @Test
-  @EnabledWhenCDNAvailable(hostname = "opennlp.sourceforge.net")
+  @EnabledWhenCDNAvailable(hostname = "downloads.sourceforge.net",
+      path = "/project/opennlp/models-1.5/en-token.bin")
   void testPOSTaggerLegacyPerceptronPennToUD() throws IOException {
     final String[] expected = {"DET", "NOUN", "VERB", "ADV", "VERB", "ADP", 
"DET", "NOUN", "PUNCT"};
     //convert PENN to UD on the fly.
@@ -106,7 +107,8 @@ public class POSTaggerMETest extends 
AbstractModelLoaderTest {
   }
 
   @Test
-  @EnabledWhenCDNAvailable(hostname = "opennlp.sourceforge.net")
+  @EnabledWhenCDNAvailable(hostname = "downloads.sourceforge.net",
+      path = "/project/opennlp/models-1.5/en-token.bin")
   void testPOSTaggerLegacyPerceptronPenn() throws IOException {
     final String[] expected = {"DT", "NN", "VBD", "RB", "VBN", "IN", "DT", 
"NN", "."};
     //convert PENN to UD on the fly.
@@ -115,7 +117,8 @@ public class POSTaggerMETest extends 
AbstractModelLoaderTest {
   }
 
   @Test
-  @EnabledWhenCDNAvailable(hostname = "opennlp.sourceforge.net")
+  @EnabledWhenCDNAvailable(hostname = "downloads.sourceforge.net",
+      path = "/project/opennlp/models-1.5/en-token.bin")
   void testPOSTaggerLegacyMaxentPennToUD() throws IOException {
     final String[] expected = {"DET", "NOUN", "VERB", "ADV", "VERB", "ADP", 
"DET", "NOUN", "PUNCT"};
     //convert PENN to UD on the fly.
@@ -124,7 +127,8 @@ public class POSTaggerMETest extends 
AbstractModelLoaderTest {
   }
 
   @Test
-  @EnabledWhenCDNAvailable(hostname = "opennlp.sourceforge.net")
+  @EnabledWhenCDNAvailable(hostname = "downloads.sourceforge.net",
+      path = "/project/opennlp/models-1.5/en-token.bin")
   void testPOSTaggerLegacyMaxentPenn() throws IOException {
     final String[] expected = {"DT", "NN", "VBD", "RB", "VBN", "IN", "DT", 
"NN", "."};
     //convert PENN to UD on the fly.
diff --git a/opennlp-uima/createPear.xml b/opennlp-uima/createPear.xml
index 9fecb265c..673a0da59 100644
--- a/opennlp-uima/createPear.xml
+++ b/opennlp-uima/createPear.xml
@@ -71,18 +71,18 @@
 
 
                <mkdir dir="${modelDir}" />
-               <get 
src="http://opennlp.sourceforge.net/models-1.5/en-token.bin"; 
dest="${modelDir}/en-token.bin" />
-               <get 
src="http://opennlp.sourceforge.net/models-1.5/en-sent.bin"; 
dest="${modelDir}/en-sent.bin" />
-               <get 
src="http://opennlp.sourceforge.net/models-1.5/en-ner-date.bin"; 
dest="${modelDir}/en-ner-date.bin" />
-               <get 
src="http://opennlp.sourceforge.net/models-1.5/en-ner-location.bin"; 
dest="${modelDir}/en-ner-location.bin" />
-               <get 
src="http://opennlp.sourceforge.net/models-1.5/en-ner-money.bin"; 
dest="${modelDir}/en-ner-money.bin" />
-               <get 
src="http://opennlp.sourceforge.net/models-1.5/en-ner-organization.bin"; 
dest="${modelDir}/en-ner-organization.bin" />
-               <get 
src="http://opennlp.sourceforge.net/models-1.5/en-ner-percentage.bin"; 
dest="${modelDir}/en-ner-percentage.bin" />
-               <get 
src="http://opennlp.sourceforge.net/models-1.5/en-ner-person.bin"; 
dest="${modelDir}/en-ner-person.bin" />
-               <get 
src="http://opennlp.sourceforge.net/models-1.5/en-ner-time.bin"; 
dest="${modelDir}/en-ner-time.bin" />
-               <get 
src="http://opennlp.sourceforge.net/models-1.5/en-pos-maxent.bin"; 
dest="${modelDir}/en-pos-maxent.bin" />
-               <get 
src="http://opennlp.sourceforge.net/models-1.5/en-parser-chunking.bin"; 
dest="${modelDir}/en-parser-chunking.bin" />
-               <get 
src="http://opennlp.sourceforge.net/models-1.5/en-chunker.bin"; 
dest="${modelDir}/en-chunker.bin" />
+               <get 
src="https://downloads.sourceforge.net/project/opennlp/models-1.5/en-token.bin"; 
dest="${modelDir}/en-token.bin" />
+               <get 
src="https://downloads.sourceforge.net/project/opennlp/models-1.5/en-sent.bin"; 
dest="${modelDir}/en-sent.bin" />
+               <get 
src="https://downloads.sourceforge.net/project/opennlp/models-1.5/en-ner-date.bin";
 dest="${modelDir}/en-ner-date.bin" />
+               <get 
src="https://downloads.sourceforge.net/project/opennlp/models-1.5/en-ner-location.bin";
 dest="${modelDir}/en-ner-location.bin" />
+               <get 
src="https://downloads.sourceforge.net/project/opennlp/models-1.5/en-ner-money.bin";
 dest="${modelDir}/en-ner-money.bin" />
+               <get 
src="https://downloads.sourceforge.net/project/opennlp/models-1.5/en-ner-organization.bin";
 dest="${modelDir}/en-ner-organization.bin" />
+               <get 
src="https://downloads.sourceforge.net/project/opennlp/models-1.5/en-ner-percentage.bin";
 dest="${modelDir}/en-ner-percentage.bin" />
+               <get 
src="https://downloads.sourceforge.net/project/opennlp/models-1.5/en-ner-person.bin";
 dest="${modelDir}/en-ner-person.bin" />
+               <get 
src="https://downloads.sourceforge.net/project/opennlp/models-1.5/en-ner-time.bin";
 dest="${modelDir}/en-ner-time.bin" />
+               <get 
src="https://downloads.sourceforge.net/project/opennlp/models-1.5/en-pos-maxent.bin";
 dest="${modelDir}/en-pos-maxent.bin" />
+               <get 
src="https://downloads.sourceforge.net/project/opennlp/models-1.5/en-parser-chunking.bin";
 dest="${modelDir}/en-parser-chunking.bin" />
+               <get 
src="https://downloads.sourceforge.net/project/opennlp/models-1.5/en-chunker.bin";
 dest="${modelDir}/en-chunker.bin" />
 
                <!-- Create pear zip file-->
                <zip destfile="target/OpenNlpTextAnalyzer.pear" 
basedir="${pearDir}" />
diff --git a/opennlp-uima/src/test/java/opennlp/uima/AbstractIT.java 
b/opennlp-uima/src/test/java/opennlp/uima/AbstractIT.java
index 477e93011..6cb0593d5 100644
--- a/opennlp-uima/src/test/java/opennlp/uima/AbstractIT.java
+++ b/opennlp-uima/src/test/java/opennlp/uima/AbstractIT.java
@@ -53,7 +53,7 @@ abstract class AbstractIT extends AbstractUimaTest {
 
   protected static final String BIN = ".bin";
 
-  private static final String BASE_URL_MODELS_V15 = 
System.getProperty("opennlp.model.v15.base.url", 
"https://opennlp.sourceforge.net/models-1.5/";);
+  private static final String BASE_URL_MODELS_V15 = 
System.getProperty("opennlp.model.v15.base.url", 
"https://downloads.sourceforge.net/project/opennlp/models-1.5/";);
   
   @BeforeAll
   public static void initEnv() throws IOException {
diff --git a/opennlp-uima/src/test/java/opennlp/uima/FullAnnotatorsFlowIT.java 
b/opennlp-uima/src/test/java/opennlp/uima/FullAnnotatorsFlowIT.java
index 84e3e9696..4177a94cd 100644
--- a/opennlp-uima/src/test/java/opennlp/uima/FullAnnotatorsFlowIT.java
+++ b/opennlp-uima/src/test/java/opennlp/uima/FullAnnotatorsFlowIT.java
@@ -35,7 +35,8 @@ import static org.junit.jupiter.api.Assertions.fail;
 /**
  * Test for initialization of the opennlp.uima Annotators classes.
  */
-@EnabledWhenCDNAvailable(hostname = "opennlp.sourceforge.net")
+@EnabledWhenCDNAvailable(hostname = "downloads.sourceforge.net",
+    path = "/project/opennlp/models-1.5/en-token.bin")
 public class FullAnnotatorsFlowIT extends AbstractIT {
 
   private static final String DOCUMENT_TEXT =
diff --git a/opennlp-uima/src/test/java/opennlp/uima/SingleAnnotatorIT.java 
b/opennlp-uima/src/test/java/opennlp/uima/SingleAnnotatorIT.java
index 9abea9689..93da7bd4e 100644
--- a/opennlp-uima/src/test/java/opennlp/uima/SingleAnnotatorIT.java
+++ b/opennlp-uima/src/test/java/opennlp/uima/SingleAnnotatorIT.java
@@ -35,7 +35,8 @@ import static org.junit.jupiter.api.Assertions.fail;
 /**
  * Test for initialization of the opennlp.uima Annotators classes.
  */
-@EnabledWhenCDNAvailable(hostname = "opennlp.sourceforge.net")
+@EnabledWhenCDNAvailable(hostname = "downloads.sourceforge.net",
+    path = "/project/opennlp/models-1.5/en-token.bin")
 public class SingleAnnotatorIT extends AbstractIT {
 
   private static final String DOCUMENT_TEXT =
diff --git a/pom.xml b/pom.xml
index 3281920fc..5b7fe861e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -184,7 +184,7 @@
                <opennlp.models.version>1.3.0</opennlp.models.version>
 
                <!-- Old OpenNLP models are hosted on Sourceforge. Set a 
default. -->
-               
<opennlp.model.v15.base.url>https://opennlp.sourceforge.net/models-1.5/</opennlp.model.v15.base.url>
+               
<opennlp.model.v15.base.url>https://downloads.sourceforge.net/project/opennlp/models-1.5/</opennlp.model.v15.base.url>
 
                <!-- Dependency versions -->
                <junit.version>6.1.3</junit.version>

Reply via email to