Identity IQ 8.4p2
Hi everyone, I’m currently trying to create a plugin which goal is only to import a Java class that will be used in an PublisherConfiguration as a custom Publisher.
The problem is that I don’t know how to declare my class as usable in this type of configuration. I tried to declare my package as “scriptPackages” in my plugin’s manifest.xml but when I try to run my task with my PublisherConfiguration configured it tells me it can’t find my custom class.
I’ve already done every of these point :
1. Package is declared in manifest.xml under <scriptPackages>.
2. Class is compiled and deployed correctly with the plugin.
3. Fully qualified class name is used in the configuration (e.g., com.acme.training.publisher.FileSystemPublisher).
4. Plugin is installed and active in SailPoint.
5. Restart of IIQ was made.
Does anyone know how to properly declare a custom Java class to be used in a PublisherConfiguration?
Here is my manifest.xml file of my plugin for my custom Publisher:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Plugin PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<Plugin certificationLevel="None" displayName="Extract Plugin" minSystemVersion="8.4" name="ExtractPlugin" version="1.0-dev" rightRequired="AdminExtractPlugin">
<Attributes>
<Map>
<entry key="scriptPackages">
<value>
<List>
<String>com.acme.publisher</String>
</List>
</value>
</entry>
</Map>
</Attributes>
</Plugin>
Additionally, here is the error message I get when I try to run my task using this custom Publisher (which clearly states that it can’t find my custom Publisher class):
<Stack>sailpoint.tools.GeneralException: Failed to create publisher 'FileSystemPublisher'
at sailpoint.task.BaseDataExtractExecutor.validateArgs(BaseDataExtractExecutor.java:285)
at sailpoint.task.BaseDataExtractExecutor.execute(BaseDataExtractExecutor.java:245)
at sailpoint.task.DataExtractExecutor.execute(DataExtractExecutor.java:49)
at sailpoint.api.TaskManager.runSync(TaskManager.java:981)
at sailpoint.api.TaskManager.runSync(TaskManager.java:764)
at sailpoint.scheduler.JobAdapter.execute(JobAdapter.java:128)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: java.lang.ClassNotFoundException: com.acme.publisher.FileSystemPublisher
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1353)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1162)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
at sailpoint.integration.publishers.PublishersFactory.createPublisher(PublishersFactory.java:100)
at sailpoint.integration.publishers.PublishersFactory.createPublisher(PublishersFactory.java:49)
at sailpoint.task.BaseDataExtractExecutor.validateArgs(BaseDataExtractExecutor.java:282)
... 7 more
</Stack>
Also here is my publisher configuration :
<entry key="FileSystemPublisher">
<value>
<Map>
<...>
<entry key="className" value="com.acme.publisher.FileSystemPublisher"/>
<...>
<...>
</Map>
</value>
</entry>
The strange thing is that when I directly load my Plugin compiled JAR into my Identity IQ libs it works fine, but with the plugin it doesn’t.
Maybe you’ll see something I don’t see ! Thank you !