struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From developer researcher <java.developer.researc...@gmail.com>
Subject Re: Problem using the Spring's AOP in Struts2's Actions with json-plugin
Date Thu, 11 May 2017 20:24:09 GMT
Of course Adam,

If no solution is found by configuration, there is to try other
alternatives without the json-plugin. As you indicate using the stream
result.

Thanks and regards.

2017-05-09 17:52 GMT-05:00 Adam Brin <abrin@digitalantiquity.org>:

> Hi,
>   I don't use the JSON plugin. My suggestion is, you're using a number of
> tools in a chain, one isn't working, so what's the minimum viable way out?
> Clearly something with the JSON plugin isn't working, so try and verify
> where the problem is and work around it.  Alternately, it might make sense
> to go grab the source of the JSON plugin and try and work through that.
>
> Here's how we handle JSON output, we use the stream result:
> https://struts.apache.org/docs/stream-result.html
>
> On Tue, May 9, 2017 at 2:41 PM, developer researcher <
> java.developer.researcher@gmail.com> wrote:
>
> > Hi Adam,
> >
> > I have not tried Jackson and the Spring AOP outside of Struts2. My
> context
> > is: modify a Struts web application (with spring-plugin and json-plugin)
> to
> > add some functionality (advices) through AOP. I would have to test in
> > another application to see if there is any problem between Jackson and
> > Spring AOP proxies.
> >
> > On the other hand, when you say "*We just set content-type to application
> > json*" Are you using json-plugin? In my case I have used both "text/html"
> > and "application/json" (using json-plugin) but in both cases the
> > serialization is executed by json-plugin automatically.
> >
> > According to the documentation, the results supported are
> > https://cwiki.apache.org/confluence/display/WW/Result+Types Have you
> > implemented a custom result?
> >
> > Thanks
> >
> >
> > 2017-05-08 21:38 GMT-05:00 Adam Brin <abrin@digitalantiquity.org>:
> >
> > > 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
> > >
> >
>
>
>
> --
> _________________________________________________________
> Adam Brin
> Director of Technology, Digital Antiquity
> 480.965.1278
>

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