I have created custom Serializable class, and I add it into payload of necessary Sling Job
public SomeClass extends Serializable {
//Implementaton details
}
.......
//some service
Map<String, Object> payload = new HashMap<>();
payload.put("property1", someClassObject);
jobManager.createJob("some/job/topic").properties(payload).add();
As a reusult job is successfully created and assigned, but process
method of JobConsumer
is not triggered.
I have enabled TRACE log level on org.apache.sling.event.jobs, logs say the same: job is added and assigned, nothing else is happened:
20.03.2019 11:15:00.263 DEBUG [sling-threadpool-15f9e0b4-a24d-4b0d-bf4a-433ec604e41d-(apache-sling-job-thread-pool)-27-<main queue>(com/some/Service)] org.apache.sling.event.jobs.audit ASSIGN OK bb92b672-1b0d-4fe8-bf5e-9194a934f249 : 2019/3/20/11/15/bb92b672-1b0d-4fe8-bf5e-9194a934f249_50
20.03.2019 11:15:00.263 DEBUG [sling-threadpool-15f9e0b4-a24d-4b0d-bf4a-433ec604e41d-(apache-sling-job-thread-pool)-27-<main queue>(com/some/Service)] org.apache.sling.event.jobs.audit ADD OK topic=some/job/topic, properties={spreadsheet=com.some.project.SomeClass@7acdf4a2} : 2019/3/20/11/15/bb92b672-1b0d-4fe8-bf5e-9194a934f249_50
If I pass standard serializable objects like String, Integer and etc; Job is started, and I could find evidence in logs:
20.03.2019 11:15:00.012 DEBUG [sling-threadpool-15f9e0b4-a24d-4b0d-bf4a-433ec604e41d-(apache-sling-job-thread-pool)-27-<main queue>(com/some/Service)] org.apache.sling.event.jobs.audit START OK : 2019/3/20/11/15/bb92b672-1b0d-4fe8-bf5e-9194a934f249_49
How could I resolve problem of Sling Job processing?
Tested on AEM 6.4.2 and 6.4.3
The problem is that your custom class is prohibited from being deserialized. Actually all classes are prohibited from being deserialized as described here . You should whitelist classes that you would like to be deserializable.
Specific RuntimeException is only seen when you create debug logger on org.apache.sling.event.impl instead of org.apache.sling.event.jobs :
*DEBUG* [sling-default-137-Registered Service.4303] org.apache.sling.event.impl.jobs.queues.QueueJobCache Unable to read resource.
java.lang.UnsupportedOperationException: Deserialization not allowed for class TestEnum
at org.kantega.notsoserial.DefaultNotSoSerial.preventDeserialization(DefaultNotSoSerial.java:256)
at org.kantega.notsoserial.DefaultNotSoSerial.onBeforeResolveClass(DefaultNotSoSerial.java:248)
at org.kantega.notsoserial.ObjectInputStreamClassVisitor.onBeforeResolveClass(ObjectInputStreamClassVisitor.java:48)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
at java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1994)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1570)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at org.apache.sling.jcr.resource.internal.helper.JcrPropertyMapCacheEntry.convertToType(JcrPropertyMapCacheEntry.java:330) [org.apache.sling.jcr.resource:3.0.8]
at org.apache.sling.jcr.resource.internal.helper.JcrPropertyMapCacheEntry.convertToType(JcrPropertyMapCacheEntry.java:231) [org.apache.sling.jcr.resource:3.0.8]
at org.apache.sling.jcr.resource.internal.JcrValueMap.get(JcrValueMap.java:105) [org.apache.sling.jcr.resource:3.0.8]
at org.apache.sling.event.impl.support.ResourceHelper.cloneValueMap(ResourceHelper.java:203) [org.apache.sling.event:4.2.10]
at org.apache.sling.event.impl.jobs.Utility.readJob(Utility.java:181) [org.apache.sling.event:4.2.10]
Here is the line of code that is catching this exception.