You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Marcus Bond <ma...@marcusbond.co.uk> on 2011/05/08 23:11:23 UTC

Strange behaviour with Spring

Hi,

I'm using Struts 2.2.3 and have observed some bizarre behavior when 
using Spring to provide my actions.. In order to simplify this and prove 
the problem I have created a project with a single static html file, and 
a single action in struts.xml which references a bean in my spring 
context file.

What basically happens is that if I declare a bean in my spring context 
(bean unrelated toany struts action) that is of class java.lang.String 
(as I do for a log4j filepath) then when I perform a redirect in an 
action mapping this gets appended to the end of the url as the anchor.

If I navigate to http://localhost:8080/My App/simpleRedirect
the result is a reirect to the 'simple' action but note the url struts 
has redirected to:
http://localhost:8080/MyApp/simple#this%20is%20a%20java.lang.String%20bean%20in%20my%20spring%20context

For some reason the org.apache.struts2.dispatcher.ServletRedirectResult 
class is being instantiated by with the anchor and location constructor 
args set to the value of my spring bean by the StrutsSpringObjectFactory

If I remove the String bean from the spring contect then the url behaves 
as normal, redirecting to:
http://localhost:8080/MyApp/simple

Have been scratching my head trying to find where this behaviour is 
happening but have run out of time.. is this a known issue?

Files content:
*Spring context file:*

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
                         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

     <!-- Expose String as a bean (usually for a file path)-->
     <!-- Picked up by Struts and set as location and anchor on a redirect and presented in url
         If commented out this does not happen -->
     <bean id="someFileName" class="java.lang.String">
         <constructor-arg value="this is a java.lang.String bean in my spring context" />
     </bean>

     <!--  action beans -->
     <bean name ="simpleAction" class="uk.co.marcusbond.action.SimpleAction" scope="prototype" />
</beans>

*Struts file:*
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
     <package name="simple" extends="struts-default">
         <!-- returns success and shows index.html -->
         <action name="simple"
             class="simpleAction">
             <result>index.html</result>
         </action>

         <!-- redirects through the 'simple' action -->
         <action name="simpleRedirect">
                 <result name="success" type="redirect">simple</result>
         </action>
     </package>
</struts>

*Java class uk.co.marcusbond.action.SimpleAction*
package uk.co.marcusbond.action;

public class SimpleAction  {

     public String execute() {
	return "success";
     }
}



Re: Strange behaviour with Spring

Posted by Marcus Bond <ma...@marcusbond.me.uk>.
Just in case anyone can benefit from the insight, it turned out to be a 
configuration option and unfortunately that property isn't mentioned in 
the default properties file. (perhaps it could be added?)

In spite of configuring the struts properties for spring like below 
(properties as found in the default struts properties file)
struts.objectFactory=spring
struts.objectFactory.spring.autoWire=name
struts.objectFactory.spring.useClassCache=true

It turns out that even when configured in this way the 
StrutsSpringObjectFactory doesn't enforce it and can still load by type 
(only if there is a single bean of the relevant type as per behaviour of 
autowire by type) when trying to resolve constructors unless the 
following property is also set..

#This must be set to true when autowiring by name to prevent the 
StrutsSpringObjectFactory autowiring by type!
struts.objectFactory.spring.autoWire.alwaysRespect=true

Problem solved, cheers,
M.

