Page 1 of 1

java.lang.ClassCastException: java.lang.String cannot be cast to com.openkm.bean.form.Select

PostPosted:Fri Jan 08, 2016 8:33 am
by rizkywib
Dear people,

i have error when i assign user using <select> option list. i want to get the value from option, then use the value to send email as an actor.
i attached the snapshot and .par file below.
thanks :D

forms.xml
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow-forms PUBLIC "-//OpenKM//DTD Workflow Forms 2.4//EN"
                                "http://www.openkm.com/dtd/workflow-forms-2.4.dtd">
<workflow-forms>
  <workflow-form task="assignResign">
  	<input label="IT" name="ituser"></input>
 	<select name="superiors" label="List Superior">
 		<option label="Andy Permadi" value="andyperm" />
 		<option label="Andy Gunawan" value="andyguna" />
 		<option label="Usertest" value="usertest" />
 	</select>
    <button label="Next" name="next" />
  </workflow-form>
  
  <workflow-form task="appIT">
  	<button label="Approved" name="approve" transition="accept" />
  </workflow-form>
  
  <workflow-form task="appSup">
  	<button label="Approved" name="approve" transition="accept" />
  </workflow-form>
  
  <workflow-form task="processToFinance">
  	<button label="Approved" name="approve" />
  </workflow-form>
  
  <workflow-form task="financeClear">
  	<button label="Approved" name="approve" />
  </workflow-form>
</workflow-forms>
ActorSuperAssignHandler.Java
Code: Select all
package openkm.workflow.action;

import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;

import com.openkm.bean.form.Select;
//import com.openkm.bean.form.SuggestBox;

public class ActorSuperAssignHandler implements AssignmentHandler {
	private static final long serialVersionUID = 1L;
	
	@Override
	public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {
		Select superiors = (Select) executionContext.getContextInstance().getVariable("superiors");
		/*
		if (superiors != null) {
			assignable.setActorId(superiors.getName());
		} else {
			assignable.setActorId("okmAdmin");
		}*/
	}
}
actorSuperAction.java
Code: Select all
package openkm.workflow.action;

import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;

import com.openkm.bean.form.Select;
//import com.openkm.bean.form.SuggestBox;

public class actorSuperAction implements ActionHandler {
	private static final long serialVersionUID = 1L;
	//public static String user="";

	@Override
	public void execute(ExecutionContext executionContext) throws Exception {
		Select superiors = (Select) executionContext.getContextInstance().getVariable("superiors");
		
		//user = superiors.getValue();
		
		if (superiors != null) {
			executionContext.getContextInstance().setVariable("superiors", superiors.getName());
		}
		
	}
	
}
Code: Select all
<mail-node name="mailSuper" actors="#{superiors}">
		<subject>
			test mailSuper
		</subject>
		<text>
			test workflow OpenKM
		</text>
		<transition to="Superior" name="to Superior"></transition>
	</mail-node>

Re: java.lang.ClassCastException: java.lang.String cannot be cast to com.openkm.bean.form.Select

PostPosted:Sat Jan 09, 2016 10:22 am
by jllort
Attach also the complete stack trace error.

I advance to you I do not like this line:
Code: Select all
executionContext.getContextInstance().setVariable("superiors", superiors.getName());
I suspect you should add a new Select object.

Re: java.lang.ClassCastException: java.lang.String cannot be cast to com.openkm.bean.form.Select

PostPosted:Mon Jan 11, 2016 1:02 am
by rizkywib
i'm very newbie in this java coding..
then what kind of select should be made? give me the select code, or the example for my case..
hope u can help me jlrot :)

Re: java.lang.ClassCastException: java.lang.String cannot be cast to com.openkm.bean.form.Select

PostPosted:Wed Jan 13, 2016 5:03 pm
by jllort
You should do something like:
Code: Select all
Select superiors new Select();
// etc...
executionContext.getContextInstance().setVariable("setData", select);
I think you are trying to doing it ( see data="setData" , the select is used for mapping existing form element )
Code: Select all
select name="superiors" label="List Superior" data="setData">
       <option label="Andy Permadi" value="andyperm" />
       <option label="Andy Gunawan" value="andyguna" />
       <option label="Usertest" value="usertest" />
    </select>

Re: java.lang.ClassCastException: java.lang.String cannot be cast to com.openkm.bean.form.Select

PostPosted:Thu Jan 14, 2016 9:49 am
by rizkywib
i want to get the value from the select option. for example: i choose the Usertest in select option.
then i want to send an email to the Actor usertest. then what the step by step i must to do jllort?
please help me. i'm very confused :roll:
below i attached my code below.

forms.xml
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow-forms PUBLIC "-//OpenKM//DTD Workflow Forms 2.4//EN"
                                "http://www.openkm.com/dtd/workflow-forms-2.4.dtd">
