Tapestry 5
  1. Tapestry 5
  2. TAP5-1693

Spring beans of type java.lang.String can confuse Tapestry, which will use them in preference to other injections, such as @Symbol

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Critical Critical
    • Resolution: Fixed
    • Affects Version/s: 5.3
    • Fix Version/s: 5.3
    • Labels:
      None

      Description

      I found a pretty confusing issue that seems Blocker to me.

      In my project I am using a JNDI name to configure a piece of my application. Basically in this case Spring creates of Bean of type "java.lang.String". That was perfectly working under Tapestry 5.2.6.

      Since I updated to 5.3-beta-19 1 time out of 3 the whole application if failling because Tapestry cannot resolve Page Name anymore.

      After digging it turns out that Tapestry is Injecting the value of this Bean in several places where it should not : example applicationCharset or startPageName.

      Please see attached screenshots for better understanding.

        Activity

        Hide
        Martin Papy added a comment -

        Eclipse Debug Mode

        We can clearly see :

        • the Spring "core-context.xml" file that defined the String Bean ( and in comment the JNDI lookup equivalent that is usually used )
        • the TapestryModule class filewith the Debug pointbreak when trying to create a HttpServletRequestHandler
        • the wrong injected value "applicationCharset" (should display UTF-8)
        Show
        Martin Papy added a comment - Eclipse Debug Mode We can clearly see : the Spring "core-context.xml" file that defined the String Bean ( and in comment the JNDI lookup equivalent that is usually used ) the TapestryModule class filewith the Debug pointbreak when trying to create a HttpServletRequestHandler the wrong injected value "applicationCharset" (should display UTF-8)
        Hide
        Howard M. Lewis Ship added a comment -

        public HttpServletRequestHandler buildHttpServletRequestHandler(Logger logger,

        List<HttpServletRequestFilter> configuration,

        @Primary
        RequestHandler handler,

        @Symbol(SymbolConstants.CHARSET)
        String applicationCharset,

        SessionFactory sessionFactory)

        Interesting. Obviously, Tapestry should be doing an injection of the Symbol, but instead is picking up the Spring Bean whose type is String. This is probably just an ordering issue ... we need to check Spring a bit later in the MasterObjectProvider chain.

        Show
        Howard M. Lewis Ship added a comment - public HttpServletRequestHandler buildHttpServletRequestHandler(Logger logger, List<HttpServletRequestFilter> configuration, @Primary RequestHandler handler, @Symbol(SymbolConstants.CHARSET) String applicationCharset, SessionFactory sessionFactory) Interesting. Obviously, Tapestry should be doing an injection of the Symbol, but instead is picking up the Spring Bean whose type is String. This is probably just an ordering issue ... we need to check Spring a bit later in the MasterObjectProvider chain.
        Hide
        Howard M. Lewis Ship added a comment -

        Are you running in Tapestry 5.0 compatibility mode? You'll see a tapestry.use-external-spring-context init-parameter in web.xml when this is the case.

        Show
        Howard M. Lewis Ship added a comment - Are you running in Tapestry 5.0 compatibility mode? You'll see a tapestry.use-external-spring-context init-parameter in web.xml when this is the case.
        Hide
        Hudson added a comment -

        Integrated in tapestry-trunk-freestyle #578 (See https://builds.apache.org/job/tapestry-trunk-freestyle/578/)
        TAP5-1693: Spring beans of type java.lang.String can confuse Tapestry, which will use them in preference to other injections, such as @Symbol

        hlship : http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN&view=rev&rev=1185310
        Files :

        • /tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/TapestryIOCModule.java
        • /tapestry/tapestry5/trunk/tapestry-spring/src/main/java/org/apache/tapestry5/internal/spring/SpringModuleDef.java
        • /tapestry/tapestry5/trunk/tapestry-spring/src/main/java/org/apache/tapestry5/spring/SpringConstants.java
        • /tapestry/tapestry5/trunk/tapestry-spring/src/main/java/org/apache/tapestry5/spring/SpringModule.java
        • /tapestry/tapestry5/trunk/tapestry-spring/src/test/webapp/WEB-INF/applicationContext.xml
        Show
        Hudson added a comment - Integrated in tapestry-trunk-freestyle #578 (See https://builds.apache.org/job/tapestry-trunk-freestyle/578/ ) TAP5-1693 : Spring beans of type java.lang.String can confuse Tapestry, which will use them in preference to other injections, such as @Symbol hlship : http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN&view=rev&rev=1185310 Files : /tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/TapestryIOCModule.java /tapestry/tapestry5/trunk/tapestry-spring/src/main/java/org/apache/tapestry5/internal/spring/SpringModuleDef.java /tapestry/tapestry5/trunk/tapestry-spring/src/main/java/org/apache/tapestry5/spring/SpringConstants.java /tapestry/tapestry5/trunk/tapestry-spring/src/main/java/org/apache/tapestry5/spring/SpringModule.java /tapestry/tapestry5/trunk/tapestry-spring/src/test/webapp/WEB-INF/applicationContext.xml

          People

          • Assignee:
            Howard M. Lewis Ship
            Reporter:
            Martin Papy
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development