Arjen Poutsma

Arjen Poutsma

Spring Technical Advisor

Rotterdam, the Netherlands

Blog Posts by Arjen Poutsma

New in Spring 5.3: Improved Cron Expressions

If you regularly listen to A Bootiful Podcast, you might have heard about the improvements we made to Spring Framework’s cron support. Cron expressions are mostly used in Spring applications through the @Scheduled annotation. In Spring 5.3, we introduced the CronExpression class, which represents — you guessed it — a cron expression.

CronExpression replaces CronSequenceGenerator, which is based on java.util.Calendar and which has several known issues that none of the Spring team members felt comfortable solving. Introducing a new type allowed us to use the superior java.time APIs, solve the outstanding issues, and (hopefully) introduce new features as well. While Spring generally prefers to maintain backward compatible, sometimes we do believe that starting from scratch is the best option.


New in Spring 5: Functional Web Framework

As mentioned yesterday in Juergen’s blog post, the second milestone of Spring Framework 5.0 introduced a new functional web framework. In this post, I will give more information about the framework.

Keep in mind the functional web framework is built on the same reactive foundation that we provided in M1 and on which we also support annotation-based (i.e. @Controller, @RequestMapping) request handling, see the M1 blog post for more on that.


We start with some excerpts from our sample application. Below is a reactive repository that exposes Person objects. It is quite similar to a traditional, non-reactive repository, except that it returns Flux<Person> where you would return a List<Person> traditionally, and Mono<Person> where you would return a Person. Mono<Void> is used as a completion signal: to indicate when the save has been completed. For more information on these Reactor types, refer to Dave’s blog post.


Spring Web Services 2.2.0 Released

I’m pleased to announce that Spring Web Services 2.2.0.RELEASE has been released! This is the first release in the 2.2 release cycle. The main new feature in 2.2 is the introduction of code configuration support for Spring-WS. This means that you can now configure Spring-WS with a simple @EnableWs annotation. For instance:

@ComponentScan(basePackageClasses = { MyConfiguration.class })
public class MyWsConfiguration {

  // @Beans go here

For more information about this topic, refer to the javadoc of @EnableWs. You can also read more about this new feature in the updated reference documentation. To view a complete list of changes see the changelog.


Introducing Spring Scala

Last October, at SpringOne2GX, I introduced the Spring Scala project to the world. Since then, I’ve also presented this project at Devoxx. In this blog post, I would like to give further details about this project and how you can use it in your Scala projects.

Why Spring Scala?

The goal of the Spring Scala project is simply to make it easier to use the Spring framework in Scala. We believe that there are many Spring users out there who want to try Scala out, but do not want to leave their experience with Spring behind. This project is meant for those people.


Spring Web Services 2.0 Released

After being in the works for almost a year, I’m happy to announce that Spring Web Services 2.0 has been released! In this post, I’d like to go over some of the major new features.

Java 5+ and Spring 3.0 Required

As you are probably aware, we moved the Object XML Mapping (OXM) module from the Spring-WS project into Spring 3.0. As such, it was a bit problematic to use Spring-WS 1.5 (with its own OXM module) with Spring 3.0, due to conflicting classes in the org.springframework.oxm package.

As of version 2.0, we no longer ship the OXM module as part of Spring-WS, but depend on Spring’s OXM instead. As a result, Spring Web Services 2.0 requires Spring 3.0 to work. Normally, we tend to be a bit more lenient with regard to version requirements, not necessarily requiring the latest Spring version, but this was the only way to make things work.


REST in Spring 3: RestTemplate

In an earlier post, I blogged about the REST capabilities we added to Spring @MVC version 3.0. Later, Alef wrote about using the introduced functionality to add an Atom view to the Pet Clinic application. In this post, I would like to introduce the client-side capabilities we added in Milestone 2.


The RestTemplate is the central Spring class for client-side HTTP access. Conceptually, it is very similar to the JdbcTemplate, JmsTemplate, and the various other templates found in the Spring Framework and other portfolio projects. This means, for instance, that the RestTemplate is thread-safe once constructed, and that you can use callbacks to customize its operations.


REST in Spring 3: @MVC

In the last couple of years, REST has emerged as a compelling alternative to SOAP/WSDL/WS-*-based distributed architectures. So when we started to plan our work on the next major release of Spring - version 3.0, it was quite clear to us that we had to focus on making the development of ‘RESTful’ Web services and applications easier. Now, what is and isn’t ‘RESTful’ could be the topic of a whole new post all together; in this post I’ll take a more practical approach, and focus on the features that we added to the @Controller model of Spring MVC.


Spring Web Services 1.5.1 Released

Dear Spring community,

I’m pleased to announce that Spring Web Services 1.5.1 has been released!

Downloads | Site | Changelog | Announcement

This is the first bug fix and enhancement release in the Spring-WS 1.5 series. It fixes all bugs reported since 1.5.0 and introduces various enhancements throughout the framework:

  • Introduced a Spring JMS MessageConverter that uses OXM marshallers
  • Introduced a Spring MVC View that uses OXM marshallers
  • Fixed WS-Security signatures when using WSS4J in combination with SAAJ messages
  • Support for timeouts on HTTP transports
  • Support for Castor 1.2, see note below
  • Airline sample now uses Spring Security

What's New in Spring Web Services 1.5?

After being in the works for about six months, I’m happy to announce that Spring Web Services 1.5.0 has been released! In this post, I’d like to go over some of the major new features.

New Transports

The 1.5 release includes two new transports: JMS and email. Using these new transports requires no Java code changes: just add a bit of configuration, and you’re off! The JMS transport integrates nicely with Spring 2’s Message-Driven POJO model, as indicated by the following piece of configuration taken from the airline sample application:


Spring Web Services 1.5.0 Final Released

Dear Spring community,
I’m pleased to announce that Spring Web Services 1.5.0 has been released!

Downloads | Site | Changelog | Announcement

This final release candidate the following new features over 1.0.3:

  • Two new transports: JMS and email, both for client and server,
  • WSS4J-based WS-Security implementation, which allows for WS-Security on non-SUN JDKs (i.e. WebSphere) and JDK 1.4,
  • WS-Addressing support for both client and server, supporting the August 2004 and final versions of the specification,
  • Native support for Java 6, including JAXP 1.4, and the bundled SAAJ 1.3 and JAXB 2.0,
  • Two new Spring namespaces, which drastically decrease the amount of XML required to configure marshallers and typical Spring-WS constructs,
  • Spring-WS jars are now OSGi bundles,
  • A new, client-side interception mechanism, including WS-Security support,
  • @Endpoints are now @Components, so they are automatically picked up when using Spring 2.5 component scanning
  • A new and improved XSD-to-WSDL generator that inlines included and imported XSDs
  • Support for Spring Security
  • Support for the Java 6 HTTP Server
  • Two new samples, showing Plain Old XML usage and WS-Addressing with the Java 6 HTTP server