Releases: aws/serverless-java-container
Release 1.1
Version 1.1 includes new performance improvements and bug fixes.
Performance improvements
- All setup code has been moved to the static initializer method. If you follow the instructions in our documentation and archetypes to include the handler creation code in a
static
block you will see a drop in cold start latency.
private static SpringBootLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse> handler;
static {
try {
handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(Application.class);
} catch (ContainerInitializationException e) {
e.printStackTrace();
}
}
- When using Spring profiles, we have added a new static method that receives a
ConfigurableWebApplicationContext
as well as a vararg list of profile names. Using this method will ensure that the application is initialized only once with the correct profile.
AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
applicationContext.register(PetStoreSpringAppConfig.class);
handler = SpringLambdaContainerHandler.getAwsProxyHandler(applicationContext, "profile-1", "profile-2");
- Setting profiles after the handler is initialized using the
activateSpringProfiles
method will cause the Spring context to reload and slow down the following request. - Behind the scenes we moved the initialization of
ObjectMapper
,ObjectReader
, andObjectWriter
to theLambdaContainerHandler
constructor. This will ensure that they are initialized in the static code block. - Archetype and examples for Spring now include the
spring-context-indexer
as a dependency.
Bug fixes
- Added a
logback.xml
configuration file for Spring and SpringBoot that sets the log level toERROR
. This addresses #134 to make Spring and SpringBoot applications testable with SAM Local. - Added
apiKeyId
to the request identity model to address #136. - New whitelist for hosts, ports, and base paths (#138). For applications that need to dynamically generate links, we've added the ability to read the forwarded host, and port headers. To secure this, developers have to explicitly whitelist custom domain names:
LambdaContainerHandler.getContainerConfig().addCustomDomain("api.myserver.com");
Release 1.0.1
Release 1.0.1 to address critical Jackson vulnerability CVE-2018-5968. All Jackson dependencies were bumped to version 2.9.4
.
To address these type of issues going forward, we scheduled a daily build with Travis.
Release 1.0
The 1.0 release of Serverless Java Container includes major updates to the Jersey and Spring versions as well as a number of bug fixes and performance improvements:
New features
- New maven archetypes to generate simple projects. Take a look at our quick start guides.
- Added request logging in Apache Combined format with a customizable
LogFormatter
interface - new
streamProxy
method to simplify Lambda handler creation:
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context)
throws IOException {
handler.proxyStream(inputStream, outputStream, context);
}
Framework updates
- Added support for Jersey version 2.26 (JAX-RS 2.1 specifications)
- Added support for Spring 5.0.3 and Spring Boot 1.5.9
Performance improvements
- Moved from
ObjectMapper
to specificObjectReader
andObjectWriter
in handler class - Changed all date formatting and parsing to use the new java.time package
- Added caching of parameter maps and sets in
AwsProxyHttpServletRequest
- Added caching of base URIs for Jersey implementation
Bug fixes
- Switched from FindBugs to SpotBugs
- getSessionId in servlet request returns null instead of throwing unsupported operation exception. All other session-access method log a warning. Create session throws unsupported operation exception
- Fix an issue with request include and forward that prevented the processing from completing
- Fix an issue with request date headers to return the correct value when the header is not populated
Release 0.9.1
Release 0.9
This is a major release of the library with new features, changes - some breaking, and fixes. To get started with this latest release, follow the documentation on the project's wiki.
New features, changes, and enhancements
- We moved the Jersey implementation of the library to use
HttpServletRequest
andHttpServletResponse
behind the scenes. This allows us to inject all servlet objects as@Context
properties. (#62) - Moved model package out of
internal
and undercom.amazonaws.serverless.proxy
. Also moved classes that implementations/deployments can extend out of theinternal
package to theproxy
package (#83):ExceptionHandler
RequestReader
ResponseWriter
SecurityContextWriter
AwsProxySecurityContextWriter
- Removed redundant
ObjectMapper
declarations to reduce cold start time. Instead we moved to a single, staticObjectMapper
in theLambdaContainerHandler
abstract class (#91). - Updated all samples to use the
RequestStreamHandler
interface to support JSON annotations in event models. Also updated the documentation and moved it to the wiki (#89). - Added configuration parameters to decide whether the API Gateway stage and/or the stripped base path should be included in the servlet context path. Also updated the wiki documentation of the
ContainerConfig
object (#84). - Added Spring profiles support in Spring Boot handler (#88).
- Added FindBugs with the security plugin to the build process - build fails if all potential bugs are not addressed (#100).
Bug fixes
Release 0.8
Release 0.8 includes the following changes:
- Upgraded Spark Framework to version 2.7.1.
- New handler class for Spring Boot applications (#65).
- Added CognitoUserPoolPrincipal that allows access to all of the claims included in the Cognito User Pool tokens (#55).
- Update to filters processing. The framework now handles the request inside the filter chain. This makes it easier to halt the request processing should a filter require it.
- Various bug fixes and new unit tests.
Include the library as a dependency in your Java project by replacing the xxxxxx
below with the framework you want to you - jersey
, spark
, or spring
:
<dependency>
<groupId>com.amazonaws.serverless</groupId>
<artifactId>aws-serverless-java-container-xxxxxx</artifactId>
<version>0.8</version>
</dependency>
Release 0.7
This release includes upgrades and a few bug fixes
- Upgraded Spark support to version 2.6.0 - this is not backward-compatible with Spark 2.5.x, between the two releases there were breaking changes in the embedded server interfaces
- Fixed issue with URL encoding of path and query string parameters - The library now tries to decode the path and query string values passed by API Gateway.
- Added new
uriEncoding
property to theContainerConfig
object - By default the value for this property is set toUTF-8
. The framework uses the configured charset to url decode request properties. AllLambdaContainerHandler
implementations exposed a method to access the config and change its values. - The library can now group multiple
Set-Cookie
headers in a single header as a comma-separated list - This is because API Gateway only supports a single header per key. This behavior can be configured in theContainerConfig
object. RFC2109 specifies this behavior although it is still not supported by all browsers. - Fixed a bug that caused servlet filters to be executed only for the first request.
- Fixed a bug that caused the
Expires
andMaxAge
properties to be incorrectly populated inSet-Cookie
headers.
Release 0.6
Addressed multiple issues and integrated slf4j-api for logging.
Release 0.5.1
This release addresses two issues:
- Fixes support for Spark 2.5.3 - The issue was created by the Servlet Filter implementation included in 0.5. See issue #40
- Fixes principal name for APIs configured with
AWS_IAM
auth - Changed the behavior of thegetName
method of a principal in theAwsProxySecurityContext
to return the Cognito ID if present in the request, otherwise the user ARN. See issue #43
Release 0.5
New features
- Support for Cognito User Pool authorizers
- RequestDispatchers for Spring MVC applications
- Jersey injection of ServletContext and ServletResponse
- Ability to strip base path mappings when configured with a custom domain name
Bug fixes
- Support for multipart/form data binary payloads
- URL encoding in servlet implementation