Example of event listeners does not work (Crowd plugin)
Asked by CARLOS MEDINA SANCHEZ:

Hi,

I'm trying to run the example of a Crowd plugin with Event Listeners but it does not work.

I see differences between the [official documentation](https://developer.atlassian.com/server/crowd/event-listeners/) and the [repository example](https://bitbucket.org/atlassianlabs/crowd-event-listener-example/). For example, in the repository there is no listener section in **atlassian-plugin.xml**.

I have replaced the "System.out.println" line with a slf4j logger, but it also does not print any logs when a user is created.

If I add the listener section in atlassian-plugin.xml, when I launch Crowd it returns an error of ClassNotFoundException:

```
2022-06-16 09:48:53,336 localhost-startStop-1 ERROR [atlassian.plugin.manager.DefaultPluginManager] There was an error loading the descriptor 'User Created Listener' of plugin 'com.atlassian.crowd.example.crowd-event-listener-example'. Disabling.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.atlassian.crowd.event.listener.example.UserCreatedListener': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.atlassian.crowd.event.listener.example.UserCreatedListener] from ClassLoader [com.atlassian.crowd.example.crowd-event-listener-example [28]]
at com.atlassian.crowd.console.listener.StartupListener.contextInitialized(StartupListener.java:101)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4705)
Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.atlassian.crowd.event.listener.example.UserCreatedListener] from ClassLoader [com.atlassian.crowd.example.crowd-event-listener-example [28]]
Caused by: java.lang.ClassNotFoundException: com.atlassian.crowd.event.user.UserCreatedEvent not found by com.atlassian.crowd.example.crowd-event-listener-example [28]
```

This is the source code (without the listener section):

**UserCreatedListener.java**

```
package com.atlassian.crowd.event.listener.example;

import com.atlassian.crowd.event.user.UserCreatedEvent;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UserCreatedListener{
    private static final Logger log = LoggerFactory.getLogger(UserCreatedListener.class);

    @com.atlassian.event.api.EventListener
    public void printUserCreatedEvent(UserCreatedEvent event) {
        log.debug("User " + event.getUser().getDisplayName() + " has been created.");
    }
}
```

**atlassian-plugin.xml**

```
<atlassian-plugin key="${project.groupId}.${project.artifactId}" name="${project.name}" plugins-version="2">
    <plugin-info>
        <description>${project.description}</description>
        <version>${project.version}</version>
        <vendor name="${project.organization.name}" url="${project.organization.url}" />
    </plugin-info>
</atlassian-plugin>
```

**pom.xml**

```
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.atlassian.crowd.event.listener.example</groupId>
    <artifactId>crowd-event-listener-example</artifactId>
    <version>1.0.1-SNAPSHOT</version>

    <organization>
        <name>Example Company</name>
        <url>http://www.example.com/</url>
    </organization>

    <name>event-listener-example</name>
    <description>This is an event listener plugin for Atlassian Crowd.</description>
    <packaging>atlassian-plugin</packaging>

    <repositories>
        <repository>
            <id>atlassian-public</id>
            <url>https://packages.atlassian.com/mvn/maven-external/</url>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
                <checksumPolicy>warn</checksumPolicy>
            </snapshots>
            <releases>
                <enabled>true</enabled>
                <checksumPolicy>warn</checksumPolicy>
            </releases>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>atlassian-public</id>
            <url>https://packages.atlassian.com/mvn/maven-external/</url>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
                <checksumPolicy>warn</checksumPolicy>
            </snapshots>
            <releases>
                <enabled>true</enabled>
                <checksumPolicy>warn</checksumPolicy>
            </releases>
        </pluginRepository>
    </pluginRepositories>

    <dependencies>
        <dependency>
            <groupId>com.atlassian.crowd</groupId>
            <artifactId>crowd-events</artifactId>
            <version>${crowd.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.event</groupId>
            <artifactId>atlassian-event</artifactId>
            <version>4.1.2</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.atlassian.maven.plugins</groupId>
                <artifactId>crowd-maven-plugin</artifactId>
                <version>8.2.3</version>
                <extensions>true</extensions>
                <configuration>
                    <productVersion>${crowd.version}</productVersion>
                    <productDataVersion>${crowd.data.version}</productDataVersion>
                    <enableQuickReload>true</enableQuickReload>

                    <instructions>
                        <Import-Package>
                            com.atlassian.event.*
                        </Import-Package>
                    </instructions>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <properties>
        <crowd.version>4.3.5</crowd.version>
        <crowd.data.version>4.1.10</crowd.data.version>
    </properties>
</project>
```

Thanks!


Answers:
author: Penn
body: [@CARLOS MEDINA SANCHEZ](/t5/user/viewprofilepage/user-id/1348990) Did you resolve your issue? I'm running into the same problem myself. I cannot get the example to build, even with attempting to use some of the hacks provided.

When I add in the listener to the atlassian-plugin.xml I immediately get crashes like you do.

All I did was clone the example package, add the listeners to the atlassian-plugin.xml, added logging to my source files and then ran "atlas-package"

comments: author: Penn
body: [@CARLOS MEDINA SANCHEZ](/t5/user/viewprofilepage/user-id/1348990) I solved my issue. borrowing some code from other working examples, I found I had to include the below information into the POM.XML

```
<plugin>

<groupId>com.atlassian.maven.plugins</groupId>

<artifactId>crowd-maven-plugin</artifactId>

<version>8.2.3</version>

<!-- <version>8.4.2</version> -->

<extensions>true</extensions>

<configuration>

<productVersion>${crowd.version}</productVersion>

<productDataVersion>${crowd.data.version}</productDataVersion>

<enableQuickReload>true</enableQuickReload>

<instructions>

<Import-Package>

 org.springframework.osgi.*;resolution:="optional", 

 org.eclipse.gemini.blueprint.*;resolution:="optional", 

 *;resolution:="optional",

 com.atlassian.event.*

</Import-Package>

</instructions>

</configuration>

</plugin>
```


author: Roman Kovalov
body: Hey [@CARLOS MEDINA SANCHEZ](/t5/user/viewprofilepage/user-id/1348990) and welcome to the community!

I tried to download and run this [example](https://bitbucket.org/atlassianlabs/crowd-event-listener-example/src) and have same problem as you have: ClassNotFoundException, when I was running my Crowd.

I can describe my way to solve this issue:  
1) I created my custom crowd plugin with command:  

    atlas-create-crowd-plugin

2) Then I updated my atlas-create-crowd-plugin-module. That will allow you to use Crowd 4.4.  

