August 3rd, 2016 by Team

Rewrite 3.4.0.Final Release Announcement

We are pleased to announce the latest version of the Rewrite Servlet Toolkit, and PrettyFaces libraries. It’s been quite a while since our last release, but we promise you this new version has been worth the wait.

Release notes:

You might notice we skipped a few version numbers, which we’ve done for several reasons:

  • This is a major update, so we incremented from major version 2 to version 3.
  • The deprecated (original) prettyfaces-jsf library, which is now several years obsolete was versioned 3.3.3, and has been confusing new users for some time. We are now resolving this issue by skipping directly to Rewrite version 3.4.0.Final.

This release includes several major new features as well as a plethora of bug-fixes, including:

  • Support for JDK6 has been dropped, JDK7 is the new minimum requirement
  • Improved compatibility with JDK8 for the annotation scanning
  • Major performance improvements in the logging subsystem
  • Major performance improvements with the URLBuilder
  • Fixed some concurrency issues which occurred in high load scenarios
  • Many improvements for the LocaleTransposition feature
  • Support conditional parameters with JSF’s <f:param>
  • Fault tolerant percent decoding for path and query parameters
  • Simpler condition trees when binding query parameters using annotations, results in better faster evaluation performance
  • Fixes handling of context path for applications deployed to the root context
  • Improved error reporting. Exception stack traces now display the rule that errored and the location where that rule was defined (including file and line number)
  • Strict RuleBuilder ordering and structure enforcement

Thank you for continuing to support us, provide valuable feedback, and use our technologies.

And of course, please get involved in the project at http://github.com/ocpsoft/rewrite
February 13th, 2014 by Team

Rewrite 2.0.11.Final Released – New i18n Features

We are proud to announce the release of Rewrite Servlet Toolkit 2.0.11.Final.

Highlights

This version includes new support for internationalization and localization. Additionally, support for annotation scanning on the WebLogic application server has been improved.

Security Notice

If you are currently using Rewrite 2.0.9.Final and have not yet updated, you should update to Rewrite 2.0.10.Final or 2.0.11.Final as quickly as possible, since we have fixed a minor concurrency issue when using the PhaseOperation configuration element that can potentially cause cross-request information bleeding.

Get Rewrite

http://ocpsoft.org/rewrite/
December 10th, 2013 by Lincoln Baxter III

Rewrite 2.0.9.Final and PrettyTime 3.2.3.Final Released (Introducing Proxy Support)

Rewrite 2.0.9.Final

We are proud to announce the availability of Rewrite 2.0.9.Final, which introduces “rewrite-config-proxy”, fixes several minor issues, and adds support for Response.isCommitted(), making it far simpler to perform certain operations if the response has already been committed by a prior rule or 3rd party servlet filter.

rewrite-config-proxy

Provides an easy-to-use Operation that allows any inbound request to be proxied to another URL – even on a different server. Headers, cookies, etc, are preserved:

To use this configuration extension, you will need to add it to your POM file:

<dependency>
   <groupId>org.ocpsoft.rewrite</groupId>
   <artifactId>rewrite-config-proxy</artifactId>
   <version>2.0.9.Final</version>
</dependency>
Now add a rule to your ConfigurationProvider:
.addRule()
.when(Direction.isInbound())
.perform(Proxy.to("http://example.com"))

And of course, it supports parameterization:

.addRule()
.when(Direction.isInbound().and(Path.matches("/{p}")))
.perform(Proxy.to("http://example.com/{p}?foo=bar"))

response.isCommitted()

Provides a simple condition for determining whether the response has been committed or not for the current request. This is useful for aborting rewrite processing after a certain point in your configuration:
.addRule()
.when(Response.isCommitted().and(Direction.isInbound()))
.perform(Lifecycle.abort())

More issues resolved in Rewrite 2.0.9.Final:

PrettyTime 3.2.3.Final

We are proud to announce the availability of PrettyTime 3.2.3.Final, which fixes several minor issues with translation and Natural Language Parsing:

Get the updates

