struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Adam Brin <ab...@digitalantiquity.org>
Subject Re: Problem using the Spring's AOP in Struts2's Actions with json-plugin
Date Tue, 09 May 2017 02:38:18 GMT
We just set content-type to application json and output a stream or a
string.  In the action, I just convert the object to a stream.

But, here's the question:  does your spring AOP proxy work properly with
Jackson outside of struts2?



On Mon, May 8, 2017 at 7:14 PM, developer researcher <
java.developer.researcher@gmail.com> wrote:

> Hello Adam,
>
> Yes, I am using the "ignoreInterfaces" param set to "false". My result is:
> "@Result(name="success",type="json", params={"contentType", "text/html",
> "ignoreInterfaces", "false"})"
>
> The file "struts-2.5.10.1-all.zip" contains the jackson's jars, so I guess
> the json-plugin use jackson.In any case, how would you use your own
> serialization instead of the provided by json-plugin for actions that need
> AOP?
>
> In new tests, the problem is focused on actions with a json result.
>
> *1. For **results of **default **type:* If the class extends ActionSupport,
> it is necessary to use "CGLIB proxy", if the class does not extend from
> ActionSupport it is possible to use both "CGLIB proxy" and "JDK dynamic
> proxy".
> *2. For results of json **type **:* without AOP everything works fine, with
> AOP both using "JDK dynamic proxy" and "CGLIB proxy" the action is
> executed, the advice also but in both cases occurs the
> OperationNotSupportedException
>
> Thanks
>
>
> 2017-05-08 15:50 GMT-05:00 Adam Brin <abrin@digitalantiquity.org>:
>
> > Hi,
> >
> > I presume you’ve read this: https://struts.apache.org/
> > docs/json-plugin.html#JSONPlugin-Proxiedobjects
> >
> > It may be that the issue is not Struts2, but the JSON library that the
> > Struts2 Json plugin uses… and thus, you may need to handle the JSON
> > serialization using Jackson or another library.
> >
> >
> > - adam
> > --
> > _________________________________________________________
> > Adam Brin
> > Director of Technology, Digital Antiquity
> > 480.965.1278
> >
> > > On May 8, 2017, at 12:27 PM, developer researcher <
> > java.developer.researcher@gmail.com> wrote:
> > >
> > > Hello Martin,
> > >
> > > First of all thanks for the reply, but I'm not sure if my queries have
> > been
> > > understood. I am using Struts 2.5.10.1
> > >
> > > My main query is: *Is there a way to use Spring AOP in Struts2 Actions
> > > using the "JDK dynamic proxies"? Does anyone have an example?*
> > >
> > > Sorry, but I can not find any relationship between your answers and the
> > > exceptions attached in my previous message:
> > >
> > > *1. NoSuchMethodException:* The code I'm testing does not have anything
> > > from javax.sql.DataSource
> > >
> > > *2. OperationNotSupportedException:* Without using AOP there is no
> > > exception for some namespace. This is very strange because the code in
> > the
> > > advice is simply "System.out.println ()" for testing purposes.
> > >
> > > Thanks
> > >
> > >
> > > 2017-05-06 8:21 GMT-05:00 Martin Gainty <mgainty@hotmail.com>:
> > >
> > >> MG>below
> > >>
> > >> ________________________________
> > >> From: developer researcher <java.developer.researcher@gmail.com>
> > >> Sent: Friday, May 5, 2017 10:09 PM
> > >> To: Struts Users Mailing List
> > >> Subject: Problem using the Spring's AOP in Struts2's Actions with
> > >> json-plugin
> > >>
> > >> Hello,
> > >>
> > >> I am using Strust 2 <sp?> with spring-plugin and json-plugin to use:
> > >>
> > >> 1. Injection of dependencies: apparently everything is working well.
> > >> 2. Spring's AOP: works when applied over methods of injected objects
> in
> > >> the Struts Actions but not when applied over methods of actions (my
> > class
> > >> extends from ActionSupport and I use the @Action annotation at method
> > level)
> > >>
> > >> MG>spring does not know what ActionSupport as it is a Struts classes
> > >> besides which ActionSupport are not considered
> > >> MG>spring beans which are simple pojos with a no-arg constructor
> > >> https://docs.spring.io/spring/docs/current/spring-framework-
> > >> reference/html/beans.html
> > >> 7. The IoC container - Spring<https://docs.spring.io/
> > >> spring/docs/current/spring-framework-reference/html/beans.html>
> > >> docs.spring.io
> > >> As the preceding diagram shows, the Spring IoC container consumes a
> form
> > >> of configuration metadata; this configuration metadata represents how
> > you
> > >> as an application ...
> > >>
> > >>
> > >> This situation has generated the following questions:
> > >>
> > >> 1. Are the actions created and managed by Spring or Struts? It's
> > supposed
> > >> to be Spring, but I have this doubt because Spring's AOP is supposed
> to
> > >> work on Spring beans but in my case it does not work and because I do
> > not
> > >> use the Spring's @Component annotation in the Action class
> > >>
> > >> MG>correct but you can also specify a spring-bean in spring-beans.xml
> in
> > >> your classpath e.g.:
> > >> <bean id="springTest" name="springTest" class="org.struts.SpringTest"/
> >
> > >>
> > >> 2. Is there a way to use Spring AOP in Struts2 Actions using the "JDK
> > >> dynamic proxies"? I have tested with the following results:
> > >>
> > >> a) When Spring uses "JDK dynamic proxies" the Struts2 Action is not
> > >> executed and the following exception is thrown: NoSuchMethodException
> > (see
> > >> NoSuchMethodException.txt)
> > >> b) When Spring uses "CGLIB proxy" in an Action whose result is of the
> > >> default type: the Action works correctly
> > >> c) When Spring uses "CGLIB proxy" in an Action whose result is of type
> > >> json: the Struts2 Action is executed but the following exception is
> > thrown:
> > >> OperationNotSupportedException (see OperationNotSupportedException
> > .txt).
> > >> When I do not use AOP this Action works correctly.
> > >>
> > >> MG>builder.bind does not recognise json result-set as a valid
> > >> javax.sql.DataSource..here is an example of builder.bind
> > >> org.springframework.mock.jndi.SimpleNamingContextBuilder builder =
> new
> > >> org.springframework.mock.jndi.SimpleNamingContextBuilder();
> > >> * DataSource ds = new org.springframework.jdbc.datasource.
> > >> DriverManagerDataSource(...);
> > >> * builder.bind("java:comp/env/jdbc/myds", ds);
> > >>
> > >> MG>as of now JSON is not a valid javax.sql.DataSourceHere is Doc:
> > >> <p>In a J2EE container, it is recommended to use a JNDI DataSource
> > >> provided by
> > >> * the container. Such a javax.sql.DataSource can be exposed as a
> > >> javax.sql.DataSource bean in a Spring
> > >> * ApplicationContext via {@link org.springframework.jndi.
> > >> JndiObjectFactoryBean},
> > >> * for seamless switching to and from a local javax.sql.DataSource bean
> > >> like this class.
> > >> * For tests, you can then either set up a mock JNDI environment
> through
> > >> Spring's
> > >> * {@link org.springframework.mock.jndi.SimpleNamingContextBuilder},
> or
> > >> switch the
> > >> * bean definition to a local javax.sql.DataSource(which is simpler and
> > >> thus recommended).
> > >> *
> > >> * <p>If you need a "real" connection pool outside of a J2EE container,
> > >> consider
> > >> * <a href="http://commons.apache.org/proper/commons-dbcp">Apache
> > Commons
> > >> DBCP</a>
> > >> * or <a href="http://sourceforge.net/projects/c3p0">C3P0</a>.
> > >> * Commons DBCP's BasicDataSource and C3P0's ComboPooledDataSource are
> > full
> > >> * connection pool beans, supporting the same basic properties as this
> > >> class
> > >> * plus specific settings (such as minimal/maximal pool size etc).
> > >> mg>JSON is not yet a valid javax.sql.DataSource according to Spring
> > >>
> > >> MG>also you have not declared a namespace that NamingContext can
> > reference
> > >> which is causing exception
> > >>
> > >> MG>HTH
> > >>
> > >> Thanks
> > >>
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> > For additional commands, e-mail: user-help@struts.apache.org
> >
> >
>



-- 
_________________________________________________________
Adam Brin
Director of Technology, Digital Antiquity
480.965.1278

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message