> @Pointcut("within(org.apache.tiles.extras.renderer.OptionsRenderer) &&
call( * org.springframework..SpringWildcardServletTilesAppl
icationContext.getResources(..))")

This looks reasonable if the method getResources() is declared on "
org.springframework..SpringWildcardServletTilesApplicationContext" - if it
is declared further up the hierarchy I think you need to specify that
supertype. The call pointcut takes the declaring type. From the docs "A
common mistake is to specify a declaring type for the call pointcut that is
a subtype of the originally-declaring type." (
http://www.eclipse.org/aspectj/doc/next/progguide/semantics-pointcuts.html)

I hadn't appreciated you were weaving the spring mvc jar. If you are
weaving a jar there are many situations where it has to chase down type
references to determine it something isn't a match. In these situations it
effectively needs the classpath to contain everything that was used to
build the jar you are weaving.  But, if you are confident you are giving
the compiler all the references it needs to get the matches you want, you
can turn off the xlint warning for cant find type (and ignore them).

cheers,
Andy


On 20 November 2013 08:09, Eric B <ebenza...@gmail.com> wrote:

> I am weaving the spring-mvc jar, as the code I am trying to wrap is from
> the Spring-MVC jar.  I believe the equivalent of the maven configuration
> parameters
>
> <weaveDependencies>
> <weaveDependency>
>  <groupId>org.springframework</groupId>
> <artifactId>spring-webmvc</artifactId>
>  </weaveDependency>
> </weaveDependencies>
>
> is: ajc -inpath <path-to spring-mvc.jar>.
>
> So, I am expecting it to be weaving the Spring libraries.  I just do not
> understand why it is failing on those classes which do not call
> *.getResources().
>
>
> I do not seem to be able to properly figure out how to code the within()
> clause appropriately.  Can you please advise?  I am trying to create a
> pointcut
> around 
> org.springframework..SpringWildcardServletTilesApplicationContext.getResources(..)
> when called from within org.apache.tiles.extras.renderer.OptionsRenderer
> class.
>
> At the moment, my ugly if() condition checks the stacktrace to validate
> that OptionsRenderer is the calling method, as I was unable to figure out
> the correct syntax for getting the within() clause to work appropriately.
>
> I thought it would be: 
> @Pointcut("within(org.apache.tiles.extras.renderer.OptionsRenderer)
> && call( *
> org.springframework..SpringWildcardServletTilesApplicationContext.getResources(..))")
> but that does not seem to be accurate.
>
> Any advice would be appreciated.
>
> Thanks,
>
> Eric
>
>
> On Tue, Nov 19, 2013 at 8:40 PM, Andy Clement <andrew.clem...@gmail.com>wrote:
>
>> Seems a little odd it is saying it is weaving into Spring classes:
>>
>> "   when weaving type org.springframework.web.servlet.view.document.
>> AbstractPdfView"
>>
>> Are you somehow passing in more than the application? I don't speak maven
>> so can't comment directly on the pom contents.  You could include a
>> within() clause in your pointcut to limit it to the packages you really
>> know contain the calls then it won't be looking at all the calls made
>> everywhere.
>>
>> cheers,
>> Andy
>>
>>
>>
>> On 14 November 2013 19:58, Eric B <ebenza...@gmail.com> wrote:
>>
>>> I've got a Spring-MVC 3.2.4 mavenized project, where I've run into the
>>> need to weave an Aspect into a Spring-MVC class.  I'm able to run the
>>> aspect and the webapp through Eclipse without any problems (Tomcat), but
>>> when I try to package the war from the command line, AspectJ throws a whole
>>> bunch of weaving errors:
>>>
>>>     mvn compile
>>>     ...
>>>     ...
>>>     [ERROR] can't determine superclass of missing type
>>> com.lowagie.text.Document
>>>     when weaving type
>>> org.springframework.web.servlet.view.document.AbstractPdfView
>>>     when weaving classes
>>>     when weaving
>>>     when batch building BuildConfig[null] #Files=75 AopXmls=#0
>>>      [Xlint:cantFindType]
>>>     [ERROR] can't determine superclass of missing type
>>> com.lowagie.text.Document
>>>     when weaving type
>>> org.springframework.web.servlet.view.document.AbstractPdfView
>>>     when weaving classes
>>>     when weaving
>>>     when batch building BuildConfig[null] #Files=75 AopXmls=#0
>>>      [Xlint:cantFindType]
>>>     ...
>>>     ...
>>>     ...
>>>
>>> I have no com.lowagie.text.* dependencies listed in my pom, as I am not
>>> using and PDF stuff.  What I don't understand is why AspectJ can properly
>>> weave the class when running through Eclipse, but not when I try to compile
>>> it from the command line.
>>>
>>>
>>> pom.xml (relevant snippets - using aspectJ 1.7.3):
>>>
>>> <dependency>
>>> <groupId>org.aspectj</groupId>
>>>  <artifactId>aspectjrt</artifactId>
>>> <version>${aspectj.version}</version>
>>>  </dependency>
>>>  <dependency>
>>> <groupId>org.aspectj</groupId>
>>> <artifactId>aspectjweaver</artifactId>
>>>  <version>${aspectj.version}</version>
>>> </dependency>
>>>
>>>     ....
>>>     ....
>>>
>>> <plugin>
>>> <groupId>org.codehaus.mojo</groupId>
>>>  <artifactId>aspectj-maven-plugin</artifactId>
>>> <version>1.2</version>
>>> <!-- NB: do not use 1.3 or 1.3.x due to MASPECTJ-90 and do not use 1.4
>>>  due to declare parents issue -->
>>> <dependencies>
>>> <!-- NB: You must use Maven 2.0.9 or above or these are ignored (see
>>>  MNG-2972) -->
>>> <dependency>
>>> <groupId>org.aspectj</groupId>
>>>  <artifactId>aspectjrt</artifactId>
>>> <version>${aspectj.version}</version>
>>>  </dependency>
>>> <dependency>
>>> <groupId>org.aspectj</groupId>
>>>  <artifactId>aspectjtools</artifactId>
>>> <version>${aspectj.version}</version>
>>>  </dependency>
>>> </dependencies>
>>> <executions>
>>>  <execution>
>>> <goals>
>>> <goal>compile</goal>
>>>  <goal>test-compile</goal>
>>> </goals>
>>> </execution>
>>>  </executions>
>>> <configuration>
>>> <outxml>true</outxml>
>>>  <aspectLibraries>
>>> <aspectLibrary>
>>> <groupId>org.springframework</groupId>
>>>  <artifactId>spring-aspects</artifactId>
>>> </aspectLibrary>
>>> </aspectLibraries>
>>>  <weaveDependencies>
>>> <weaveDependency>
>>> <groupId>org.springframework</groupId>
>>>  <artifactId>spring-webmvc</artifactId>
>>> </weaveDependency>
>>> </weaveDependencies>
>>>  <source>${java.version}</source>
>>> <target>${java.version}</target>
>>> </configuration>
>>>  </plugin>
>>>
>>>
>>>
>>> The Aspect declaraion:
>>>
>>>     @Aspect
>>>     public class OptionsPatch {
>>>     @Pointcut("call( *
>>> org.springframework..SpringWildcardServletTilesApplicationContext.getResources(..))
>>> && if()")
>>>     public static boolean getResources(JoinPoint.EnclosingStaticPart
>>> esp) {
>>>     if( /* some condition here */ )
>>>     return true;
>>>     else
>>>     return false;
>>>     }
>>>
>>>
>>>     @Around("getResources(enc)")
>>>     public Object unboxIOException(ProceedingJoinPoint pjp,
>>> JoinPoint.EnclosingStaticPart enc) throws Throwable {
>>>     try {
>>>     return pjp.proceed();
>>>     } catch (IllegalArgumentException e) {
>>>     throw e;
>>>     }
>>>     }
>>>     }
>>>
>>>
>>>
>>> Do I have to write the pointcut in a more precise manner to avoid this
>>> problem?  Why does it work within the editor but not from the cmd line?
>>>
>>>
>>> Thanks,
>>>
>>> Eric
>>>
>>> _______________________________________________
>>> aspectj-users mailing list
>>> aspectj-users@eclipse.org
>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>>
>>>
>>
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@eclipse.org
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@eclipse.org
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>
_______________________________________________
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to