Skip to content

Commit

Permalink
Autoconfiguration library for Spring Boot 3 (#44)
Browse files Browse the repository at this point in the history
  • Loading branch information
prdoyle authored Jul 6, 2023
2 parents 7e7708b + 8a4ce26 commit 002c1ba
Show file tree
Hide file tree
Showing 28 changed files with 558 additions and 19 deletions.
5 changes: 5 additions & 0 deletions bosk-core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ plugins {
id 'com.diffplug.gradle.spotless' version '3.25.0'
}

java {
sourceCompatibility = '8'
targetCompatibility = '8'
}

dependencies {
implementation group: 'org.ow2.asm', name: 'asm', version: '9.4'
implementation 'org.pcollections:pcollections:4.0.1'
Expand Down
5 changes: 5 additions & 0 deletions bosk-gson/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ plugins {
id 'com.diffplug.gradle.spotless' version '3.25.0'
}

java {
sourceCompatibility = '8'
targetCompatibility = '8'
}

dependencies {
api 'com.google.code.gson:gson:2.10.1'
api project(":bosk-core")
Expand Down
5 changes: 5 additions & 0 deletions bosk-jackson/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ plugins {
id 'com.diffplug.gradle.spotless' version '3.25.0'
}

java {
sourceCompatibility = '8'
targetCompatibility = '8'
}

dependencies {
api 'com.fasterxml.jackson.core:jackson-databind:2.15.1'
api project(":bosk-core")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.vena.bosk.jackson;

import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.Module;

public abstract class BoskJacksonModule extends Module {

@Override
public String getModuleName() {
return getClass().getSimpleName();
}

@Override
public Version version() {
return Version.unknownVersion();
}

}
16 changes: 2 additions & 14 deletions bosk-jackson/src/main/java/io/vena/bosk/jackson/JacksonPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.DeserializationConfig;
Expand All @@ -13,7 +12,6 @@
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.KeyDeserializer;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.deser.Deserializers;
Expand Down Expand Up @@ -74,18 +72,8 @@
public final class JacksonPlugin extends SerializationPlugin {
private final JacksonCompiler compiler = new JacksonCompiler(this);

public Module moduleFor(Bosk<?> bosk) {
return new Module() {
@Override
public String getModuleName() {
return JacksonPlugin.class.getSimpleName();
}

@Override
public Version version() {
return Version.unknownVersion();
}

public BoskJacksonModule moduleFor(Bosk<?> bosk) {
return new BoskJacksonModule() {
@Override
public void setupModule(SetupContext context) {
context.addSerializers(new BoskSerializers(bosk));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,14 @@ void setUpJackson() throws Exception {
.enable(INDENT_OUTPUT);
}

@Test
void identifier_works() throws JsonProcessingException {
Identifier id = Identifier.from("testID");
String expected = "\"testID\"";
assertEquals(expected, boskMapper.writeValueAsString(id));
assertEquals(id, boskMapper.readerFor(Identifier.class).readValue(expected));
}

@ParameterizedTest
@MethodSource("catalogArguments")
void catalog_works(List<String> ids) {
Expand Down
5 changes: 5 additions & 0 deletions bosk-mongo/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ plugins {

archivesBaseName = 'bosk-mongo'

java {
sourceCompatibility = '8'
targetCompatibility = '8'
}

dependencies {
api project(":bosk-core")
api 'org.mongodb:mongodb-driver-sync:4.1.2'
Expand Down
4 changes: 4 additions & 0 deletions bosk-spring-boot-3/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
## bosk-testing

This is the subproject for the published `bosk-spring-boot-3` library for
Spring Boot support.
23 changes: 23 additions & 0 deletions bosk-spring-boot-3/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

plugins {
id 'bosk.development'
id 'bosk.maven-publish'
id 'com.github.spotbugs' version '5.0.9'
id 'com.diffplug.gradle.spotless' version '3.25.0'
}

java {
sourceCompatibility = '17'
targetCompatibility = '17'
}

dependencies {
api project(":bosk-jackson")
implementation 'org.springframework.boot:spring-boot-starter-web:3.1.1'
testImplementation project(":bosk-testing")
testImplementation project(":lib-testing")
}

repositories {
mavenCentral()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package io.vena.bosk.spring.boot;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.vena.bosk.Bosk;
import io.vena.bosk.jackson.BoskJacksonModule;
import io.vena.bosk.jackson.JacksonPlugin;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BoskAutoConfiguration {
@Bean
@ConditionalOnProperty(
prefix = "bosk.web",
name = "read-context",
havingValue = "",
matchIfMissing = true)
@ConditionalOnBean(Bosk.class) // Because of matchIfMissing
ReadContextFilter readContextFilter(
Bosk<?> bosk
) {
return new ReadContextFilter(bosk);
}

@Bean
@ConditionalOnProperty(prefix = "bosk.web", name = "service-path")
ServiceEndpoints serviceEndpoints(
Bosk<?> bosk,
ObjectMapper mapper,
JacksonPlugin plugin,
@Value("${bosk.web.service-path}") String contextPath
) {
return new ServiceEndpoints(bosk, mapper, plugin, contextPath);
}

@Bean
@ConditionalOnMissingBean
JacksonPlugin jacksonPlugin() {
return new JacksonPlugin();
}

@Bean
BoskJacksonModule boskJacksonModule(Bosk<?> bosk, JacksonPlugin jacksonPlugin) {
return jacksonPlugin.moduleFor(bosk);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.vena.bosk.spring.boot;

import io.vena.bosk.Bosk;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import java.io.IOException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class ReadContextFilter implements Filter {
private final Bosk<?> bosk;

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
try (var __ = bosk.readContext()) {
chain.doFilter(request, response);
}
}
}
Loading

0 comments on commit 002c1ba

Please sign in to comment.