diff --git a/webapp-javax/hakunapi-simple-servlet-javax/pom.xml b/webapp-javax/hakunapi-simple-servlet-javax/pom.xml deleted file mode 100644 index 5bff49b..0000000 --- a/webapp-javax/hakunapi-simple-servlet-javax/pom.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - 4.0.0 - - fi.nls.hakunapi - webapp-javax - 2.0.0-SNAPSHOT - - hakunapi-simple-servlet-javax - jar - - - false - - - - - fi.nls.hakunapi - hakunapi-core - - - fi.nls.hakunapi - hakunapi-geojson - - - fi.nls.hakunapi - hakunapi-html - - - javax.servlet - javax.servlet-api - provided - - - javax.ws.rs - javax.ws.rs-api - provided - - - org.glassfish.jersey.core - jersey-server - - - org.glassfish.jersey.containers - jersey-container-servlet - - - org.glassfish.jersey.inject - jersey-hk2 - - - org.glassfish.jersey.media - jersey-media-json-jackson - - - tools.jackson.core - jackson-core - - - tools.jackson.core - jackson-databind - - - io.swagger.core.v3 - swagger-core - - - com.github.ben-manes.caffeine - caffeine - ${caffeine.version} - - - org.slf4j - slf4j-api - - - junit - junit - test - - - - diff --git a/webapp-javax/hakunapi-simple-servlet-javax/src/main/java/fi/nls/hakunapi/simple/servlet/javax/ObjectMapperProvider.java b/webapp-javax/hakunapi-simple-servlet-javax/src/main/java/fi/nls/hakunapi/simple/servlet/javax/ObjectMapperProvider.java deleted file mode 100644 index 7df2a40..0000000 --- a/webapp-javax/hakunapi-simple-servlet-javax/src/main/java/fi/nls/hakunapi/simple/servlet/javax/ObjectMapperProvider.java +++ /dev/null @@ -1,25 +0,0 @@ -package fi.nls.hakunapi.simple.servlet.javax; - -import javax.ws.rs.ext.ContextResolver; -import javax.ws.rs.ext.Provider; - -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import tools.jackson.databind.ObjectMapper; -import tools.jackson.databind.SerializationFeature; -import tools.jackson.databind.json.JsonMapper; - -@Provider -public class ObjectMapperProvider implements ContextResolver { - - final ObjectMapper om = JsonMapper.builder() - .changeDefaultPropertyInclusion(incl -> - incl.withValueInclusion(Include.NON_NULL)) - .enable(SerializationFeature.INDENT_OUTPUT) - .build(); - - @Override - public ObjectMapper getContext(Class type) { - return om; - } - -} diff --git a/webapp-javax/hakunapi-simple-servlet-javax/src/main/java/fi/nls/hakunapi/simple/servlet/javax/OpenAPIMessageBodyWriter.java b/webapp-javax/hakunapi-simple-servlet-javax/src/main/java/fi/nls/hakunapi/simple/servlet/javax/OpenAPIMessageBodyWriter.java deleted file mode 100644 index e142098..0000000 --- a/webapp-javax/hakunapi-simple-servlet-javax/src/main/java/fi/nls/hakunapi/simple/servlet/javax/OpenAPIMessageBodyWriter.java +++ /dev/null @@ -1,113 +0,0 @@ -package fi.nls.hakunapi.simple.servlet.javax; - -import java.io.IOException; -import java.io.OutputStream; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; - -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; - -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import tools.jackson.databind.ObjectMapper; -import tools.jackson.databind.SerializationFeature; -import tools.jackson.databind.json.JsonMapper; - -import io.swagger.v3.core.jackson.mixin.*; -import io.swagger.v3.oas.models.*; -import io.swagger.v3.oas.models.callbacks.Callback; -import io.swagger.v3.oas.models.examples.Example; -import io.swagger.v3.oas.models.headers.Header; -import io.swagger.v3.oas.models.info.Contact; -import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.info.License; -import io.swagger.v3.oas.models.links.Link; -import io.swagger.v3.oas.models.links.LinkParameter; -import io.swagger.v3.oas.models.media.DateSchema; -import io.swagger.v3.oas.models.media.Discriminator; -import io.swagger.v3.oas.models.media.Encoding; -import io.swagger.v3.oas.models.media.EncodingProperty; -// io.swagger.v3.oas.models.media.MediaType used via FQN to avoid collision with javax.ws.rs.core.MediaType -import io.swagger.v3.oas.models.media.Schema; -import io.swagger.v3.oas.models.media.XML; -import io.swagger.v3.oas.models.parameters.Parameter; -import io.swagger.v3.oas.models.parameters.RequestBody; -import io.swagger.v3.oas.models.responses.ApiResponse; -import io.swagger.v3.oas.models.responses.ApiResponses; -import io.swagger.v3.oas.models.security.OAuthFlow; -import io.swagger.v3.oas.models.security.OAuthFlows; -import io.swagger.v3.oas.models.security.Scopes; -import io.swagger.v3.oas.models.security.SecurityScheme; -import io.swagger.v3.oas.models.servers.Server; -import io.swagger.v3.oas.models.servers.ServerVariable; -import io.swagger.v3.oas.models.servers.ServerVariables; -import io.swagger.v3.oas.models.tags.Tag; - -@Provider -@Produces(MediaTypes.APPLICATION_OPENAPI_V3) -public class OpenAPIMessageBodyWriter implements MessageBodyWriter { - - private final ObjectMapper om = createMapper(); - - private static ObjectMapper createMapper() { - return JsonMapper.builder() - .enable(SerializationFeature.INDENT_OUTPUT) - .changeDefaultPropertyInclusion(incl -> - incl.withValueInclusion(Include.NON_NULL)) - .addMixIn(ApiResponses.class, ExtensionsMixin.class) - .addMixIn(Contact.class, ExtensionsMixin.class) - .addMixIn(Encoding.class, ExtensionsMixin.class) - .addMixIn(EncodingProperty.class, ExtensionsMixin.class) - .addMixIn(Example.class, ExampleMixin.class) - .addMixIn(ExternalDocumentation.class, ExtensionsMixin.class) - .addMixIn(Link.class, ExtensionsMixin.class) - .addMixIn(LinkParameter.class, ExtensionsMixin.class) - .addMixIn(io.swagger.v3.oas.models.media.MediaType.class, MediaTypeMixin.class) - .addMixIn(OAuthFlow.class, ExtensionsMixin.class) - .addMixIn(OAuthFlows.class, ExtensionsMixin.class) - .addMixIn(Operation.class, OperationMixin.class) - .addMixIn(PathItem.class, ExtensionsMixin.class) - .addMixIn(Paths.class, ExtensionsMixin.class) - .addMixIn(Scopes.class, ExtensionsMixin.class) - .addMixIn(Server.class, ExtensionsMixin.class) - .addMixIn(ServerVariable.class, ExtensionsMixin.class) - .addMixIn(ServerVariables.class, ExtensionsMixin.class) - .addMixIn(Tag.class, ExtensionsMixin.class) - .addMixIn(XML.class, ExtensionsMixin.class) - .addMixIn(ApiResponse.class, ExtensionsMixin.class) - .addMixIn(Parameter.class, ExtensionsMixin.class) - .addMixIn(RequestBody.class, ExtensionsMixin.class) - .addMixIn(Header.class, ExtensionsMixin.class) - .addMixIn(SecurityScheme.class, ExtensionsMixin.class) - .addMixIn(Callback.class, ExtensionsMixin.class) - .addMixIn(Schema.class, SchemaMixin.class) - .addMixIn(DateSchema.class, DateSchemaMixin.class) - .addMixIn(Components.class, ComponentsMixin.class) - .addMixIn(Info.class, InfoMixin.class) - .addMixIn(License.class, LicenseMixin.class) - .addMixIn(OpenAPI.class, OpenAPIMixin.class) - .addMixIn(Discriminator.class, DiscriminatorMixin.class) - .build(); - } - - @Override - public boolean isWriteable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return OpenAPI.class.isAssignableFrom(type); - } - - @Override - public long getSize(OpenAPI openAPI, Class type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return -1; - } - - @Override - public void writeTo(OpenAPI openAPI, Class type, Type genericType, Annotation[] annotations, - MediaType mediaType, MultivaluedMap httpHeaders, OutputStream entityStream) - throws IOException, WebApplicationException { - om.writeValue(entityStream, openAPI); - } -} diff --git a/webapp-javax/hakunapi-simple-servlet-javax/src/main/java/fi/nls/hakunapi/simple/servlet/javax/OpenAPIObjectMapperProvider.java b/webapp-javax/hakunapi-simple-servlet-javax/src/main/java/fi/nls/hakunapi/simple/servlet/javax/OpenAPIObjectMapperProvider.java deleted file mode 100644 index 6ff4b52..0000000 --- a/webapp-javax/hakunapi-simple-servlet-javax/src/main/java/fi/nls/hakunapi/simple/servlet/javax/OpenAPIObjectMapperProvider.java +++ /dev/null @@ -1,94 +0,0 @@ -package fi.nls.hakunapi.simple.servlet.javax; - -import javax.ws.rs.Produces; -import javax.ws.rs.ext.ContextResolver; -import javax.ws.rs.ext.Provider; - -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import tools.jackson.databind.ObjectMapper; -import tools.jackson.databind.SerializationFeature; -import tools.jackson.databind.json.JsonMapper; - -import io.swagger.v3.core.jackson.mixin.*; -import io.swagger.v3.oas.models.*; -import io.swagger.v3.oas.models.callbacks.Callback; -import io.swagger.v3.oas.models.examples.Example; -import io.swagger.v3.oas.models.headers.Header; -import io.swagger.v3.oas.models.info.Contact; -import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.info.License; -import io.swagger.v3.oas.models.links.Link; -import io.swagger.v3.oas.models.links.LinkParameter; -import io.swagger.v3.oas.models.media.DateSchema; -import io.swagger.v3.oas.models.media.Discriminator; -import io.swagger.v3.oas.models.media.Encoding; -import io.swagger.v3.oas.models.media.EncodingProperty; -import io.swagger.v3.oas.models.media.MediaType; -import io.swagger.v3.oas.models.media.Schema; -import io.swagger.v3.oas.models.media.XML; -import io.swagger.v3.oas.models.parameters.Parameter; -import io.swagger.v3.oas.models.parameters.RequestBody; -import io.swagger.v3.oas.models.responses.ApiResponse; -import io.swagger.v3.oas.models.responses.ApiResponses; -import io.swagger.v3.oas.models.security.OAuthFlow; -import io.swagger.v3.oas.models.security.OAuthFlows; -import io.swagger.v3.oas.models.security.Scopes; -import io.swagger.v3.oas.models.security.SecurityScheme; -import io.swagger.v3.oas.models.servers.Server; -import io.swagger.v3.oas.models.servers.ServerVariable; -import io.swagger.v3.oas.models.servers.ServerVariables; -import io.swagger.v3.oas.models.tags.Tag; - -@Provider -@Produces(value = { MediaTypes.APPLICATION_OPENAPI_V3, MediaTypes.APPLICATION_SCHEMA }) -public class OpenAPIObjectMapperProvider implements ContextResolver { - - final ObjectMapper om = createMapper(); - - private static ObjectMapper createMapper() { - return JsonMapper.builder() - .enable(SerializationFeature.INDENT_OUTPUT) - .changeDefaultPropertyInclusion(incl -> - incl.withValueInclusion(Include.NON_NULL)) - .addMixIn(ApiResponses.class, ExtensionsMixin.class) - .addMixIn(Contact.class, ExtensionsMixin.class) - .addMixIn(Encoding.class, ExtensionsMixin.class) - .addMixIn(EncodingProperty.class, ExtensionsMixin.class) - .addMixIn(Example.class, ExampleMixin.class) - .addMixIn(ExternalDocumentation.class, ExtensionsMixin.class) - .addMixIn(Link.class, ExtensionsMixin.class) - .addMixIn(LinkParameter.class, ExtensionsMixin.class) - .addMixIn(MediaType.class, MediaTypeMixin.class) - .addMixIn(OAuthFlow.class, ExtensionsMixin.class) - .addMixIn(OAuthFlows.class, ExtensionsMixin.class) - .addMixIn(Operation.class, OperationMixin.class) - .addMixIn(PathItem.class, ExtensionsMixin.class) - .addMixIn(Paths.class, ExtensionsMixin.class) - .addMixIn(Scopes.class, ExtensionsMixin.class) - .addMixIn(Server.class, ExtensionsMixin.class) - .addMixIn(ServerVariable.class, ExtensionsMixin.class) - .addMixIn(ServerVariables.class, ExtensionsMixin.class) - .addMixIn(Tag.class, ExtensionsMixin.class) - .addMixIn(XML.class, ExtensionsMixin.class) - .addMixIn(ApiResponse.class, ExtensionsMixin.class) - .addMixIn(Parameter.class, ExtensionsMixin.class) - .addMixIn(RequestBody.class, ExtensionsMixin.class) - .addMixIn(Header.class, ExtensionsMixin.class) - .addMixIn(SecurityScheme.class, ExtensionsMixin.class) - .addMixIn(Callback.class, ExtensionsMixin.class) - .addMixIn(Schema.class, SchemaMixin.class) - .addMixIn(DateSchema.class, DateSchemaMixin.class) - .addMixIn(Components.class, ComponentsMixin.class) - .addMixIn(Info.class, InfoMixin.class) - .addMixIn(License.class, LicenseMixin.class) - .addMixIn(OpenAPI.class, OpenAPIMixin.class) - .addMixIn(Discriminator.class, DiscriminatorMixin.class) - .build(); - } - - @Override - public ObjectMapper getContext(Class type) { - return om; - } - -} diff --git a/webapp-javax/hakunapi-simple-webapp-javax/src/main/java/fi/nls/hakunapi/simple/webapp/javax/SimpleFeaturesApplication.java b/webapp-javax/hakunapi-simple-webapp-javax/src/main/java/fi/nls/hakunapi/simple/webapp/javax/SimpleFeaturesApplication.java deleted file mode 100644 index c4619f5..0000000 --- a/webapp-javax/hakunapi-simple-webapp-javax/src/main/java/fi/nls/hakunapi/simple/webapp/javax/SimpleFeaturesApplication.java +++ /dev/null @@ -1,145 +0,0 @@ -package fi.nls.hakunapi.simple.webapp.javax; - -import java.util.ArrayList; -import java.util.List; - -import javax.servlet.ServletContext; -import javax.ws.rs.ApplicationPath; -import javax.ws.rs.core.Context; - -import org.glassfish.hk2.utilities.binding.AbstractBinder; -import org.glassfish.jersey.jackson.JacksonFeature; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.server.ServerProperties; - -import fi.nls.hakunapi.core.ConformanceClass; -import fi.nls.hakunapi.core.FeatureServiceConfig; -import fi.nls.hakunapi.core.OutputFormat; -import fi.nls.hakunapi.core.config.HakunaConfigParser; -import fi.nls.hakunapi.core.operation.CollectionMetadataOperation; -import fi.nls.hakunapi.core.operation.CollectionsMetadataOperation; -import fi.nls.hakunapi.core.operation.ConformanceOperation; -import fi.nls.hakunapi.core.operation.FunctionsMetadataOperation; -import fi.nls.hakunapi.core.operation.GetFeatureByIdOperation; -import fi.nls.hakunapi.core.operation.GetFeaturesOperation; -import fi.nls.hakunapi.core.operation.GetQueryablesOperation; -import fi.nls.hakunapi.core.operation.GetSchemaOperation; -import fi.nls.hakunapi.core.operation.LandingPageOperation; -import fi.nls.hakunapi.core.operation.OperationImpl; -import fi.nls.hakunapi.core.schemas.CollectionInfo; -import fi.nls.hakunapi.core.schemas.CollectionsContent; -import fi.nls.hakunapi.core.schemas.ConformanceClasses; -import fi.nls.hakunapi.core.schemas.Queryables; -import fi.nls.hakunapi.core.schemas.Root; -import fi.nls.hakunapi.html.OutputFormatHTML; -import fi.nls.hakunapi.simple.servlet.javax.CacheManager; -import fi.nls.hakunapi.simple.servlet.javax.CatchAllExceptionMapper; -import fi.nls.hakunapi.simple.servlet.javax.CorsFilter; -import fi.nls.hakunapi.simple.servlet.javax.GlobalFQueryParamFilter; -import fi.nls.hakunapi.simple.servlet.javax.GzipFilter; -import fi.nls.hakunapi.simple.servlet.javax.GzipInterceptor; -import fi.nls.hakunapi.simple.servlet.javax.NotAcceptableExceptionMapper; -import fi.nls.hakunapi.simple.servlet.javax.NotFoundExceptionMapper; -import fi.nls.hakunapi.simple.servlet.javax.ObjectMapperProvider; -import fi.nls.hakunapi.simple.servlet.javax.OpenAPIMessageBodyWriter; -import fi.nls.hakunapi.simple.servlet.javax.operation.CollectionMetadataImpl; -import fi.nls.hakunapi.simple.servlet.javax.operation.CollectionsMetadataImpl; -import fi.nls.hakunapi.simple.servlet.javax.operation.ConformanceImpl; -import fi.nls.hakunapi.simple.servlet.javax.operation.FunctionsMetadataImpl; -import fi.nls.hakunapi.simple.servlet.javax.operation.GetCollectionItemByIdOperation; -import fi.nls.hakunapi.simple.servlet.javax.operation.GetCollectionItemsOperation; -import fi.nls.hakunapi.simple.servlet.javax.operation.GetCollectionQueryablesImpl; -import fi.nls.hakunapi.simple.servlet.javax.operation.GetCollectionSchemaImpl; -import fi.nls.hakunapi.simple.servlet.javax.operation.GetItemsOperation; -import fi.nls.hakunapi.simple.servlet.javax.operation.LandingPageImpl; -import fi.nls.hakunapi.simple.servlet.javax.operation.OpenAPI30ApiOperation; -import freemarker.template.Configuration; -import io.swagger.v3.oas.models.OpenAPI; - -@ApplicationPath("/") -public class SimpleFeaturesApplication extends ResourceConfig { - - public SimpleFeaturesApplication(@Context ServletContext servletContext) { - final SimpleFeatureServiceConfig service = (SimpleFeatureServiceConfig) servletContext.getAttribute("hakunaService"); - final HakunaConfigParser parser = (HakunaConfigParser) servletContext.getAttribute("hakunaConfig"); - - List opToImpl = new ArrayList<>(); - // Core is REQUIRED - opToImpl.add(new OperationImpl(new LandingPageOperation(), LandingPageImpl.class)); - opToImpl.add(new OperationImpl(new CollectionsMetadataOperation(), CollectionsMetadataImpl.class)); - opToImpl.add(new OperationImpl(new CollectionMetadataOperation(), CollectionMetadataImpl.class)); - opToImpl.add(new OperationImpl(new ConformanceOperation(), ConformanceImpl.class)); - opToImpl.add(new OperationImpl(new GetFeatureByIdOperation(), GetCollectionItemByIdOperation.class)); - opToImpl.add(new OperationImpl(new GetFeaturesOperation(), GetCollectionItemsOperation.class)); - opToImpl.add(new OperationImpl(new GetSchemaOperation(), GetCollectionSchemaImpl.class)); - - if (service.conformsTo(ConformanceClass.FILTER)) { - opToImpl.add(new OperationImpl(new GetQueryablesOperation(), GetCollectionQueryablesImpl.class)); - } - - if(service.getFunctions()!=null) { - opToImpl.add(new OperationImpl(new FunctionsMetadataOperation(), FunctionsMetadataImpl.class)); - } - - // Experimental - opToImpl.add(new OperationImpl(new GetFeaturesOperation(), GetItemsOperation.class)); - - for (OperationImpl p : opToImpl) { - register(p.implementation); - } - - register(NotFoundExceptionMapper.class); - register(NotAcceptableExceptionMapper.class); - register(CatchAllExceptionMapper.class); - - final GlobalFQueryParamFilter fParamFilter = new GlobalFQueryParamFilter(service); - register(GlobalFQueryParamFilter.class); - - if (Boolean.parseBoolean(parser.get("hakuna.cors", "true"))) { - register(CorsFilter.class); - } - if (Boolean.parseBoolean(parser.get("hakuna.gzip", "true"))) { - register(GzipFilter.class); - register(GzipInterceptor.class); - } - - final OpenAPI30ApiOperation api = new OpenAPI30ApiOperation(service, opToImpl); - register(OpenAPI30ApiOperation.class); - - final CacheManager cacheManager = new CacheManager(); - - register(new AbstractBinder() { - @Override - protected void configure() { - bind(service).to(FeatureServiceConfig.class); - bind(service).to(SimpleFeatureServiceConfig.class); - bind(api).to(OpenAPI30ApiOperation.class); - bind(fParamFilter).to(GlobalFQueryParamFilter.class); - bind(cacheManager).to(CacheManager.class); - } - }); - - property(ServerProperties.WADL_FEATURE_DISABLE, true); - property(ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER, Integer.parseInt(parser.get("hakuna.content-length-buffer", "8192"))); - - // Use Jackson as POJO provider - register(ObjectMapperProvider.class); - register(JacksonFeature.class); - - register(OpenAPIMessageBodyWriter.class); - - OutputFormat html = service.getOutputFormat(OutputFormatHTML.ID); - if (html != null) { - Configuration cfg = ((OutputFormatHTML) html).getConfiguration(); - HTMLMessageBodyWriter htmlWriter = new HTMLMessageBodyWriter(cfg); - htmlWriter.add(CollectionInfo.class, "collectionInfo.ftl"); - htmlWriter.add(CollectionsContent.class, "collections.ftl"); - htmlWriter.add(ConformanceClasses.class, "conformance.ftl"); - htmlWriter.add(Root.class, "root.ftl"); - htmlWriter.add(OpenAPI.class, "api.ftl"); - htmlWriter.add(Queryables.class, "queryables.ftl"); - register(htmlWriter); - } - } - -} diff --git a/webapp-javax/pom.xml b/webapp-javax/pom.xml deleted file mode 100644 index ae253a9..0000000 --- a/webapp-javax/pom.xml +++ /dev/null @@ -1,91 +0,0 @@ - - 4.0.0 - - fi.nls.hakunapi - hakunapi - 2.0.0-SNAPSHOT - - webapp-javax - pom - - - 2.47 - 3.0.1 - 2.0.1 - - - - hakunapi-simple-servlet-javax - hakunapi-simple-webapp-javax - hakunapi-simple-webapp-test-javax - hakunapi-telemetry-webapp-javax - hakunapi-oracle-webapp-javax - - - - - - - fi.nls.hakunapi - hakunapi-simple-servlet-javax - ${project.version} - - - fi.nls.hakunapi - hakunapi-simple-webapp-javax - ${project.version} - - - fi.nls.hakunapi - hakunapi-simple-webapp-test-javax - ${project.version} - - - javax.annotation - javax.annotation-api - 1.3.2 - - - javax.servlet - javax.servlet-api - ${servlet.version} - provided - - - javax.ws.rs - javax.ws.rs-api - ${jaxrs.version} - provided - - - org.glassfish.jersey.core - jersey-server - ${jersey.version} - - - org.glassfish.jersey.containers - jersey-container-servlet - ${jersey.version} - - - org.glassfish.jersey.inject - jersey-hk2 - ${jersey.version} - - - - org.glassfish.jersey.media - jersey-media-json-jackson - ${jersey.version} - - - org.apache.logging.log4j - log4j-web - ${log4j.version} - - - - \ No newline at end of file