Get Rewrite

Get PrettyTime

November 12th, 2013 by Lincoln Baxter III

PrettyTime 3.2.1.Final Released – Now with Czech language support

We are proud to announce the 3.2.1.Final version of PrettyTime. This release includes several bug-fixes, an improved NLP (time parsing) module, and a new method for more convenient configuration of time units:
public void exampleUnitConfiguration() {
    JustNow unit = t.getUnit(JustNow.class);
    unit.setMaxQuantity(1);
    // This means that "just now" will only be used to represent one millisecond difference between the target time and reference time. (the default is 5 minutes.)
}

Improvements in the NLP module (based on Natty.) include more resilient parsing of date offsets such as “the day before yesterday,” which previously resulted in a date that actually represented “yesterday.”

Get PrettyTime 3.2.1.Final and PrettyTime NLP 3.2.1.Final.

September 30th, 2013 by Lincoln Baxter III

Rewrite 2.0.8.Final Released – Fixes critical parameterization bug

Bug Fixes

If you experienced problems with rule parameterization in Rewrite 2.0.7.Final, then sorry about that, and this release of [[Rewrite]] is for you: https://github.com/ocpsoft/rewrite/issues/133

Erroneous failures such as the following exception should be fixed by this release:

org.ocpsoft.rewrite.exception.ParameterizationException: The value of required parameter [s] was null.
	at org.ocpsoft.rewrite.param.RegexParameterizedPatternBuilder.extractBoundValues(RegexParameterizedPatternBuilder.java:262)
	at org.ocpsoft.rewrite.param.RegexParameterizedPatternBuilder.build(RegexParameterizedPatternBuilder.java:136)
	at org.ocpsoft.rewrite.servlet.config.Forward.performHttp(Forward.java:85)
	at org.ocpsoft.rewrite.servlet.config.HttpOperation.perform(HttpOperation.java:42)
	at org.ocpsoft.rewrite.servlet.config.rule.Join.perform(Join.java:264)

New Features

September 15th, 2013 by Lincoln Baxter III

Rewrite 2.0.7.Final Released – Bug fixes and enhancements

We are glad to announce the latest version of [[Rewrite]], servlet toolkit and URL-rewriting extensions. This release includes serveral bug fixes and enhancements:

Simplified Configuration

We heard you! It is now much easier to register ConfigurationProvider objects. You can forget about creating a service file, and simply use the convenient @RewriteConfiguration annotation:

import org.ocpsoft.logging.Logger.Level;
import org.ocpsoft.rewrite.annotation.RewriteConfiguration;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.config.ConfigurationBuilder;
import org.ocpsoft.rewrite.config.Log;
import org.ocpsoft.rewrite.servlet.config.HttpConfigurationProvider;

@RewriteConfiguration
public class ApplicationConfigurationProvider extends HttpConfigurationProvider
{
   @Override
   public Configuration getConfiguration(ServletContext context)
   {
      return ConfigurationBuilder.begin()
         .addRule()
         .perform(Log.message(Log.message(Level.INFO, "Rewrite is active.")))
      ;
   }

   @Override
   public int priority()
   {
      return 0;
   }
}

Issues resolved

Upgrade to 2.0.7.Final

Read the installation guide, or configuration manual.

<dependency>
   <groupId>org.ocpsoft.rewrite</groupId>
   <artifactId>rewrite-servlet</artifactId>
   <version>2.0.7.Final</version>
</dependency>
July 26th, 2013 by Lincoln Baxter III

Rewrite 2.0.5.Final Released

We are pleased to announce the release of Rewrite 2.0.5.Final, which includes several bug fixes and enhancements.

Rewrite is an OpenSource, Filter-based Servlets extension for Java – enabling creation of bookmark-able, pretty URLs. Rewrite solves the “RESTful URL” problem elegantly, including features such as: page-load actions, managed parameter parsing, seamless integration with CDI, Spring, and configuration-free compatibility with other web frameworks.

Bug fixes in 2.0.5.Final