<workflow-forms>
  <workflow-form task="assignResign">
  	<input label="IT" name="ituser"></input>
 	<select name="superiors" label="List Superior" data="superiors" data="setData">
 		<option label="Andy Permadi" value="andyperm" />
 		<option label="Andy Gunawan" value="andyguna" />
 		<option label="Usertest" value="usertest" />
 	</select>
 
    <button label="Next" name="next" />
  </workflow-form>
  
  <workflow-form task="appIT">
  	<button label="Approved" name="approve" transition="accept" />
  </workflow-form>
  
  <workflow-form task="appSup">
  	<button label="Approved" name="approve" transition="accept" />
  </workflow-form>
  
  <workflow-form task="processToFinance">
  	<button label="Approved" name="approve" />
  </workflow-form>
  
  <workflow-form task="financeClear">
  	<button label="Approved" name="approve" />
  </workflow-form>
</workflow-forms>
actorSuperAction.java
Code: Select all
package openkm.workflow.action;

import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;

import com.openkm.bean.form.Select;

public class actorSuperAction implements ActionHandler {
	private static final long serialVersionUID = 1L;
	
	@Override
	public void execute(ExecutionContext executionContext) throws Exception {
		Select superiors = new Select();
		superiors.getName();
		executionContext.getContextInstance().setVariable("setData", superiors);		
	}
}
ActorSuperAssignHandler.java
Code: Select all
package openkm.workflow.action;

import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;

import com.openkm.bean.form.Select;

public class ActorSuperAssignHandler implements AssignmentHandler {
	private static final long serialVersionUID = 1L;
	
	public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {
	      Select superiors = (Select) executionContext.getContextInstance().getVariable("superiors");
	      
	      if (superiors != null) {
	         assignable.setActorId(superiors.getName());
	         executionContext.getContextInstance().setVariable("superiors", superiors);
	      } else {
	         assignable.setActorId("okmAdmin");
	      }
	}
}
catalina.log
Code: Select all
Caused by: org.jbpm.graph.def.DelegationException: com.openkm.bean.form.Select cannot be cast to java.lang.String
	at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:388)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
	at org.jbpm.graph.def.ProcessDefinition_$$_javassist_21.raiseException(ProcessDefinition_$$_javassist_21.java)
	at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:379)
	at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:301)
	at org.jbpm.graph.node.MailNode.execute(MailNode.java:29)
	at org.jbpm.graph.def.Node.enter(Node.java:390)
	at sun.reflect.GeneratedMethodAccessor715.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
	at org.jbpm.graph.def.Node_$$_javassist_58.enter(Node_$$_javassist_58.java)
	at org.jbpm.graph.def.Transition.take(Transition.java:167)
	at org.jbpm.graph.def.Node.leave(Node.java:479)
	at org.jbpm.graph.def.Node.leave(Node.java:451)
	at org.jbpm.graph.node.Fork.execute(Fork.java:146)
	at org.jbpm.graph.def.Node.enter(Node.java:390)
	at sun.reflect.GeneratedMethodAccessor715.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
	at org.jbpm.graph.def.Node_$$_javassist_58.enter(Node_$$_javassist_58.java)
	at org.jbpm.graph.def.Transition.take(Transition.java:167)
	at org.jbpm.graph.def.Node.leave(Node.java:479)
	at org.jbpm.graph.node.TaskNode.leave(TaskNode.java:213)
	at sun.reflect.GeneratedMethodAccessor760.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
	at org.jbpm.graph.def.Node_$$_javassist_58.leave(Node_$$_javassist_58.java)
	at org.jbpm.graph.exe.Token.signal(Token.java:223)
	at org.jbpm.graph.exe.Token.signal(Token.java:150)
	at sun.reflect.GeneratedMethodAccessor854.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
	at org.jbpm.graph.exe.Token_$$_javassist_91.signal(Token_$$_javassist_91.java)
	at org.jbpm.taskmgmt.exe.TaskInstance.end(TaskInstance.java:490)
	at org.jbpm.taskmgmt.exe.TaskInstance.end(TaskInstance.java:406)
	at com.openkm.module.common.CommonWorkflowModule.setTaskInstanceValues(CommonWorkflowModule.java:711)
	... 52 more
Caused by: java.lang.ClassCastException: com.openkm.bean.form.Select cannot be cast to java.lang.String
	at org.jbpm.mail.Mail.evaluate(Mail.java:399)
	at org.jbpm.mail.Mail.getRecipients(Mail.java:84)
	at org.jbpm.mail.Mail.send(Mail.java:177)
	at org.jbpm.mail.Mail.execute(Mail.java:76)
	at org.jbpm.graph.def.Action.execute(Action.java:129)
	at sun.reflect.GeneratedMethodAccessor793.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
	at org.jbpm.graph.def.Action_$$_javassist_70.execute(Action_$$_javassist_70.java)
	at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:284)
	... 87 more


Re: java.lang.ClassCastException: java.lang.String cannot be cast to com.openkm.bean.form.Select

PostPosted:Fri Jan 15, 2016 7:25 pm
by jllort
Must go step by step. Work with two task. On first one you show the form. On second task do nothing. On the transaction between first->second capture the Select ( variable ) and show from console ( System.out ) the value ( better debug ). I see so much actions for what you are doing.