Skip to content

Commit

Permalink
Spring 6 Spring Boot 3.x Support With Additional Spring 5 Backwards C…
Browse files Browse the repository at this point in the history
…ompatibility (#1467)

* Migrate to Spring 6 / Spring Boot 3
* Set JDK version to 17 in build.yaml
* Try version 3 of GitHub Actions
* Add required 'distribution' parameter
* Remove compilation warnings
* Use -Opt-in rather than deprecated -XOpt-in
* Use Optional.ofNullable instead of if
* Replace deprecated rawStatusCode()
* Adapt new way to import AutoConfiguration
* prepare to have a spring 5 backwards compatible version; Filter registration not working atm
* removed unnecessary dependency
* added deprecation suppression due to deprecated rawStatusCode method in spring6
* distinguish between javax and jakarta servlet filter registration
* fixed ConditionalOnClass annotation for javax config
* Make IntelliJ understand shaded artifact location
* fix build-maven-helper-plugin execution
* fixed filter bean name, added test for javax filter registration
* combining compile and test step due to shaded dependency dependency in the autoconfigure module
* splitting compile & test step into to separate ones
* bump spring and spring boot versions
* using project.build variable, added version to buil-helper-maven-plugin
* removed debug output in JavaxFilterTest
* removed unnecessary import
* added spring 5 support documentation
* using project.build.finalName instead of build.finalName
* extended docs, used Java 8 for compiler settings, removed unnecessary FIX-ME

---------

Co-authored-by: Sadeq Dousti <[email protected]>
Co-authored-by: Sadeq <[email protected]>
  • Loading branch information
3 people committed Mar 27, 2023
1 parent 938bec5 commit 07cb014
Show file tree
Hide file tree
Showing 43 changed files with 332 additions and 199 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
java-version: 17
cache: 'maven'
- name: Compile
run: ./mvnw clean test-compile -B
run: ./mvnw clean package -DskipTests
- name: Test
run: ./mvnw verify -P "${{ matrix.profile }}" -B
- name: Coverage
Expand Down
19 changes: 16 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,15 @@ Logbook is ready to use out of the box for most common setups. Even for uncommon

## Dependencies

- Java 8
- Java 8 (for Spring 6 / Spring Boot 3 Java 17 is required)
- Any build tool using Maven Central, or direct download
- Servlet Container (optional)
- Apache HTTP Client 4.x **or 5.x** (optional)
- JAX-RS 2.x Client and Server (optional)
- Netty 4.x (optional)
- OkHttp 2.x **or 3.x** (optional)
- Spring 5.x** (optional)
- Spring Boot 2.x** (optional)
- Spring **6.x** or Spring 5.x (optional, see instructions below)
- Spring Boot **3.x** or 2.x (optional)
- Ktor (optional)
- logstash-logback-encoder 5.x (optional)

Expand All @@ -52,6 +52,19 @@ Add the following dependency to your project:
</dependency>
```

### Spring 5 / Spring Boot 2 Support

For Spring 5 / Spring Boot 2 backwards compatibility please add the following import:

```xml
<dependency>
<groupId>org.zalando</groupId>
<artifactId>logbook-servlet</artifactId>
<version>${logbook.version}</version>
<classifier>javax</classifier>
</dependency>
```

Additional modules/artifacts of Logbook always share the same version number.

Alternatively, you can import our *bill of materials*...
Expand Down
6 changes: 3 additions & 3 deletions logbook-jaxrs/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@
<artifactId>logbook-api</artifactId>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1.1</version>
<groupId>jakarta.ws.rs</groupId>
<artifactId>jakarta.ws.rs-api</artifactId>
<version>2.1.6</version>
</dependency>
<!-- testing -->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import kotlin.annotation.AnnotationTarget.*
*
* Any usage of a declaration annotated with `@ExperimentalLogbookKtorApi` must be accepted either by
* annotating that usage with the [OptIn] annotation, e.g. `@OptIn(ExperimentalLogbookKtorApi::class)`,
* or by using the compiler argument `-Xopt-in=org.zalando.logbook.ktor.ExperimentalLogbookKtorApi`.
* or by using the compiler argument `-Opt-in=org.zalando.logbook.ktor.ExperimentalLogbookKtorApi`.
*/
@RequiresOptIn(level = WARNING)
@Retention(BINARY)
Expand Down
17 changes: 7 additions & 10 deletions logbook-parent/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,9 @@
<reactor-netty.version>1.1.3</reactor-netty.version>
<slf4j.version>1.7.36</slf4j.version>

<spring5.version>5.3.25</spring5.version>
<spring-security5.version>5.6.10</spring-security5.version>

<spring.version>5.3.25</spring.version>
<spring-boot.version>2.7.8</spring-boot.version>
<spring-security.version>5.8.1</spring-security.version>
<spring.version>6.0.7</spring.version>
<spring-boot.version>3.0.5</spring-boot.version>
<spring-security.version>6.0.1</spring-security.version>

<junit.version>5.9.2</junit.version>
<mockito.version>5.1.1</mockito.version>
Expand Down Expand Up @@ -133,9 +130,9 @@
</dependency>
<!-- javax -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
<!-- JsonPath -->
Expand Down Expand Up @@ -385,7 +382,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.10.1</version>
<configuration>
<compilerArgs>
<compilerArg>-Xlint:unchecked,deprecation</compilerArg>
Expand Down
69 changes: 67 additions & 2 deletions logbook-servlet/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@
<connection>scm:git:[email protected]:zalando/logbook.git</connection>
<developerConnection>scm:git:[email protected]:zalando/logbook.git</developerConnection>
</scm>

<properties>
<shadedClassifierName>javax</shadedClassifierName>
</properties>

<dependencies>
<dependency>
<groupId>org.zalando</groupId>
Expand All @@ -24,8 +29,8 @@
<artifactId>logbook-core</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
</dependency>
<!-- testing -->
<dependency>
Expand Down Expand Up @@ -109,4 +114,64 @@
<artifactId>json-path-assert</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<id>jakarta</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>${shadedClassifierName}</shadedClassifierName>
<artifactSet>
<includes>
<include>${project.groupId}:${project.artifactId}</include>
</includes>
</artifactSet>
<relocations>
<relocation>
<pattern>jakarta.servlet</pattern>
<shadedPattern>javax.servlet</shadedPattern>
</relocation>
<relocation>
<pattern>org.zalando.logbook.servlet</pattern>
<shadedPattern>org.zalando.logbook.servlet.javax</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>

<!-- Make IntelliJ understand the shaded artifact location -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>compile</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${project.build.directory}/${project.build.finalName}-${shadedClassifierName}.jar</file>
<classifier>${shadedClassifierName}</classifier>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package org.zalando.logbook.servlet;

import jakarta.servlet.AsyncEvent;

import java.io.IOException;
import javax.servlet.AsyncEvent;

@FunctionalInterface
interface AsyncOnCompleteListener {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package org.zalando.logbook.servlet;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.FilterConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

interface HttpFilter extends Filter {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package org.zalando.logbook.servlet;

import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.WriteListener;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletResponseWrapper;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.zalando.logbook.HttpHeaders;
import org.zalando.logbook.HttpResponse;
import org.zalando.logbook.Origin;

import javax.servlet.ServletOutputStream;
import javax.servlet.ServletResponse;
import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.zalando.logbook.servlet;

import jakarta.servlet.AsyncEvent;
import jakarta.servlet.AsyncListener;

import java.io.IOException;
import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener;

class LogbookAsyncListener implements AsyncListener {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
package org.zalando.logbook.servlet;

import java.io.IOException;
import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.annotation.Nullable;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import lombok.With;
import org.apiguardian.api.API;
Expand All @@ -18,7 +13,14 @@
import org.zalando.logbook.Logbook.ResponseProcessingStage;
import org.zalando.logbook.Logbook.ResponseWritingStage;
import org.zalando.logbook.Strategy;
import static javax.servlet.DispatcherType.ASYNC;

import javax.annotation.Nullable;
import java.io.IOException;
import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;

import static jakarta.servlet.DispatcherType.ASYNC;
import static lombok.AccessLevel.PRIVATE;
import static org.apiguardian.api.API.Status.STABLE;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
package org.zalando.logbook.servlet;

import jakarta.servlet.AsyncContext;
import jakarta.servlet.AsyncListener;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.SneakyThrows;
import org.zalando.logbook.HttpHeaders;
import org.zalando.logbook.HttpRequest;
import org.zalando.logbook.Origin;
import org.zalando.logbook.common.MediaTypeQuery;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
Expand All @@ -13,20 +28,7 @@
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Predicate;
import javax.servlet.AsyncContext;
import javax.servlet.AsyncListener;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.SneakyThrows;
import org.zalando.logbook.HttpHeaders;
import org.zalando.logbook.HttpRequest;
import org.zalando.logbook.Origin;
import org.zalando.logbook.common.MediaTypeQuery;

import static java.nio.charset.StandardCharsets.ISO_8859_1;
import static java.util.Collections.list;
import static java.util.stream.Collectors.joining;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package org.zalando.logbook.servlet;

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apiguardian.api.API;
import org.zalando.logbook.Logbook;
import org.zalando.logbook.SecurityStrategy;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

import static org.apiguardian.api.API.Status.STABLE;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package org.zalando.logbook.servlet;

import jakarta.servlet.ReadListener;
import jakarta.servlet.ServletInputStream;
import lombok.AllArgsConstructor;

import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;

Expand Down
Loading

0 comments on commit 07cb014

Please sign in to comment.