I figured it out now.
Step 1: Create a variable in your process. (I use userComms, it's my POJO)
https://community.jboss.org/servlet/JiveServlet/downloadImage/2-729764-18391/310-158/Screen+shot+2012-04-13+at+1.27.17+PM.png
Step 2: In the Human Task Parameter Mapping, map my variable to "Content".
(I always have this problem doing this. See https://community.jboss.org/message/729763#729763 )
https://community.jboss.org/servlet/JiveServlet/downloadImage/2-729764-18392/450-113/Screen+shot+2012-04-13+at+1.29.21+PM.png
Step 3: [Optional] In the On Entry Action of the Human Task, I set the value of my POJO. You can do it any way you like.
Question: is the kcontext.setVariable() necessary?
userComms = new UserComms();
userComms.setQuestion("Hello World~!");
kcontext.setVariable("userComms", userComms);
Step 4: Compile and run our process.
Step 5: Accessing your variable from the task's "Content"
BlockingGetTaskResponseHandler taskResponseHandler = new BlockingGetTaskResponseHandler();
taskClient.getTask(task1.getId(), taskResponseHandler);
Task task = taskResponseHandler.getTask();
long documentContentId = task.getTaskData().getDocumentContentId();
UserComms userComms = new UserComms();
BlockingGetContentResponseHandler contentResponseHandler = new BlockingGetContentResponseHandler();
taskClient.getContent(documentContentId, contentResponseHandler);
Content content = contentResponseHandler.getContent();
if (content != null){
ByteArrayInputStream bais = new ByteArrayInputStream(content.getContent());
ObjectInputStream ois;
try {
ois = new ObjectInputStream(bais);
Object obj = ois.readObject();
System.out.println("Object = " + obj.getClass()); // will return an empty string if not mapped properly
if(obj instanceof UserComms) {
userComms =(UserComms) obj;
System.out.println(userComms.getQuestion());
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
And I got my POJO from the Content.
Happy. :)