On 09/05/2011 17:29, Andrew Lee wrote:
> Ok, I didn't see you aren't actually referencing the string bean in your
> action. That won't help
> On 9 May 2011 17:23, "Andrew Lee"<pl...@gmail.com>  wrote:
>> He's not using it as a java bean. Spring beans can be immutable.
>>
>> Is it because when spring wires up your action it considers it to be a
>> parameter as you have get and set methods? So it appends it to the url. If
>> you inject t string bean via constructor injection and not via setter
>> injection and remove the getters and setters ,does that work?
>> On 9 May 2011 16:54, "Chris Pratt"<th...@gmail.com>  wrote:
>>> Even if Spring considers it valid, that doesn't mean that other packages
>>> will be able to treat immutable, non-JavaBeans as JavaBeans.
>>> (*Chris*)
>>>
>>> On Mon, May 9, 2011 at 3:39 AM, Marcus<ma...@marcusbond.co.uk>  wrote:
>>>
>>>> You can if you want to use a String as a Spring bean, it's a different
>>>> issue as to whether or not it is considered best practice or whether
>> there
>>>> are alternatives. You can find examples on the SpringSource forum if you
>>>> want, commented upon by Springy folk. It is perfectly valid to do so..
>>>>
>>>> Sorry to sound off here but could input to the topic be constrained to
>> why
>>>> it might be that Struts somehow messes up the redirect by picking this
>> bean
>>>> up even though there are no references to it an any of the struts action
>>>> beans or in the struts.xml.. I think we can infer from this that if any
>>>> context file, regardless of purpose (related to Struts, data access or
>> any
>>>> other whatever) declared a String as a bean this will mess struts
>> redirects
>>>> up.. which is something that shouldn't happen.
>>>>
>>>>
>>>>
>>>>
>>>> On 09/05/2011 11:16, Ilya Kazakevich wrote:
>>>>
>>>>> Not sure you can use primitive wrappers and strings as spring beans.
> For
>>>>> example autowiring does not work for them.
>>>>> Try the following:
>>>>>
>>>>> 1) inject literal directly
>>>>> Instead of
>>>>> <property ref="myString"
>>>>> Try
>>>>> <property value="myStringContent"
>>>>>
>>>>> 2) Create your own wrapper for string like Configuration class with
>> method
>>>>> getMyProperty
>>>>>
>>>>>
>>>>> Ilya Kazakevich,
>>>>> Developer
>>>>> JetBrains Inc
>>>>> http://www.jetbrains.com
>>>>> "Develop with pleasure!"
>>>>>
>>>>> -----Original Message-----
>>>>> From: Marcus [mailto:marcus@marcusbond.co.uk]
>>>>> Sent: Monday, May 09, 2011 11:27 AM
>>>>> To: user@struts.apache.org
>>>>> Subject: Re: Strange behaviour with Spring
>>>>>
>>>>> Not sure what you mean, the bean I'm referring to is a Spring bean not
> a
>>>>> JavaBean (two unrelated concepts).. there is no requirement when using
>>>>> the Spring framework to not create Spring beans of type String.
>>>>>
>>>>> Regardless, this doesn't help explain why the String is being picked up
>>>>> by the Struts framework and set on the redirect when there is nothing
> in
>>>>> the configuration to indicate it should..
>>>>>
>>>>> On 09/05/2011 07:13, Chris Pratt wrote:
>>>>>
>>>>>> You can't create beans that implement java.lang.String, it's immutable
>>>>>> and
>>>>>> doesn't follow the bean spec.
>>>>>> (*Chris*)
>>>>>>
>>>>>> On Sun, May 8, 2011 at 2:11 PM, Marcus Bond<ma...@marcusbond.co.uk>
>>>>>>
>>>>> wrote:
>>>>>
>>>>>> Hi,
>>>>>>> I'm using Struts 2.2.3 and have observed some bizarre behavior when
>>>>>>> using
>>>>>>> Spring to provide my actions.. In order to simplify this and prove
> the
>>>>>>> problem I have created a project with a single static html file, and
> a
>>>>>>> single action in struts.xml which references a bean in my spring
>> context
>>>>>>> file.
>>>>>>>
>>>>>>> What basically happens is that if I declare a bean in my spring
>> context
>>>>>>> (bean unrelated toany struts action) that is of class
> java.lang.String
>>>>>> (as I
>>>>>> do for a log4j filepath) then when I perform a redirect in an action
>>>>>> mapping
>>>>>> this gets appended to the end of the url as the anchor.
>>>>>>> If I navigate to http://localhost:8080/My App/simpleRedirect
>>>>>>> the result is a reirect to the 'simple' action but note the url
> struts
>>>>>> has
>>>>>> redirected to:
>>>>>>>
>>>>>>>
> http://localhost:8080/MyApp/simple#this%20is%20a%20java.lang.String%20bean%2
>>>>> 0in%20my%20spring%20context
>>>>>
>>>>>> For some reason the
> org.apache.struts2.dispatcher.ServletRedirectResult
>>>>>>> class is being instantiated by with the anchor and location
>> constructor
>>>>>> args
>>>>>> set to the value of my spring bean by the StrutsSpringObjectFactory
>>>>>>> If I remove the String bean from the spring contect then the url
>> behaves
>>>>>> as
>>>>>> normal, redirecting to:
>>>>>>> http://localhost:8080/MyApp/simple
>>>>>>>
>>>>>>> Have been scratching my head trying to find where this behaviour is
>>>>>>> happening but have run out of time.. is this a known issue?
>>>>>>>
>>>>>>> Files content:
>>>>>>> *Spring context file:*
>>>>>>>
>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>>> xmlns:aop="http://www.springframework.org/schema/aop"
>>>>>>> xmlns:tx="http://www.springframework.org/schema/tx"
>>>>>>> xsi:schemaLocation="http://www.springframework.org/schema/beans
>>>>>>> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>>>>>>> http://www.springframework.org/schema/tx
>>>>>>> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
>>>>>>> http://www.springframework.org/schema/aop
>>>>>>> http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
>>>>>>>
>>>>>>> <!-- Expose String as a bean (usually for a file path)-->
>>>>>>> <!-- Picked up by Struts and set as location and anchor on a
>>>>>>> redirect
>>>>>>> and presented in url
>>>>>>> If commented out this does not happen -->
>>>>>>> <bean id="someFileName" class="java.lang.String">
>>>>>>> <constructor-arg value="this is a java.lang.String bean in my
>>>>>>>
>>>>>> spring
>>>>>> context" />
>>>>>>> </bean>
>>>>>>>
>>>>>>> <!-- action beans -->
>>>>>>> <bean name ="simpleAction"
>>>>>>>
>>>>>> class="uk.co.marcusbond.action.SimpleAction"
>>>>>> scope="prototype" />
>>>>>>> </beans>
>>>>>>>
>>>>>>> *Struts file:*
>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>> <!DOCTYPE struts PUBLIC
>>>>>>> "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
>>>>>>> "http://struts.apache.org/dtds/struts-2.0.dtd">
>>>>>>> <struts>
>>>>>>> <package name="simple" extends="struts-default">
>>>>>>> <!-- returns success and shows index.html -->
>>>>>>> <action name="simple"
>>>>>>> class="simpleAction">
>>>>>>> <result>index.html</result>
>>>>>>> </action>
>>>>>>>
>>>>>>> <!-- redirects through the 'simple' action -->
>>>>>>> <action name="simpleRedirect">
>>>>>>> <result name="success" type="redirect">simple</result>
>>>>>>> </action>
>>>>>>> </package>
>>>>>>> </struts>
>>>>>>>
>>>>>>> *Java class uk.co.marcusbond.action.SimpleAction*
>>>>>>> package uk.co.marcusbond.action;
>>>>>>>
>>>>>>> public class SimpleAction {
>>>>>>>
>>>>>>> public String execute() {
>>>>>>> return "success";
>>>>>>> }
>>>>>>> }
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> __________ NOD32 6105 (20110508) Information __________
>>>>>>
>>>>>> This message was checked by NOD32 antivirus system.
>>>>>> http://www.eset.com
>>>>>>
>>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>> For additional commands, e-mail: user-help@struts.apache.org
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>> For additional commands, e-mail: user-help@struts.apache.org
>>>>>
>>>>>
>>>>>
>>>>> __________ NOD32 6106 (20110509) Information __________
>>>>>
>>>>>
>>>>> This message was checked by NOD32 antivirus system.
>>>>> http://www.eset.com
>>>>>
>>>>>
>>>>>
>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>> For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Strange behaviour with Spring