```
AMPS_PLUGIN_VERSION="8.5.0"
```

3) I added UserCreatedListener class and dependencies to newly created project.  
Also you can use different log levels. Other way to enable DEBUG level use this [how to](https://community.atlassian.com/t5/Jira-questions/How-to-enable-debug-log-in-Jira/qaq-p/899698). Just for fun I enabled them all:

```
System.out.println("User " + event.getUser().getDisplayName() + " has been created.");
log.info("User " + event.getUser().getDisplayName() + " has been created.");
log.warn("User " + event.getUser().getDisplayName() + " has been created.");
log.debug("User " + event.getUser().getDisplayName() + " has been created.");
log.error("User " + event.getUser().getDisplayName() + " has been created.");
```

<br />

4) Then I used this command to run Crowd 4.4 with my plugin.  

    mvn crowd:run

And after I created user I had this message in logs:  
![Screenshot 2022-06-23 at 12.11.26.png](https://community.atlassian.com/t5/image/serverpage/image-id/203097i2F38DE295C9CD13E/image-size/large?v=v2&px=999 "Screenshot 2022-06-23 at 12.11.26.png")

I hope this small guide will help you to resolve the issue.

comments: author: Roman Kovalov
body: upd:  
You can find *atlas-create-crowd-plugin-module* file in your atlassian-plugin-sdk folder. For me it was:  

```
/usr/local/Cellar/atlassian-plugin-sdk/8.2.7/libexec/bin/atlas-create-crowd-plugin-module
```


author: Project Application Team
body: Hi,

I have the same problem, after upgrading AMPS version to 8.5.0 I've got following error:

```
ERROR] Failed to execute goal com.atlassian.maven.plugins:crowd-maven-plugin:8.5.0:generate-rest-docs (default-gen
erate-rest-docs) on project ntp-login-plugin: Execution default-generate-rest-docs of goal com.atlassian.maven.plug
ins:crowd-maven-plugin:8.5.0:generate-rest-docs failed: An API incompatibility was encountered while executing com.
atlassian.maven.plugins:crowd-maven-plugin:8.5.0:generate-rest-docs: java.lang.NoSuchMethodError: 'java.lang.Object
org.codehaus.plexus.util.xml.Xpp3Dom.getInputLocation()'
[ERROR] -----------------------------------------------------
[ERROR] realm = extension>com.atlassian.maven.plugins:crowd-maven-plugin:8.5.0
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/C:/Users/userName/.m2/repository/com/atlassian/maven/plugins/crowd-maven-plugin/8.5.0/cro
wd-maven-plugin-8.5.0.jar
[ERROR] urls[1] = file:/C:/Users/userName/.m2/repository/com/atlassian/maven/archetypes/crowd-plugin-archetype/8.
5.0/crowd-plugin-archetype-8.5.0.jar
[ERROR] urls[2] = file:/C:/Users/userName/.m2/repository/com/atlassian/maven/plugins/amps-maven-plugin/8.5.0/amps
-maven-plugin-8.5.0.jar
[ERROR] urls[3] = file:/C:/Users/userName/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar 
[ERROR] urls[4] = file:/C:/Users/userName/.m2/repository/dom4j/dom4j/1.6.1-atlassian-3/dom4j-1.6.1-atlassian-3.ja
r
[ERROR] urls[5] = file:/C:/Users/userName/.m2/repository/xml-apis/xml-apis/1.4.01/xml-apis-1.4.01.jar
[ERROR] urls[6] = file:/C:/Users/userName/.m2/repository/biz/aQute/bnd/biz.aQute.bndlib/5.3.0/biz.aQute.bndlib-5.
3.0.jar
....
```

Does anyone have the same problem and know the resolution?


Tags: app

event

listener

server