diff --git a/SPR-9157/SPR-9157.txt b/SPR-9157/SPR-9157.txt
new file mode 100644
index 00000000..5afee823
--- /dev/null
+++ b/SPR-9157/SPR-9157.txt
@@ -0,0 +1,2 @@
+http://localhost:8080/spr9157/environments.html
+http://localhost:8080/spr9157/environment.html?environment=name
\ No newline at end of file
diff --git a/SPR-9157/pom.xml b/SPR-9157/pom.xml
new file mode 100644
index 00000000..be88af6c
--- /dev/null
+++ b/SPR-9157/pom.xml
@@ -0,0 +1,90 @@
+
+
+ 4.0.0
+ org.springframework.issues
+ spr9157
+ 0.1
+ war
+ SPR-9157 :: Spring3 converter
+ SPR-9157 - Spring 3 converter
+
+
+ 1.5
+ 3.0.7.RELEASE
+ 1.6.4
+
+
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.version}
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+ ch.qos.logback
+ logback-classic
+ 1.0.0
+
+
+ javax.servlet
+ servlet-api
+ 2.4
+ provided
+
+
+ javax.servlet.jsp
+ jsp-api
+ 2.0
+ provided
+
+
+ javax.servlet
+ jstl
+ 1.1.2
+
+
+
+
+
+ maven-compiler-plugin
+ 2.3.2
+
+ ${java-version}
+ ${java-version}
+
+
+
+ maven-jar-plugin
+ 2.3.1
+
+
+ maven-source-plugin
+ 2.1.2
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+ maven-surefire-plugin
+ 2.11
+
+ -Xms64m -Xmx512m -XX:MaxPermSize=128m
+
+
+
+ maven-war-plugin
+ 2.1.1
+
+
+
+
diff --git a/SPR-9157/src/main/java/org/springframework/issues/spr9157/model/EnhancedEnvironment.java b/SPR-9157/src/main/java/org/springframework/issues/spr9157/model/EnhancedEnvironment.java
new file mode 100644
index 00000000..865780e6
--- /dev/null
+++ b/SPR-9157/src/main/java/org/springframework/issues/spr9157/model/EnhancedEnvironment.java
@@ -0,0 +1,11 @@
+package org.springframework.issues.spr9157.model;
+
+/**
+ * Enhanced environment.
+ *
+ * @author ferengra
+ */
+public interface EnhancedEnvironment extends Environment {
+
+ String getDescription();
+}
diff --git a/SPR-9157/src/main/java/org/springframework/issues/spr9157/model/EnhancedEnvironmentImpl.java b/SPR-9157/src/main/java/org/springframework/issues/spr9157/model/EnhancedEnvironmentImpl.java
new file mode 100644
index 00000000..94fb35d7
--- /dev/null
+++ b/SPR-9157/src/main/java/org/springframework/issues/spr9157/model/EnhancedEnvironmentImpl.java
@@ -0,0 +1,28 @@
+package org.springframework.issues.spr9157.model;
+
+/**
+ * Enhanced environment implementation.
+ *
+ * @author ferengra
+ */
+public class EnhancedEnvironmentImpl extends EnvironmentImpl implements EnhancedEnvironment {
+ private String description;
+
+ @SuppressWarnings("unused")
+ private EnhancedEnvironmentImpl() {
+ // Hibernate
+ }
+
+ public EnhancedEnvironmentImpl(String name, String description) {
+ super(name);
+ this.description = description;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/SPR-9157/src/main/java/org/springframework/issues/spr9157/model/Environment.java b/SPR-9157/src/main/java/org/springframework/issues/spr9157/model/Environment.java
new file mode 100644
index 00000000..9e80ca07
--- /dev/null
+++ b/SPR-9157/src/main/java/org/springframework/issues/spr9157/model/Environment.java
@@ -0,0 +1,11 @@
+package org.springframework.issues.spr9157.model;
+
+/**
+ * Environment.
+ *
+ * @author ferengra
+ */
+public interface Environment {
+
+ String getName();
+}
diff --git a/SPR-9157/src/main/java/org/springframework/issues/spr9157/model/EnvironmentImpl.java b/SPR-9157/src/main/java/org/springframework/issues/spr9157/model/EnvironmentImpl.java
new file mode 100644
index 00000000..30d60a8f
--- /dev/null
+++ b/SPR-9157/src/main/java/org/springframework/issues/spr9157/model/EnvironmentImpl.java
@@ -0,0 +1,58 @@
+package org.springframework.issues.spr9157.model;
+
+/**
+ * Environment implementation.
+ *
+ * @author ferengra
+ */
+public class EnvironmentImpl implements Environment {
+ private Long id;
+ private String name;
+
+ protected EnvironmentImpl() {
+ // Hibernate
+ }
+
+ public EnvironmentImpl(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof EnhancedEnvironmentImpl)) {
+ return false;
+ }
+ EnhancedEnvironmentImpl other = (EnhancedEnvironmentImpl) obj;
+ return getName().equals(other.getName());
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("EnvironmentImpl [id=").append(id).append(", name=").append(name).append("]");
+ return builder.toString();
+ }
+}
diff --git a/SPR-9157/src/main/java/org/springframework/issues/spr9157/web/controller/EnvironmentController.java b/SPR-9157/src/main/java/org/springframework/issues/spr9157/web/controller/EnvironmentController.java
new file mode 100644
index 00000000..332f3145
--- /dev/null
+++ b/SPR-9157/src/main/java/org/springframework/issues/spr9157/web/controller/EnvironmentController.java
@@ -0,0 +1,34 @@
+package org.springframework.issues.spr9157.web.controller;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.issues.spr9157.model.EnhancedEnvironment;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.ModelAndView;
+
+/**
+ * Controller for managing environment.
+ *
+ * @author ferengra
+ */
+@Controller
+public class EnvironmentController {
+ private static final Logger LOG = LoggerFactory.getLogger(EnvironmentController.class);
+
+ @RequestMapping(value = "/environments.html", method = RequestMethod.GET)
+ public ModelAndView getEnvironments() {
+ LOG.debug("environments");
+ return new ModelAndView("environments");
+ }
+
+ @RequestMapping(value = "/environment.html", method = RequestMethod.GET)
+ public ModelAndView getEnvironment(@RequestParam EnhancedEnvironment environment) {
+ LOG.debug("environment: {}", environment);
+ ModelAndView mav = new ModelAndView("environment");
+ mav.addObject("environment", environment);
+ return mav;
+ }
+}
diff --git a/SPR-9157/src/main/java/org/springframework/issues/spr9157/web/util/EnvironmentConverter.java b/SPR-9157/src/main/java/org/springframework/issues/spr9157/web/util/EnvironmentConverter.java
new file mode 100644
index 00000000..cab4dbe2
--- /dev/null
+++ b/SPR-9157/src/main/java/org/springframework/issues/spr9157/web/util/EnvironmentConverter.java
@@ -0,0 +1,25 @@
+package org.springframework.issues.spr9157.web.util;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.issues.spr9157.model.EnhancedEnvironmentImpl;
+import org.springframework.issues.spr9157.model.Environment;
+import org.springframework.util.StringUtils;
+
+/**
+ * Environment converter.
+ *
+ * @author ferengra
+ */
+public class EnvironmentConverter implements Converter {
+ private static final Logger LOG = LoggerFactory.getLogger(EnvironmentConverter.class);
+
+ public Environment convert(String source) {
+ LOG.debug("source: {}", source);
+ if (!StringUtils.hasText(source)) {
+ return null;
+ }
+ return new EnhancedEnvironmentImpl(source.trim(), source.trim());
+ }
+}
diff --git a/SPR-9157/src/main/resources/logback.xml b/SPR-9157/src/main/resources/logback.xml
new file mode 100644
index 00000000..b1e6874d
--- /dev/null
+++ b/SPR-9157/src/main/resources/logback.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ C:\\Temp\\logDebug.log
+
+
+ ${logback.debugFile}.%i.log
+ 1
+ 5
+
+
+
+ 20MB
+
+
+
+ %date %-5level %logger [%thread] [%file : %line] - %msg%n
+
+
+
+
+
+
+ WARN
+
+
+ C:\\Temp\\logError.log
+
+
+ ${logback.errorFile}.%i.log
+ 1
+ 2
+
+
+
+ 20MB
+
+
+
+ %date %-5level %logger [%thread] [%file : %line] - %msg%n
+
+
+
+
+
+
+ %date %-5level %logger{36} [%thread] [%file : %line] - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SPR-9157/src/main/webapp/WEB-INF/applicationContext.xml b/SPR-9157/src/main/webapp/WEB-INF/applicationContext.xml
new file mode 100644
index 00000000..8e12b6e1
--- /dev/null
+++ b/SPR-9157/src/main/webapp/WEB-INF/applicationContext.xml
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/SPR-9157/src/main/webapp/WEB-INF/spr9157-servlet.xml b/SPR-9157/src/main/webapp/WEB-INF/spr9157-servlet.xml
new file mode 100644
index 00000000..3067bc29
--- /dev/null
+++ b/SPR-9157/src/main/webapp/WEB-INF/spr9157-servlet.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SPR-9157/src/main/webapp/WEB-INF/views/environment.jsp b/SPR-9157/src/main/webapp/WEB-INF/views/environment.jsp
new file mode 100644
index 00000000..cce42251
--- /dev/null
+++ b/SPR-9157/src/main/webapp/WEB-INF/views/environment.jsp
@@ -0,0 +1,11 @@
+<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+
+ ]]>
+
+
+
+
+Spring 3 Converter
+
+Environment: <%= request.getAttribute("environment") %>
+
\ No newline at end of file
diff --git a/SPR-9157/src/main/webapp/WEB-INF/views/environments.jsp b/SPR-9157/src/main/webapp/WEB-INF/views/environments.jsp
new file mode 100644
index 00000000..2cc17024
--- /dev/null
+++ b/SPR-9157/src/main/webapp/WEB-INF/views/environments.jsp
@@ -0,0 +1,11 @@
+<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+
+ ]]>
+
+
+
+
+Spring 3 Converter
+
+Environments
+
\ No newline at end of file
diff --git a/SPR-9157/src/main/webapp/WEB-INF/views/errorInternal.jsp b/SPR-9157/src/main/webapp/WEB-INF/views/errorInternal.jsp
new file mode 100644
index 00000000..6b4805f4
--- /dev/null
+++ b/SPR-9157/src/main/webapp/WEB-INF/views/errorInternal.jsp
@@ -0,0 +1,19 @@
+<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ page isErrorPage="true" %>
+<%@ page import="org.slf4j.LoggerFactory" %>
+
+ ]]>
+
+
+
+
+Spring 3 Converter
+
+
+Error
+<%
+LoggerFactory.getLogger("InternalError").error("Exception occured: ", exception);
+%>
+<%= exception.toString() %>
+
+
diff --git a/SPR-9157/src/main/webapp/WEB-INF/views/index.jsp b/SPR-9157/src/main/webapp/WEB-INF/views/index.jsp
new file mode 100644
index 00000000..6ca54ff0
--- /dev/null
+++ b/SPR-9157/src/main/webapp/WEB-INF/views/index.jsp
@@ -0,0 +1,11 @@
+<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+
+ ]]>
+
+
+
+
+Spring 3 Converter
+
+Index
+
\ No newline at end of file
diff --git a/SPR-9157/src/main/webapp/WEB-INF/web.xml b/SPR-9157/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 00000000..93911d98
--- /dev/null
+++ b/SPR-9157/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,80 @@
+
+
+ spr9157
+
+
+ requestScopeFilter
+ org.springframework.web.filter.RequestContextFilter
+
+
+ requestScopeFilter
+ /*
+
+
+
+ characterEncodingFilter
+ org.springframework.web.filter.CharacterEncodingFilter
+
+ encoding
+ UTF-8
+
+
+ forceEncoding
+ true
+
+
+
+ characterEncodingFilter
+ /*
+
+
+
+
+ org.springframework.web.context.ContextLoaderListener
+
+
+ org.springframework.web.context.request.RequestContextListener
+
+
+ org.springframework.web.util.IntrospectorCleanupListener
+
+
+
+ spr9157
+ org.springframework.web.servlet.DispatcherServlet
+ 1
+
+
+ spr9157
+ *.html
+
+
+ spr9157
+ *.do
+
+
+ spr9157
+ *.json
+
+
+
+
+ 30
+
+
+
+
+ index.jsp
+
+
+
+
+
+ Forbidden methods
+ /*
+ TRACE
+
+
+
+