Posted by Andrew Lee <pl...@gmail.com>.
Ok, I didn't see you aren't actually referencing the string bean in your
action. That won't help
On 9 May 2011 17:23, "Andrew Lee" <pl...@gmail.com> wrote:
> He's not using it as a java bean. Spring beans can be immutable.
>
> Is it because when spring wires up your action it considers it to be a
> parameter as you have get and set methods? So it appends it to the url. If
> you inject t string bean via constructor injection and not via setter
> injection and remove the getters and setters ,does that work?
> On 9 May 2011 16:54, "Chris Pratt" <th...@gmail.com> wrote:
>> Even if Spring considers it valid, that doesn't mean that other packages
>> will be able to treat immutable, non-JavaBeans as JavaBeans.
>> (*Chris*)
>>
>> On Mon, May 9, 2011 at 3:39 AM, Marcus <ma...@marcusbond.co.uk> wrote:
>>
>>> You can if you want to use a String as a Spring bean, it's a different
>>> issue as to whether or not it is considered best practice or whether
> there
>>> are alternatives. You can find examples on the SpringSource forum if you
>>> want, commented upon by Springy folk. It is perfectly valid to do so..
>>>
>>> Sorry to sound off here but could input to the topic be constrained to
> why
>>> it might be that Struts somehow messes up the redirect by picking this
> bean
>>> up even though there are no references to it an any of the struts action
>>> beans or in the struts.xml.. I think we can infer from this that if any
>>> context file, regardless of purpose (related to Struts, data access or
> any
>>> other whatever) declared a String as a bean this will mess struts
> redirects
>>> up.. which is something that shouldn't happen.
>>>
>>>
>>>
>>>
>>> On 09/05/2011 11:16, Ilya Kazakevich wrote:
>>>
>>>> Not sure you can use primitive wrappers and strings as spring beans.
For
>>>> example autowiring does not work for them.
>>>> Try the following:
>>>>
>>>> 1) inject literal directly
>>>> Instead of
>>>> <property ref="myString"
>>>> Try
>>>> <property value="myStringContent"
>>>>
>>>> 2) Create your own wrapper for string like Configuration class with
> method
>>>> getMyProperty
>>>>
>>>>
>>>> Ilya Kazakevich,
>>>> Developer
>>>> JetBrains Inc
>>>> http://www.jetbrains.com
>>>> "Develop with pleasure!"
>>>>
>>>> -----Original Message-----
>>>> From: Marcus [mailto:marcus@marcusbond.co.uk]
>>>> Sent: Monday, May 09, 2011 11:27 AM
>>>> To: user@struts.apache.org
>>>> Subject: Re: Strange behaviour with Spring
>>>>
>>>> Not sure what you mean, the bean I'm referring to is a Spring bean not
a
>>>> JavaBean (two unrelated concepts).. there is no requirement when using
>>>> the Spring framework to not create Spring beans of type String.
>>>>
>>>> Regardless, this doesn't help explain why the String is being picked up
>>>> by the Struts framework and set on the redirect when there is nothing
in
>>>> the configuration to indicate it should..
>>>>
>>>> On 09/05/2011 07:13, Chris Pratt wrote:
>>>>
>>>>> You can't create beans that implement java.lang.String, it's immutable
>>>>> and
>>>>> doesn't follow the bean spec.
>>>>> (*Chris*)
>>>>>
>>>>> On Sun, May 8, 2011 at 2:11 PM, Marcus Bond<ma...@marcusbond.co.uk>
>>>>>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>>
>>>>>> I'm using Struts 2.2.3 and have observed some bizarre behavior when
>>>>>> using
>>>>>> Spring to provide my actions.. In order to simplify this and prove
the
>>>>>> problem I have created a project with a single static html file, and
a
>>>>>> single action in struts.xml which references a bean in my spring
> context
>>>>>> file.
>>>>>>
>>>>>> What basically happens is that if I declare a bean in my spring
> context
>>>>>> (bean unrelated toany struts action) that is of class
java.lang.String
>>>>>>
>>>>> (as I
>>>>
>>>>> do for a log4j filepath) then when I perform a redirect in an action
>>>>>>
>>>>> mapping
>>>>
>>>>> this gets appended to the end of the url as the anchor.
>>>>>>
>>>>>> If I navigate to http://localhost:8080/My App/simpleRedirect
>>>>>> the result is a reirect to the 'simple' action but note the url
struts
>>>>>>
>>>>> has
>>>>
>>>>> redirected to:
>>>>>>
>>>>>>
>>>>>>
>>>>
>
http://localhost:8080/MyApp/simple#this%20is%20a%20java.lang.String%20bean%2
>>>> 0in%20my%20spring%20context
>>>>
>>>>> For some reason the
org.apache.struts2.dispatcher.ServletRedirectResult
>>>>>> class is being instantiated by with the anchor and location
> constructor
>>>>>>
>>>>> args
>>>>
>>>>> set to the value of my spring bean by the StrutsSpringObjectFactory
>>>>>>
>>>>>> If I remove the String bean from the spring contect then the url
> behaves
>>>>>>
>>>>> as
>>>>
>>>>> normal, redirecting to:
>>>>>> http://localhost:8080/MyApp/simple
>>>>>>
>>>>>> Have been scratching my head trying to find where this behaviour is
>>>>>> happening but have run out of time.. is this a known issue?
>>>>>>
>>>>>> Files content:
>>>>>> *Spring context file:*
>>>>>>
>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> xmlns:aop="http://www.springframework.org/schema/aop"
>>>>>> xmlns:tx="http://www.springframework.org/schema/tx"
>>>>>> xsi:schemaLocation="http://www.springframework.org/schema/beans
>>>>>> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>>>>>> http://www.springframework.org/schema/tx
>>>>>> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
>>>>>> http://www.springframework.org/schema/aop
>>>>>> http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
>>>>>>
>>>>>> <!-- Expose String as a bean (usually for a file path)-->
>>>>>> <!-- Picked up by Struts and set as location and anchor on a
>>>>>> redirect
>>>>>> and presented in url
>>>>>> If commented out this does not happen -->
>>>>>> <bean id="someFileName" class="java.lang.String">
>>>>>> <constructor-arg value="this is a java.lang.String bean in my
>>>>>>
>>>>> spring
>>>>
>>>>> context" />
>>>>>> </bean>
>>>>>>
>>>>>> <!-- action beans -->
>>>>>> <bean name ="simpleAction"
>>>>>>
>>>>> class="uk.co.marcusbond.action.SimpleAction"
>>>>
>>>>> scope="prototype" />
>>>>>> </beans>
>>>>>>
>>>>>> *Struts file:*
>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>> <!DOCTYPE struts PUBLIC
>>>>>> "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
>>>>>> "http://struts.apache.org/dtds/struts-2.0.dtd">
>>>>>> <struts>
>>>>>> <package name="simple" extends="struts-default">
>>>>>> <!-- returns success and shows index.html -->
>>>>>> <action name="simple"
>>>>>> class="simpleAction">
>>>>>> <result>index.html</result>
>>>>>> </action>
>>>>>>
>>>>>> <!-- redirects through the 'simple' action -->
>>>>>> <action name="simpleRedirect">
>>>>>> <result name="success" type="redirect">simple</result>
>>>>>> </action>
>>>>>> </package>
>>>>>> </struts>
>>>>>>
>>>>>> *Java class uk.co.marcusbond.action.SimpleAction*
>>>>>> package uk.co.marcusbond.action;
>>>>>>
>>>>>> public class SimpleAction {
>>>>>>
>>>>>> public String execute() {
>>>>>> return "success";
>>>>>> }
>>>>>> }
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>> __________ NOD32 6105 (20110508) Information __________
>>>>>
>>>>> This message was checked by NOD32 antivirus system.
>>>>> http://www.eset.com
>>>>>
>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>> For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>> For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>>
>>>>
>>>> __________ NOD32 6106 (20110509) Information __________
>>>>
>>>>
>>>> This message was checked by NOD32 antivirus system.
>>>> http://www.eset.com
>>>>
>>>>
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>> For additional commands, e-mail: user-help@struts.apache.org
>>>
>>>

Re: Strange behaviour with Spring

Posted by Andrew Lee <pl...@gmail.com>.
He's not using it as a java bean. Spring beans can be immutable.

