Skip to content

Commit c677bae

Browse files
committed
[test] Drop milton-client WebDAV tests; add JDK round-trip tests
Removes HC4/milton-client test harness from exist-webdav (Gate A). Litmus bats cover RFC compliance; WebDavRoundTripTest keeps eXist-specific XML serialization checks (DOCTYPE, xml-decl, CDATA).
1 parent ff885eb commit c677bae

19 files changed

Lines changed: 279 additions & 1242 deletions

File tree

.github/dependabot.yml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,6 @@ updates:
105105
update-types:
106106
- patch
107107
- minor
108-
milton-webdav:
109-
patterns:
110-
- "org.exist-db.thirdparty.com.ettrema:*"
111-
update-types:
112-
- patch
113-
- minor
114108
maven-plugins-apache:
115109
patterns:
116110
- "org.apache.maven.plugins:*"

BUILD.md

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,58 @@ Useful build switches:
2828
Maven resolves dependencies from these repositories (defined in `exist-parent/pom.xml`):
2929

3030
- **Releases:** Maven Central (direct) → exist-db proxy → exist-db → evolved-binary (all public)
31-
- **Snapshots:** GitHub Packages (exist, exist-xqts-runner) → exist-db-snapshots → evolved-binary-snapshots
32-
33-
### GitHub Packages (authentication for SNAPSHOT builds)
31+
- **GitHub Packages (releases):** `jackrabbit-webdav-jakarta` — transformed Jackrabbit WebDAV JAR used by `exist-webdav` ([PR #6364](https://github.com/eXist-db/exist/pull/6364))
32+
- **Snapshots:** GitHub Packages (`exist`, `exist-xqts-runner`) → exist-db-snapshots → evolved-binary-snapshots
33+
34+
### GitHub Packages (authentication)
35+
36+
Some artifacts are hosted on GitHub Packages under the `eXist-db` org. GitHub requires authentication; without it Maven reports **401 Unauthorized**.
37+
38+
| Server id in `settings.xml` | Repository | Used for |
39+
|-----------------------------|------------|----------|
40+
| `github` | `eXist-db/exist` | eXist SNAPSHOT builds published to GitHub Packages |
41+
| `github-xqts-runner` | `eXist-db/exist-xqts-runner` | `exist-xqts` conformance runner (SNAPSHOT) |
42+
| `github-jackrabbit-webdav-jakarta` | `eXist-db/jackrabbit-webdav-jakarta` | `jackrabbit-webdav` compile dependency in `exist-webdav` |
43+
44+
Maven matches credentials by **repository id**: the `<id>` in each `<repository>` block in `exist-parent/pom.xml` must match a `<server><id>…</id>` in `~/.m2/settings.xml`. A PAT configured only as `github` is **not** applied to the other two repos.
45+
46+
**Option 1 – Skip modules that need GitHub Packages** (no auth needed):
47+
48+
- XQTS: `mvn -DskipTests package -pl '!exist-xqts'`
49+
- WebDAV tests: `mvn -DskipTests package -pl '!exist-webdav'` (or skip tests only: `-Dtest=!* -pl exist-webdav` is not ideal; prefer `-pl '!exist-webdav'` for compile-only)
50+
51+
**Option 2 – Configure GitHub auth** (full build including `exist-webdav` and `exist-xqts`): add a GitHub PAT with **`read:packages`** (and org access to `eXist-db` packages) to `~/.m2/settings.xml`. Use the same token for all three server entries; only the `<id>` differs. See `.github/actions/maven-github-settings/action.yml` for the canonical format:
52+
53+
```xml
54+
<servers>
55+
<server>
56+
<id>github</id>
57+
<username>YOUR_GITHUB_USERNAME</username>
58+
<password>YOUR_GITHUB_PAT</password>
59+
</server>
60+
<server>
61+
<id>github-xqts-runner</id>
62+
<username>YOUR_GITHUB_USERNAME</username>
63+
<password>YOUR_GITHUB_PAT</password>
64+
</server>
65+
<server>
66+
<id>github-jackrabbit-webdav-jakarta</id>
67+
<username>YOUR_GITHUB_USERNAME</username>
68+
<password>YOUR_GITHUB_PAT</password>
69+
</server>
70+
</servers>
71+
```
3472

35-
When building from `develop` (or any SNAPSHOT version), Maven resolves `exist-xqts-runner` from `https://maven.pkg.github.com/eXist-db/exist-xqts-runner`. GitHub Packages requires authentication; without it you get **401 Unauthorized**.
73+
If a previous resolve failed with 401, Maven may cache the failure as `*.lastUpdated` under `~/.m2/repository/`. After fixing `settings.xml`, delete that artifact directory or add `-U` on the next build.
3674

37-
**Option 1 – Exclude XQTS** (no auth needed): use `mvn -DskipTests package -pl '!exist-xqts'` to skip the XQTS module.
75+
Example: verify Jackrabbit resolves after configuring auth:
3876

39-
**Option 2 – Configure GitHub auth** (if you need XQTS or a full build): add a GitHub PAT to `~/.m2/settings.xml` as server `github-xqts-runner` (and optionally `github` for eXist snapshots). See `.github/actions/maven-github-settings/action.yml` for the expected `<server>` format.
77+
```bash
78+
rm -rf ~/.m2/repository/org/exist-db/thirdparty/org/apache/jackrabbit/jackrabbit-webdav/2.22.3-jakarta-ee10
79+
mvn dependency:get \
80+
-Dartifact=org.exist-db.thirdparty.org.apache.jackrabbit:jackrabbit-webdav:2.22.3-jakarta-ee10 \
81+
-U -Ddependency-check.skip=true
82+
```
4083

4184
Further build options can be found at: [eXist-db Build Documentation](http://www.exist-db.org/exist/apps/doc/exist-building.xml "How to build eXist") and on the workflow files of this repo.
4285

@@ -47,6 +90,7 @@ From the repo root:
4790
- **All tests:** `mvn -V -B verify -Ddependency-check.skip -Dlicense.skip`
4891
- **exist-core only:** add `--projects exist-core --also-make` to the above
4992
- **Single test class:** `mvn -Dtest=fully.qualified.TestClass test --projects exist-core --also-make`
93+
- **WebDAV round-trip tests:** `mvn test -pl extensions/webdav --also-make -Dtest=org.exist.webdav.WebDavRoundTripTest -Dsurefire.failIfNoSpecifiedTests=false` (requires `github-jackrabbit-webdav-jakarta` auth; litmus compliance runs in Docker CI)
5094

5195
**NOTE:**
5296
In the above example, we switched the current (checked-out) branch from `develop` to `master`. We use the [GitFlow for eXist-db](#contributing-to-exist) process:

exist-installer/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@
117117
<configuration>
118118
<installFile>${izpack.resources.target}/install.xml</installFile>
119119
<baseDir>${project.basedir}/../exist-distribution/target/exist-distribution-dir</baseDir>
120-
<includeProperties>apache.httpcomponents.core.version,apache.httpcomponents.version,apache.xmlrpc.version,appassembler.version,aspectj.version,git.commit.id,git.commit.id.abbrev,git.closest.tag.name,git.closest.tag.commit.count,git.commit.time,git.commit.id.describe,contact.email,exquery.distribution.version,icu.version,jetty.version,izpack.installation.info.appversion,izpack.installation.info.author.email,izpack.installation.info.author.name,izpack.installation.info.url,izpack.resources.src,izpack.resources.target,izpack.version,jansi.version,jaxb.api.version,jaxb.impl.version,log4j.version,lucene.version,milton.version,project.build.sourceEncoding,project.copyright.name,saxon.version,xmlresolver.version,maven.compiler.release</includeProperties>
120+
<includeProperties>apache.httpcomponents.core.version,apache.httpcomponents.version,apache.xmlrpc.version,appassembler.version,aspectj.version,git.commit.id,git.commit.id.abbrev,git.closest.tag.name,git.closest.tag.commit.count,git.commit.time,git.commit.id.describe,contact.email,exquery.distribution.version,icu.version,jetty.version,izpack.installation.info.appversion,izpack.installation.info.author.email,izpack.installation.info.author.name,izpack.installation.info.url,izpack.resources.src,izpack.resources.target,izpack.version,jansi.version,jaxb.api.version,jaxb.impl.version,log4j.version,lucene.version,project.build.sourceEncoding,project.copyright.name,saxon.version,xmlresolver.version,maven.compiler.release</includeProperties>
121121
<autoIncludeUrl>true</autoIncludeUrl>
122122
<autoIncludeDevelopers>true</autoIncludeDevelopers>
123123
</configuration>

exist-jetty-config/src/main/resources/standalone-webapp/WEB-INF/web.xml

Lines changed: 9 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -81,40 +81,10 @@
8181

8282
</servlet>
8383

84-
<!--
85-
Milton provides the WebDAV interface
86-
-->
84+
<!-- Jackrabbit WebDAV servlet -->
8785
<servlet>
88-
<servlet-name>milton</servlet-name>
89-
<servlet-class>org.exist.webdav.MiltonWebDAVServlet</servlet-class>
90-
91-
<!-- Don't change this value -->
92-
<init-param>
93-
<param-name>resource.factory.class</param-name>
94-
<param-value>org.exist.webdav.ExistResourceFactory</param-value>
95-
</init-param>
96-
97-
<!--
98-
Some WebDAV clients send a "Expect: 100-continue" header before
99-
uploading body data. Servlet containers (like tomcat and jetty) handle
100-
the header in a wrong way, making a client not work OK.
101-
Set value to TRUE to restore old behavior (FALSE is the new default
102-
value, hardcoded in MiltonWebDAVServlet).
103-
-->
104-
<!--
105-
<init-param>
106-
<param-name>enable.expect.continue</param-name>
107-
<param-value>false</param-value>
108-
</init-param>
109-
-->
110-
111-
<!-- Uncomment to enable debugging -->
112-
<!--
113-
<init-param>
114-
<param-name>filter_0</param-name>
115-
<param-value>com.bradmcevoy.http.DebugFilter</param-value>
116-
</init-param>
117-
-->
86+
<servlet-name>webdav</servlet-name>
87+
<servlet-class>org.exist.webdav.ExistWebdavServlet</servlet-class>
11888
</servlet>
11989

12090
<servlet>
@@ -178,6 +148,12 @@
178148
controller-config.xml. However, please note that some features of the
179149
website will only work if XQueryURLRewrite controls the /rest servlet
180150
(EXistServlet). -->
151+
<!-- Direct mapping for Jackrabbit WebDAV -->
152+
<servlet-mapping>
153+
<servlet-name>webdav</servlet-name>
154+
<url-pattern>/webdav/*</url-pattern>
155+
</servlet-mapping>
156+
181157
<servlet-mapping>
182158
<servlet-name>XQueryURLRewrite</servlet-name>
183159
<url-pattern>/*</url-pattern>

exist-parent/pom.xml

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,6 @@
133133
<jetty.version>12.1.9</jetty.version>
134134
<log4j.version>2.26.0</log4j.version>
135135
<lucene.version>10.4.0</lucene.version>
136-
<milton.version>1.8.1.3</milton.version>
137-
<milton.servlet.version>1.8.1.3-jakarta-ee10</milton.servlet.version>
138136
<nekohtml.version>2.1.3</nekohtml.version>
139137
<saxon.version>12.5</saxon.version>
140138
<xmlresolver.version>6.0.23</xmlresolver.version>
@@ -519,24 +517,6 @@
519517
<version>${exquery.distribution.version}</version>
520518
</dependency>
521519

522-
<dependency>
523-
<groupId>org.exist-db.thirdparty.com.ettrema</groupId>
524-
<artifactId>milton-api</artifactId>
525-
<version>${milton.version}</version>
526-
</dependency>
527-
528-
<dependency>
529-
<groupId>org.exist-db.thirdparty.com.ettrema</groupId>
530-
<artifactId>milton-client</artifactId>
531-
<version>${milton.version}</version>
532-
</dependency>
533-
534-
<dependency>
535-
<groupId>com.evolvedbinary.thirdparty.com.ettrema</groupId>
536-
<artifactId>milton-servlet</artifactId>
537-
<version>${milton.servlet.version}</version>
538-
</dependency>
539-
540520
<!-- Jackrabbit WebDAV (Jakarta EE 10 transformed) -->
541521
<dependency>
542522
<groupId>org.exist-db.thirdparty.org.apache.jackrabbit</groupId>

extensions/webdav/pom.xml

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,6 @@
6767
<artifactId>jackrabbit-webdav</artifactId>
6868
</dependency>
6969

70-
<!-- Milton server dependencies removed — replaced by Jackrabbit WebDAV -->
71-
<!-- Milton client kept for test suite -->
72-
7370
<dependency>
7471
<groupId>jakarta.servlet</groupId>
7572
<artifactId>jakarta.servlet-api</artifactId>
@@ -92,41 +89,6 @@
9289
<scope>test</scope>
9390
</dependency>
9491

95-
<!-- Milton client + API kept for WebDAV test suite -->
96-
<dependency>
97-
<groupId>org.exist-db.thirdparty.com.ettrema</groupId>
98-
<artifactId>milton-client</artifactId>
99-
<scope>test</scope>
100-
</dependency>
101-
<dependency>
102-
<groupId>org.exist-db.thirdparty.com.ettrema</groupId>
103-
<artifactId>milton-api</artifactId>
104-
<scope>test</scope>
105-
</dependency>
106-
107-
<dependency>
108-
<groupId>com.google.code.findbugs</groupId>
109-
<artifactId>jsr305</artifactId>
110-
<scope>test</scope>
111-
</dependency>
112-
113-
<!--
114-
HttpClient 4.x retained (test scope) for the milton-client JUnit WebDAV harness,
115-
which depends on com.ettrema.httpclient.AbstractHttpClient (HC4-only API).
116-
Litmus compliance is tested separately via exist-docker bats tests.
117-
-->
118-
<dependency>
119-
<groupId>org.apache.httpcomponents</groupId>
120-
<artifactId>httpclient</artifactId>
121-
<scope>test</scope>
122-
</dependency>
123-
124-
<dependency>
125-
<groupId>org.apache.httpcomponents</groupId>
126-
<artifactId>httpcore</artifactId>
127-
<scope>test</scope>
128-
</dependency>
129-
13092
<!-- needed for starting up a jetty server -->
13193
<dependency>
13294
<groupId>org.eclipse.jetty</groupId>
@@ -177,11 +139,11 @@
177139
<configuration>
178140
<failOnWarning>true</failOnWarning>
179141
<ignoredUnusedDeclaredDependencies>
180-
<ignoredUnusedDeclaredDependency>org.jdom:jdom:jar</ignoredUnusedDeclaredDependency>
181142
<ignoredUnusedDeclaredDependency>commons-beanutils:commons-beanutils</ignoredUnusedDeclaredDependency>
182143

183144
<!-- needed for running tests that depend on eXist-db Jetty server -->
184145
<ignoredUnusedDeclaredDependency>${project.groupId}:exist-jetty-config:jar:${project.version}</ignoredUnusedDeclaredDependency>
146+
<ignoredUnusedDeclaredDependency>org.eclipse.jetty:jetty-util:jar:${jetty.version}</ignoredUnusedDeclaredDependency>
185147
<ignoredUnusedDeclaredDependency>org.eclipse.jetty:jetty-deploy:jar:${jetty.version}</ignoredUnusedDeclaredDependency>
186148
<ignoredUnusedDeclaredDependency>org.eclipse.jetty:jetty-jmx:jar:${jetty.version}</ignoredUnusedDeclaredDependency>
187149

extensions/webdav/src/test/java/com/ettrema/cache/Cache.java

Lines changed: 0 additions & 37 deletions
This file was deleted.

extensions/webdav/src/test/java/com/ettrema/cache/MemoryCache.java

Lines changed: 0 additions & 59 deletions
This file was deleted.

extensions/webdav/src/test/java/org/exist/webdav/AlwaysBasicPreAuth.java

Lines changed: 0 additions & 45 deletions
This file was deleted.

0 commit comments

Comments
 (0)