Issue #109 – Context root is appended twice when using Navigate.to() class
Issue #110 – View IDs with hard-coded query parameters were working in PrettyFaces 3, but no longer in PrettyFaces with Rewrite.

Other critical issues fixed in prior releases have continued to be tested for security holes. If you use container-based security, and have not yet upgraded from Rewrite 2.0.3.Final, you should Immediately upgrade to 2.0.4 or 2.0.5.Final because of the following issue:

Critical issue in 2.0.0.Final -> 2.0.3.Final

Issue 111 – Container based security is circumvented when Rewrite is installed

Documentation improvements

Additionally, we (mostly Christian) have put a good deal of work into the documentation and migration guide from Rewrite 1.x and PrettyFaces to Rewrite 2.x: You can find that guide here: http://ocpsoft.org/rewrite/docs/migration/prettyfaces3 – which is part of a larger effort to improve our documentation entirely. And of course, if you have any questions or concerns, please let us know on the forums, or submit an issue to our issue tracker.

Go get Rewrite now!

We hope you enjoy this latest release of Rewrite!
~Lincoln and the Rewrite Team

July 25th, 2012 by Lincoln Baxter III

Rewrite 1.1.0.Final introduces the OutputBuffer – What Servlet always wanted but could never have

Output buffering is a feature often desired but rarely properly implemented – Properly resetting the Response stream, preserving headers correctly, writing to disk so you don’t overflow the JVM memory space – in Rewrite, we hope to make this attainable for anyone seeking to do things like:
  • Dynamic minification of HTML, JavaScript, and/or CSS files
  • Modification of output HTML or content before it is sent to the client.
  • Reduction of build and development complexity by transforming LESS or SASS files into CSS on the Server
  • Got more ideas?… tell us.?
Now, using the Rewrite’s “OutputBuffer” API introduced in the new version 1.1.0.Final, you can finally achieve this in just a few lines of code, either by wrapping a stream, or simply modifying the contents directly!
March 6th, 2012 by Team

PrettyFaces 3.3.3 Released

PrettyFaces is an OpenSource Filter-based Servlets extension with enhanced support for JavaServer Faces – JSF 1.1, 1.2 and 2.0 – enabling creation of bookmark-able, pretty URLs. PrettyFaces solves the “RESTful URL” problem elegantly, including features such as: page-load actions, seamless integration with faces navigation, dynamic view-id assignment, managed parameter parsing, and configuration-free compatibility with other web frameworks.
Get [[PrettyFaces | version 3.3.3]] of PrettyFaces now! See how simple URL-rewriting can be, with the power of open-source tools at your fingertips.
Thanks goes out to all of the developers who contributed to this release; a lot of work has been done, particularly in the realms of stability, performance, and inter-operability with other frameworks.
September 4th, 2010 by Team

PrettyFaces 3.1.0 released: URL-rewriting for Servlet & JSF

Features & Enhancements:

  • Introducing URL mapping configuration with annotations (tutorial + docs)
  • Added path and query-parameter validation wth managed bean methods (#50 + r353)
  • Added support for JSF2 redirects using ExternalContext (r305)
  • Added support for arrays as query parameters (r278)

Regression impact:

  • The URL query string is now included in rewrite-rules; this allows for finer control of the rewriting engine (Any prior rewrite rules should be revised and re-tested)
  • PrettyContext.getCurrentURL() has been replaced with PrettyContext.getRequestURL() and PrettyContext.getRequestQueryString()

Bugfixes:

  • Resolved Mojarra warning “Request path ‘/faces/url.xhtml’ begins with one or more occurrences of the FacesServlet prefix path mapping ‘/faces’.” when using path mapping (#43 + r379)
  • Resolved Deployment warning on Geronimo (#58 + r364)
  • URL Path Expressions now match correctly when more than one expression is used between path segments (r362)
  • Resolved ClassNotFoundException with JSF 1.2 on JBoss6 (#54 + r360)
  • Resolved failed deployment due to ClassNotFoundException on Geronimo (#59 + r369)