Is it because when spring wires up your action it considers it to be a
parameter as you have get and set methods? So it appends it to the url. If
you inject t string bean via constructor injection and not via setter
injection and remove the getters and setters ,does that work?
On 9 May 2011 16:54, "Chris Pratt" <th...@gmail.com> wrote:
> Even if Spring considers it valid, that doesn't mean that other packages
> will be able to treat immutable, non-JavaBeans as JavaBeans.
> (*Chris*)
>
> On Mon, May 9, 2011 at 3:39 AM, Marcus <ma...@marcusbond.co.uk> wrote:
>
>> You can if you want to use a String as a Spring bean, it's a different
>> issue as to whether or not it is considered best practice or whether
there
>> are alternatives. You can find examples on the SpringSource forum if you
>> want, commented upon by Springy folk. It is perfectly valid to do so..
>>
>> Sorry to sound off here but could input to the topic be constrained to
why
>> it might be that Struts somehow messes up the redirect by picking this
bean
>> up even though there are no references to it an any of the struts action
>> beans or in the struts.xml.. I think we can infer from this that if any
>> context file, regardless of purpose (related to Struts, data access or
any
>> other whatever) declared a String as a bean this will mess struts
redirects
>> up.. which is something that shouldn't happen.
>>
>>
>>
>>
>> On 09/05/2011 11:16, Ilya Kazakevich wrote:
>>
>>> Not sure you can use primitive wrappers and strings as spring beans. For
>>> example autowiring does not work for them.
>>> Try the following:
>>>
>>> 1) inject literal directly
>>> Instead of
>>> <property ref="myString"
>>> Try
>>> <property value="myStringContent"
>>>
>>> 2) Create your own wrapper for string like Configuration class with
method
>>> getMyProperty
>>>
>>>
>>> Ilya Kazakevich,
>>> Developer
>>> JetBrains Inc
>>> http://www.jetbrains.com
>>> "Develop with pleasure!"
>>>
>>> -----Original Message-----
>>> From: Marcus [mailto:marcus@marcusbond.co.uk]
>>> Sent: Monday, May 09, 2011 11:27 AM
>>> To: user@struts.apache.org
>>> Subject: Re: Strange behaviour with Spring
>>>
>>> Not sure what you mean, the bean I'm referring to is a Spring bean not a
>>> JavaBean (two unrelated concepts).. there is no requirement when using
>>> the Spring framework to not create Spring beans of type String.
>>>
>>> Regardless, this doesn't help explain why the String is being picked up
>>> by the Struts framework and set on the redirect when there is nothing in
>>> the configuration to indicate it should..
>>>
>>> On 09/05/2011 07:13, Chris Pratt wrote:
>>>
>>>> You can't create beans that implement java.lang.String, it's immutable
>>>> and
>>>> doesn't follow the bean spec.
>>>> (*Chris*)
>>>>
>>>> On Sun, May 8, 2011 at 2:11 PM, Marcus Bond<ma...@marcusbond.co.uk>
>>>>
>>> wrote:
>>>
>>>> Hi,
>>>>>
>>>>> I'm using Struts 2.2.3 and have observed some bizarre behavior when
>>>>> using
>>>>> Spring to provide my actions.. In order to simplify this and prove the
>>>>> problem I have created a project with a single static html file, and a
>>>>> single action in struts.xml which references a bean in my spring
context
>>>>> file.
>>>>>
>>>>> What basically happens is that if I declare a bean in my spring
context
>>>>> (bean unrelated toany struts action) that is of class java.lang.String
>>>>>
>>>> (as I
>>>
>>>> do for a log4j filepath) then when I perform a redirect in an action
>>>>>
>>>> mapping
>>>
>>>> this gets appended to the end of the url as the anchor.
>>>>>
>>>>> If I navigate to http://localhost:8080/My App/simpleRedirect
>>>>> the result is a reirect to the 'simple' action but note the url struts
>>>>>
>>>> has
>>>
>>>> redirected to:
>>>>>
>>>>>
>>>>>
>>>
http://localhost:8080/MyApp/simple#this%20is%20a%20java.lang.String%20bean%2
>>> 0in%20my%20spring%20context
>>>
>>>> For some reason the org.apache.struts2.dispatcher.ServletRedirectResult
>>>>> class is being instantiated by with the anchor and location
constructor
>>>>>
>>>> args
>>>
>>>> set to the value of my spring bean by the StrutsSpringObjectFactory
>>>>>
>>>>> If I remove the String bean from the spring contect then the url
behaves
>>>>>
>>>> as
>>>
>>>> normal, redirecting to:
>>>>> http://localhost:8080/MyApp/simple
>>>>>
>>>>> Have been scratching my head trying to find where this behaviour is
>>>>> happening but have run out of time.. is this a known issue?
>>>>>
>>>>> Files content:
>>>>> *Spring context file:*
>>>>>
>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>> xmlns:aop="http://www.springframework.org/schema/aop"
>>>>> xmlns:tx="http://www.springframework.org/schema/tx"
>>>>> xsi:schemaLocation="http://www.springframework.org/schema/beans
>>>>> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>>>>> http://www.springframework.org/schema/tx
>>>>> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
>>>>> http://www.springframework.org/schema/aop
>>>>> http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
>>>>>
>>>>> <!-- Expose String as a bean (usually for a file path)-->
>>>>> <!-- Picked up by Struts and set as location and anchor on a
>>>>> redirect
>>>>> and presented in url
>>>>> If commented out this does not happen -->
>>>>> <bean id="someFileName" class="java.lang.String">
>>>>> <constructor-arg value="this is a java.lang.String bean in my
>>>>>
>>>> spring
>>>
>>>> context" />
>>>>> </bean>
>>>>>
>>>>> <!-- action beans -->
>>>>> <bean name ="simpleAction"
>>>>>
>>>> class="uk.co.marcusbond.action.SimpleAction"
>>>
>>>> scope="prototype" />
>>>>> </beans>
>>>>>
>>>>> *Struts file:*
>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>> <!DOCTYPE struts PUBLIC
>>>>> "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
>>>>> "http://struts.apache.org/dtds/struts-2.0.dtd">
>>>>> <struts>
>>>>> <package name="simple" extends="struts-default">
>>>>> <!-- returns success and shows index.html -->
>>>>> <action name="simple"
>>>>> class="simpleAction">
>>>>> <result>index.html</result>
>>>>> </action>
>>>>>
>>>>> <!-- redirects through the 'simple' action -->
>>>>> <action name="simpleRedirect">
>>>>> <result name="success" type="redirect">simple</result>
>>>>> </action>
>>>>> </package>
>>>>> </struts>
>>>>>
>>>>> *Java class uk.co.marcusbond.action.SimpleAction*
>>>>> package uk.co.marcusbond.action;
>>>>>
>>>>> public class SimpleAction {
>>>>>
>>>>> public String execute() {
>>>>> return "success";
>>>>> }
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>>
>>>> __________ NOD32 6105 (20110508) Information __________
>>>>
>>>> This message was checked by NOD32 antivirus system.
>>>> http://www.eset.com
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>> For additional commands, e-mail: user-help@struts.apache.org
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>> For additional commands, e-mail: user-help@struts.apache.org
>>>
>>>
>>>
>>> __________ NOD32 6106 (20110509) Information __________
>>>
>>>
>>> This message was checked by NOD32 antivirus system.
>>> http://www.eset.com
>>>
>>>
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>

RE: Strange behaviour with Spring

Posted by Ilya Kazakevich <Il...@JetBrains.com>.
Struts has nothing to do with java beans. Action does not have to be java
bean.  


Ilya Kazakevich,
Developer
JetBrains Inc
http://www.jetbrains.com
"Develop with pleasure!"

-----Original Message-----
From: Chris Pratt [mailto:thechrispratt@gmail.com] 
Sent: Monday, May 09, 2011 7:54 PM
To: Struts Users Mailing List
Subject: Re: Strange behaviour with Spring

Even if Spring considers it valid, that doesn't mean that other packages
will be able to treat immutable, non-JavaBeans as JavaBeans.
  (*Chris*)

On Mon, May 9, 2011 at 3:39 AM, Marcus <ma...@marcusbond.co.uk> wrote:

> You can if you want to use a String as a Spring bean, it's a different
> issue as to whether or not it is considered best practice or whether there
> are alternatives. You can find examples on the SpringSource forum if you
> want, commented upon by Springy folk. It is perfectly valid to do so..
>
> Sorry to sound off here but could input to the topic be constrained to why
> it might be that Struts somehow messes up the redirect by picking this
bean
> up even though there are no references to it an any of the struts action
> beans or in the struts.xml.. I think we can infer from this that if any
> context file, regardless of purpose (related to Struts, data access or any
> other whatever) declared a String as a bean this will mess struts
redirects
> up.. which is something that shouldn't happen.
>
>
>
>
> On 09/05/2011 11:16, Ilya Kazakevich wrote:
>
>> Not sure you can use primitive wrappers and strings as spring beans. For
>> example autowiring does not work for them.
>> Try the following:
>>
>> 1) inject literal directly
>> Instead of
>> <property ref="myString"
>> Try
>> <property value="myStringContent"
>>
>> 2) Create your own wrapper for string like Configuration class with
method
>> getMyProperty
>>
>>
>> Ilya Kazakevich,
>> Developer
>> JetBrains Inc
>> http://www.jetbrains.com
>> "Develop with pleasure!"
>>
>> -----Original Message-----
>> From: Marcus [mailto:marcus@marcusbond.co.uk]
>> Sent: Monday, May 09, 2011 11:27 AM
>> To: user@struts.apache.org
>> Subject: Re: Strange behaviour with Spring
>>
>> Not sure what you mean, the bean I'm referring to is a Spring bean not a
>> JavaBean (two unrelated concepts).. there is no requirement when using
>> the Spring framework to not create Spring beans of type String.
>>
>> Regardless, this doesn't help explain why the String is being picked up
>> by the Struts framework and set on the redirect when there is nothing in
>> the configuration to indicate it should..
>>
>> On 09/05/2011 07:13, Chris Pratt wrote:
>>
>>> You can't create beans that implement java.lang.String, it's immutable
>>> and
>>> doesn't follow the bean spec.
>>>    (*Chris*)
>>>
>>> On Sun, May 8, 2011 at 2:11 PM, Marcus Bond<ma...@marcusbond.co.uk>
>>>
>> wrote:
>>
>>> Hi,
>>>>
>>>> I'm using Struts 2.2.3 and have observed some bizarre behavior when
>>>> using
>>>> Spring to provide my actions.. In order to simplify this and prove the
>>>> problem I have created a project with a single static html file, and a
>>>> single action in struts.xml which references a bean in my spring
context
>>>> file.
>>>>
>>>> What basically happens is that if I declare a bean in my spring context
>>>> (bean unrelated toany struts action) that is of class java.lang.String
>>>>
>>> (as I
>>
>>> do for a log4j filepath) then when I perform a redirect in an action
>>>>
>>> mapping
>>
>>> this gets appended to the end of the url as the anchor.
>>>>
>>>> If I navigate to http://localhost:8080/My App/simpleRedirect
>>>> the result is a reirect to the 'simple' action but note the url struts
>>>>
>>> has
>>
>>> redirected to:
>>>>
>>>>
>>>>
>>
http://localhost:8080/MyApp/simple#this%20is%20a%20java.lang.String%20bean%2
>> 0in%20my%20spring%20context
>>
>>> For some reason the org.apache.struts2.dispatcher.ServletRedirectResult
>>>> class is being instantiated by with the anchor and location constructor
>>>>
>>> args
>>
>>> set to the value of my spring bean by the StrutsSpringObjectFactory
>>>>
>>>> If I remove the String bean from the spring contect then the url
behaves
>>>>
>>> as
>>
>>> normal, redirecting to:
>>>> http://localhost:8080/MyApp/simple
>>>>
>>>> Have been scratching my head trying to find where this behaviour is
>>>> happening but have run out of time.. is this a known issue?
>>>>
>>>> Files content:
>>>> *Spring context file:*
>>>>
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>>>         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>         xmlns:aop="http://www.springframework.org/schema/aop"
>>>>     xmlns:tx="http://www.springframework.org/schema/tx"
>>>>     xsi:schemaLocation="http://www.springframework.org/schema/beans
>>>> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>>>>                         http://www.springframework.org/schema/tx
>>>> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
>>>>                         http://www.springframework.org/schema/aop
>>>> http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
>>>>
>>>>     <!-- Expose String as a bean (usually for a file path)-->
>>>>     <!-- Picked up by Struts and set as location and anchor on a
>>>> redirect
>>>> and presented in url
>>>>         If commented out this does not happen -->
>>>>     <bean id="someFileName" class="java.lang.String">
>>>>         <constructor-arg value="this is a java.lang.String bean in my
>>>>
>>> spring
>>
>>> context" />
>>>>     </bean>
>>>>
>>>>     <!--  action beans -->
>>>>     <bean name ="simpleAction"
>>>>
>>> class="uk.co.marcusbond.action.SimpleAction"
>>
>>> scope="prototype" />
>>>> </beans>
>>>>
>>>> *Struts file:*
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <!DOCTYPE struts PUBLIC
>>>>     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
>>>>     "http://struts.apache.org/dtds/struts-2.0.dtd">
>>>> <struts>
>>>>     <package name="simple" extends="struts-default">
>>>>         <!-- returns success and shows index.html -->
>>>>         <action name="simple"
>>>>             class="simpleAction">
>>>>             <result>index.html</result>
>>>>         </action>
>>>>
>>>>         <!-- redirects through the 'simple' action -->
>>>>         <action name="simpleRedirect">
>>>>                 <result name="success" type="redirect">simple</result>
>>>>         </action>
>>>>     </package>
>>>> </struts>
>>>>
>>>> *Java class uk.co.marcusbond.action.SimpleAction*
>>>> package uk.co.marcusbond.action;
>>>>
>>>> public class SimpleAction  {
>>>>
>>>>     public String execute() {
>>>>         return "success";
>>>>     }
>>>> }
>>>>
>>>>
>>>>
>>>>
>>> __________ NOD32 6105 (20110508) Information __________
>>>
>>> This message was checked by NOD32 antivirus system.
>>> http://www.eset.com
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>>
>> __________ NOD32 6106 (20110509) Information __________
>>
>>
>> This message was checked by NOD32 antivirus system.
>> http://www.eset.com
>>
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Strange behaviour with Spring

Posted by Chris Pratt <th...@gmail.com>.
Even if Spring considers it valid, that doesn't mean that other packages
will be able to treat immutable, non-JavaBeans as JavaBeans.
  (*Chris*)

On Mon, May 9, 2011 at 3:39 AM, Marcus <ma...@marcusbond.co.uk> wrote:

> You can if you want to use a String as a Spring bean, it's a different
> issue as to whether or not it is considered best practice or whether there
> are alternatives. You can find examples on the SpringSource forum if you
> want, commented upon by Springy folk. It is perfectly valid to do so..
>
> Sorry to sound off here but could input to the topic be constrained to why
> it might be that Struts somehow messes up the redirect by picking this bean
> up even though there are no references to it an any of the struts action
> beans or in the struts.xml.. I think we can infer from this that if any
> context file, regardless of purpose (related to Struts, data access or any
> other whatever) declared a String as a bean this will mess struts redirects
> up.. which is something that shouldn't happen.
>
>
>
>
> On 09/05/2011 11:16, Ilya Kazakevich wrote:
>
>> Not sure you can use primitive wrappers and strings as spring beans. For
>> example autowiring does not work for them.
>> Try the following:
>>
>> 1) inject literal directly
>> Instead of
>> <property ref="myString"
>> Try
>> <property value="myStringContent"
>>
>> 2) Create your own wrapper for string like Configuration class with method
>> getMyProperty
>>
>>
>> Ilya Kazakevich,
>> Developer
>> JetBrains Inc
>> http://www.jetbrains.com
>> "Develop with pleasure!"
>>
>> -----Original Message-----
>> From: Marcus [mailto:marcus@marcusbond.co.uk]
>> Sent: Monday, May 09, 2011 11:27 AM
>> To: user@struts.apache.org
>> Subject: Re: Strange behaviour with Spring
>>
>> Not sure what you mean, the bean I'm referring to is a Spring bean not a
>> JavaBean (two unrelated concepts).. there is no requirement when using
>> the Spring framework to not create Spring beans of type String.
>>
>> Regardless, this doesn't help explain why the String is being picked up
>> by the Struts framework and set on the redirect when there is nothing in
>> the configuration to indicate it should..
>>
>> On 09/05/2011 07:13, Chris Pratt wrote:
>>
>>> You can't create beans that implement java.lang.String, it's immutable
>>> and
>>> doesn't follow the bean spec.
>>>    (*Chris*)
>>>
>>> On Sun, May 8, 2011 at 2:11 PM, Marcus Bond<ma...@marcusbond.co.uk>
>>>
>> wrote:
>>
>>> Hi,
>>>>
>>>> I'm using Struts 2.2.3 and have observed some bizarre behavior when
>>>> using
>>>> Spring to provide my actions.. In order to simplify this and prove the
>>>> problem I have created a project with a single static html file, and a
>>>> single action in struts.xml which references a bean in my spring context
>>>> file.
>>>>
>>>> What basically happens is that if I declare a bean in my spring context
>>>> (bean unrelated toany struts action) that is of class java.lang.String
>>>>
>>> (as I
>>
>>> do for a log4j filepath) then when I perform a redirect in an action
>>>>
>>> mapping
>>
>>> this gets appended to the end of the url as the anchor.
>>>>
>>>> If I navigate to http://localhost:8080/My App/simpleRedirect
>>>> the result is a reirect to the 'simple' action but note the url struts
>>>>
>>> has
>>
>>> redirected to:
>>>>
>>>>
>>>>
>> http://localhost:8080/MyApp/simple#this%20is%20a%20java.lang.String%20bean%2
>> 0in%20my%20spring%20context
>>
>>> For some reason the org.apache.struts2.dispatcher.ServletRedirectResult
>>>> class is being instantiated by with the anchor and location constructor
>>>>
>>> args
>>
>>> set to the value of my spring bean by the StrutsSpringObjectFactory
>>>>
>>>> If I remove the String bean from the spring contect then the url behaves
>>>>
>>> as
>>
>>> normal, redirecting to:
>>>> http://localhost:8080/MyApp/simple
>>>>
>>>> Have been scratching my head trying to find where this behaviour is
>>>> happening but have run out of time.. is this a known issue?
>>>>
>>>> Files content:
>>>> *Spring context file:*
>>>>
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>>>         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>         xmlns:aop="http://www.springframework.org/schema/aop"
>>>>     xmlns:tx="http://www.springframework.org/schema/tx"
>>>>     xsi:schemaLocation="http://www.springframework.org/schema/beans
>>>> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>>>>                         http://www.springframework.org/schema/tx
>>>> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
>>>>                         http://www.springframework.org/schema/aop
>>>> http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
>>>>
>>>>     <!-- Expose String as a bean (usually for a file path)-->
>>>>     <!-- Picked up by Struts and set as location and anchor on a
>>>> redirect
>>>> and presented in url
>>>>         If commented out this does not happen -->
>>>>     <bean id="someFileName" class="java.lang.String">
>>>>         <constructor-arg value="this is a java.lang.String bean in my
>>>>
>>> spring
>>
>>> context" />
>>>>     </bean>
>>>>
>>>>     <!--  action beans -->
>>>>     <bean name ="simpleAction"
>>>>
>>> class="uk.co.marcusbond.action.SimpleAction"
>>
>>> scope="prototype" />
>>>> </beans>
>>>>
>>>> *Struts file:*
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <!DOCTYPE struts PUBLIC
>>>>     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
>>>>     "http://struts.apache.org/dtds/struts-2.0.dtd">
>>>> <struts>
>>>>     <package name="simple" extends="struts-default">
>>>>         <!-- returns success and shows index.html -->
>>>>         <action name="simple"
>>>>             class="simpleAction">
>>>>             <result>index.html</result>
>>>>         </action>
>>>>
>>>>         <!-- redirects through the 'simple' action -->
>>>>         <action name="simpleRedirect">
>>>>                 <result name="success" type="redirect">simple</result>
>>>>         </action>
>>>>     </package>
>>>> </struts>
>>>>
>>>> *Java class uk.co.marcusbond.action.SimpleAction*
>>>> package uk.co.marcusbond.action;
>>>>
>>>> public class SimpleAction  {
>>>>
>>>>     public String execute() {
>>>>         return "success";
>>>>     }
>>>> }
>>>>
>>>>
>>>>
>>>>
>>> __________ NOD32 6105 (20110508) Information __________
>>>
>>> This message was checked by NOD32 antivirus system.
>>> http://www.eset.com
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>>
>> __________ NOD32 6106 (20110509) Information __________
>>
>>
>> This message was checked by NOD32 antivirus system.
>> http://www.eset.com
>>
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

Re: Strange behaviour with Spring

Posted by Marcus <ma...@marcusbond.co.uk>.
You can if you want to use a String as a Spring bean, it's a different 
issue as to whether or not it is considered best practice or whether 
there are alternatives. You can find examples on the SpringSource forum 
if you want, commented upon by Springy folk. It is perfectly valid to do 
so..

Sorry to sound off here but could input to the topic be constrained to 
why it might be that Struts somehow messes up the redirect by picking 
this bean up even though there are no references to it an any of the 
struts action beans or in the struts.xml.. I think we can infer from 
this that if any context file, regardless of purpose (related to Struts, 
data access or any other whatever) declared a String as a bean this will 
mess struts redirects up.. which is something that shouldn't happen.



On 09/05/2011 11:16, Ilya Kazakevich wrote:
> Not sure you can use primitive wrappers and strings as spring beans. For
> example autowiring does not work for them.
> Try the following:
>
> 1) inject literal directly
> Instead of
> <property ref="myString"
> Try
> <property value="myStringContent"
>
> 2) Create your own wrapper for string like Configuration class with method
> getMyProperty
>
>
> Ilya Kazakevich,
> Developer
> JetBrains Inc
> http://www.jetbrains.com
> "Develop with pleasure!"
>
> -----Original Message-----
> From: Marcus [mailto:marcus@marcusbond.co.uk]
> Sent: Monday, May 09, 2011 11:27 AM
> To: user@struts.apache.org
> Subject: Re: Strange behaviour with Spring
>
> Not sure what you mean, the bean I'm referring to is a Spring bean not a
> JavaBean (two unrelated concepts).. there is no requirement when using
> the Spring framework to not create Spring beans of type String.
>
> Regardless, this doesn't help explain why the String is being picked up
> by the Struts framework and set on the redirect when there is nothing in
> the configuration to indicate it should..
>
> On 09/05/2011 07:13, Chris Pratt wrote:
>> You can't create beans that implement java.lang.String, it's immutable and
>> doesn't follow the bean spec.
>>     (*Chris*)
>>
>> On Sun, May 8, 2011 at 2:11 PM, Marcus Bond<ma...@marcusbond.co.uk>
> wrote:
>>> Hi,
>>>
>>> I'm using Struts 2.2.3 and have observed some bizarre behavior when using
>>> Spring to provide my actions.. In order to simplify this and prove the
>>> problem I have created a project with a single static html file, and a
>>> single action in struts.xml which references a bean in my spring context
>>> file.
>>>
>>> What basically happens is that if I declare a bean in my spring context
>>> (bean unrelated toany struts action) that is of class java.lang.String
> (as I
>>> do for a log4j filepath) then when I perform a redirect in an action
> mapping
>>> this gets appended to the end of the url as the anchor.
>>>
>>> If I navigate to http://localhost:8080/My App/simpleRedirect
>>> the result is a reirect to the 'simple' action but note the url struts
> has
>>> redirected to:
>>>
>>>
> http://localhost:8080/MyApp/simple#this%20is%20a%20java.lang.String%20bean%2
> 0in%20my%20spring%20context
>>> For some reason the org.apache.struts2.dispatcher.ServletRedirectResult
>>> class is being instantiated by with the anchor and location constructor
> args
>>> set to the value of my spring bean by the StrutsSpringObjectFactory
>>>
>>> If I remove the String bean from the spring contect then the url behaves
> as
>>> normal, redirecting to:
>>> http://localhost:8080/MyApp/simple
>>>
>>> Have been scratching my head trying to find where this behaviour is
>>> happening but have run out of time.. is this a known issue?
>>>
>>> Files content:
>>> *Spring context file:*
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>>          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>          xmlns:aop="http://www.springframework.org/schema/aop"
>>>      xmlns:tx="http://www.springframework.org/schema/tx"
>>>      xsi:schemaLocation="http://www.springframework.org/schema/beans
>>> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>>>                          http://www.springframework.org/schema/tx
>>> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
>>>                          http://www.springframework.org/schema/aop
>>> http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
>>>
>>>      <!-- Expose String as a bean (usually for a file path)-->
>>>      <!-- Picked up by Struts and set as location and anchor on a redirect
>>> and presented in url
>>>          If commented out this does not happen -->
>>>      <bean id="someFileName" class="java.lang.String">
>>>          <constructor-arg value="this is a java.lang.String bean in my
> spring
>>> context" />
>>>      </bean>
>>>
>>>      <!--  action beans -->
>>>      <bean name ="simpleAction"
> class="uk.co.marcusbond.action.SimpleAction"
>>> scope="prototype" />
>>> </beans>
>>>
>>> *Struts file:*
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <!DOCTYPE struts PUBLIC
>>>      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
>>>      "http://struts.apache.org/dtds/struts-2.0.dtd">
>>> <struts>
>>>      <package name="simple" extends="struts-default">
>>>          <!-- returns success and shows index.html -->
>>>          <action name="simple"
>>>              class="simpleAction">
>>>              <result>index.html</result>
>>>          </action>
>>>
>>>          <!-- redirects through the 'simple' action -->
>>>          <action name="simpleRedirect">
>>>                  <result name="success" type="redirect">simple</result>
>>>          </action>
>>>      </package>
>>> </struts>
>>>
>>> *Java class uk.co.marcusbond.action.SimpleAction*
>>> package uk.co.marcusbond.action;
>>>
>>> public class SimpleAction  {
>>>
>>>      public String execute() {
>>>          return "success";
>>>      }
>>> }
>>>
>>>
>>>
>>
>> __________ NOD32 6105 (20110508) Information __________
>>
>> This message was checked by NOD32 antivirus system.
>> http://www.eset.com
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>
>
> __________ NOD32 6106 (20110509) Information __________
>
> This message was checked by NOD32 antivirus system.
> http://www.eset.com
>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: Strange behaviour with Spring

Posted by Ilya Kazakevich <Il...@JetBrains.com>.
Not sure you can use primitive wrappers and strings as spring beans. For
example autowiring does not work for them. 
Try the following:

1) inject literal directly
Instead of
<property ref="myString"
Try
<property value="myStringContent"

2) Create your own wrapper for string like Configuration class with method
getMyProperty


Ilya Kazakevich,
Developer
JetBrains Inc
http://www.jetbrains.com
"Develop with pleasure!"

-----Original Message-----
From: Marcus [mailto:marcus@marcusbond.co.uk] 
Sent: Monday, May 09, 2011 11:27 AM
To: user@struts.apache.org
Subject: Re: Strange behaviour with Spring

Not sure what you mean, the bean I'm referring to is a Spring bean not a 
JavaBean (two unrelated concepts).. there is no requirement when using 
the Spring framework to not create Spring beans of type String.

Regardless, this doesn't help explain why the String is being picked up 
by the Struts framework and set on the redirect when there is nothing in 
the configuration to indicate it should..

On 09/05/2011 07:13, Chris Pratt wrote:
> You can't create beans that implement java.lang.String, it's immutable and
> doesn't follow the bean spec.
>    (*Chris*)
>
> On Sun, May 8, 2011 at 2:11 PM, Marcus Bond<ma...@marcusbond.co.uk>
wrote:
>
>> Hi,
>>
>> I'm using Struts 2.2.3 and have observed some bizarre behavior when using
>> Spring to provide my actions.. In order to simplify this and prove the
>> problem I have created a project with a single static html file, and a
>> single action in struts.xml which references a bean in my spring context
>> file.
>>
>> What basically happens is that if I declare a bean in my spring context
>> (bean unrelated toany struts action) that is of class java.lang.String
(as I
>> do for a log4j filepath) then when I perform a redirect in an action
mapping
>> this gets appended to the end of the url as the anchor.
>>
>> If I navigate to http://localhost:8080/My App/simpleRedirect
>> the result is a reirect to the 'simple' action but note the url struts
has
>> redirected to:
>>
>>
http://localhost:8080/MyApp/simple#this%20is%20a%20java.lang.String%20bean%2
0in%20my%20spring%20context
>>
>> For some reason the org.apache.struts2.dispatcher.ServletRedirectResult
>> class is being instantiated by with the anchor and location constructor
args
>> set to the value of my spring bean by the StrutsSpringObjectFactory
>>
>> If I remove the String bean from the spring contect then the url behaves
as
>> normal, redirecting to:
>> http://localhost:8080/MyApp/simple
>>
>> Have been scratching my head trying to find where this behaviour is
>> happening but have run out of time.. is this a known issue?
>>
>> Files content:
>> *Spring context file:*
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <beans xmlns="http://www.springframework.org/schema/beans"
>>         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>         xmlns:aop="http://www.springframework.org/schema/aop"
>>     xmlns:tx="http://www.springframework.org/schema/tx"
>>     xsi:schemaLocation="http://www.springframework.org/schema/beans
>> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>>                         http://www.springframework.org/schema/tx
>> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
>>                         http://www.springframework.org/schema/aop
>> http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
>>
>>     <!-- Expose String as a bean (usually for a file path)-->
>>     <!-- Picked up by Struts and set as location and anchor on a redirect
>> and presented in url
>>         If commented out this does not happen -->
>>     <bean id="someFileName" class="java.lang.String">
>>         <constructor-arg value="this is a java.lang.String bean in my
spring
>> context" />
>>     </bean>
>>
>>     <!--  action beans -->
>>     <bean name ="simpleAction"
class="uk.co.marcusbond.action.SimpleAction"
>> scope="prototype" />
>> </beans>
>>
>> *Struts file:*
>> <?xml version="1.0" encoding="UTF-8"?>
>> <!DOCTYPE struts PUBLIC
>>     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
>>     "http://struts.apache.org/dtds/struts-2.0.dtd">
>> <struts>
>>     <package name="simple" extends="struts-default">
>>         <!-- returns success and shows index.html -->
>>         <action name="simple"
>>             class="simpleAction">
>>             <result>index.html</result>
>>         </action>
>>
>>         <!-- redirects through the 'simple' action -->
>>         <action name="simpleRedirect">
>>                 <result name="success" type="redirect">simple</result>
>>         </action>
>>     </package>
>> </struts>
>>
>> *Java class uk.co.marcusbond.action.SimpleAction*
>> package uk.co.marcusbond.action;
>>
>> public class SimpleAction  {
>>
>>     public String execute() {
>>         return "success";
>>     }
>> }
>>
>>
>>
>
>
> __________ NOD32 6105 (20110508) Information __________
>
> This message was checked by NOD32 antivirus system.
> http://www.eset.com
>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Strange behaviour with Spring

Posted by Marcus <ma...@marcusbond.co.uk>.
Not sure what you mean, the bean I'm referring to is a Spring bean not a 
JavaBean (two unrelated concepts).. there is no requirement when using 
the Spring framework to not create Spring beans of type String.

Regardless, this doesn't help explain why the String is being picked up 
by the Struts framework and set on the redirect when there is nothing in 
the configuration to indicate it should..

On 09/05/2011 07:13, Chris Pratt wrote:
> You can't create beans that implement java.lang.String, it's immutable and
> doesn't follow the bean spec.
>    (*Chris*)
>
> On Sun, May 8, 2011 at 2:11 PM, Marcus Bond<ma...@marcusbond.co.uk>  wrote:
>
>> Hi,
>>
>> I'm using Struts 2.2.3 and have observed some bizarre behavior when using
>> Spring to provide my actions.. In order to simplify this and prove the
>> problem I have created a project with a single static html file, and a
>> single action in struts.xml which references a bean in my spring context
>> file.
>>
>> What basically happens is that if I declare a bean in my spring context
>> (bean unrelated toany struts action) that is of class java.lang.String (as I
>> do for a log4j filepath) then when I perform a redirect in an action mapping
>> this gets appended to the end of the url as the anchor.
>>
>> If I navigate to http://localhost:8080/My App/simpleRedirect
>> the result is a reirect to the 'simple' action but note the url struts has
>> redirected to:
>>
>> http://localhost:8080/MyApp/simple#this%20is%20a%20java.lang.String%20bean%20in%20my%20spring%20context
>>
>> For some reason the org.apache.struts2.dispatcher.ServletRedirectResult
>> class is being instantiated by with the anchor and location constructor args
>> set to the value of my spring bean by the StrutsSpringObjectFactory
>>
>> If I remove the String bean from the spring contect then the url behaves as
>> normal, redirecting to:
>> http://localhost:8080/MyApp/simple
>>
>> Have been scratching my head trying to find where this behaviour is
>> happening but have run out of time.. is this a known issue?
>>
>> Files content:
>> *Spring context file:*
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <beans xmlns="http://www.springframework.org/schema/beans"
>>         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>         xmlns:aop="http://www.springframework.org/schema/aop"
>>     xmlns:tx="http://www.springframework.org/schema/tx"
>>     xsi:schemaLocation="http://www.springframework.org/schema/beans
>> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>>                         http://www.springframework.org/schema/tx
>> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
>>                         http://www.springframework.org/schema/aop
>> http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
>>
>>     <!-- Expose String as a bean (usually for a file path)-->
>>     <!-- Picked up by Struts and set as location and anchor on a redirect
>> and presented in url
>>         If commented out this does not happen -->
>>     <bean id="someFileName" class="java.lang.String">
>>         <constructor-arg value="this is a java.lang.String bean in my spring
>> context" />
>>     </bean>
>>
>>     <!--  action beans -->
>>     <bean name ="simpleAction" class="uk.co.marcusbond.action.SimpleAction"
>> scope="prototype" />
>> </beans>
>>
>> *Struts file:*
>> <?xml version="1.0" encoding="UTF-8"?>
>> <!DOCTYPE struts PUBLIC
>>     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
>>     "http://struts.apache.org/dtds/struts-2.0.dtd">
>> <struts>
>>     <package name="simple" extends="struts-default">
>>         <!-- returns success and shows index.html -->
>>         <action name="simple"
>>             class="simpleAction">
>>             <result>index.html</result>
>>         </action>
>>
>>         <!-- redirects through the 'simple' action -->
>>         <action name="simpleRedirect">
>>                 <result name="success" type="redirect">simple</result>
>>         </action>
>>     </package>
>> </struts>
>>
>> *Java class uk.co.marcusbond.action.SimpleAction*
>> package uk.co.marcusbond.action;
>>
>> public class SimpleAction  {
>>
>>     public String execute() {
>>         return "success";
>>     }
>> }
>>
>>
>>
>
>
> __________ NOD32 6105 (20110508) Information __________
>
> This message was checked by NOD32 antivirus system.
> http://www.eset.com
>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Strange behaviour with Spring

Posted by Chris Pratt <th...@gmail.com>.
You can't create beans that implement java.lang.String, it's immutable and
doesn't follow the bean spec.
  (*Chris*)

On Sun, May 8, 2011 at 2:11 PM, Marcus Bond <ma...@marcusbond.co.uk> wrote:

> Hi,
>
> I'm using Struts 2.2.3 and have observed some bizarre behavior when using
> Spring to provide my actions.. In order to simplify this and prove the
> problem I have created a project with a single static html file, and a
> single action in struts.xml which references a bean in my spring context
> file.
>
> What basically happens is that if I declare a bean in my spring context
> (bean unrelated toany struts action) that is of class java.lang.String (as I
> do for a log4j filepath) then when I perform a redirect in an action mapping
> this gets appended to the end of the url as the anchor.
>
> If I navigate to http://localhost:8080/My App/simpleRedirect
> the result is a reirect to the 'simple' action but note the url struts has
> redirected to:
>
> http://localhost:8080/MyApp/simple#this%20is%20a%20java.lang.String%20bean%20in%20my%20spring%20context
>
> For some reason the org.apache.struts2.dispatcher.ServletRedirectResult
> class is being instantiated by with the anchor and location constructor args
> set to the value of my spring bean by the StrutsSpringObjectFactory
>
> If I remove the String bean from the spring contect then the url behaves as
> normal, redirecting to:
> http://localhost:8080/MyApp/simple
>
> Have been scratching my head trying to find where this behaviour is
> happening but have run out of time.. is this a known issue?
>
> Files content:
> *Spring context file:*
>
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans"
>        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>        xmlns:aop="http://www.springframework.org/schema/aop"
>    xmlns:tx="http://www.springframework.org/schema/tx"
>    xsi:schemaLocation="http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>                        http://www.springframework.org/schema/tx
> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
>                        http://www.springframework.org/schema/aop
> http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
>
>    <!-- Expose String as a bean (usually for a file path)-->
>    <!-- Picked up by Struts and set as location and anchor on a redirect
> and presented in url
>        If commented out this does not happen -->
>    <bean id="someFileName" class="java.lang.String">
>        <constructor-arg value="this is a java.lang.String bean in my spring
> context" />
>    </bean>
>
>    <!--  action beans -->
>    <bean name ="simpleAction" class="uk.co.marcusbond.action.SimpleAction"
> scope="prototype" />
> </beans>
>
> *Struts file:*
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE struts PUBLIC
>    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
>    "http://struts.apache.org/dtds/struts-2.0.dtd">
> <struts>
>    <package name="simple" extends="struts-default">
>        <!-- returns success and shows index.html -->
>        <action name="simple"
>            class="simpleAction">
>            <result>index.html</result>
>        </action>
>
>        <!-- redirects through the 'simple' action -->
>        <action name="simpleRedirect">
>                <result name="success" type="redirect">simple</result>
>        </action>
>    </package>
> </struts>
>
> *Java class uk.co.marcusbond.action.SimpleAction*
> package uk.co.marcusbond.action;
>
> public class SimpleAction  {
>
>    public String execute() {
>        return "success";
>    }
> }
>
>
>