title: Could not serialize flow execution
body: <p><b>Exception:</b>    </p>
  
  <pre><code>Error 500: Could not serialize flow execution; make sure all objects stored in 
             flow or flash scope are serializable
  Servlet: grails
  URI: /payment.com/grails/payment/makePayment.dispatch
  Exception Message: payment.com.ValidationService$$EnhancerByCGLIB$$d0f2434f 
  Caused by: Could not serialize flow execution; make sure all objects stored in 
             flow or flash scope are serializable 
  Class: Unknown 
  At Line: [-1] 
  Code Snippet:
  </code></pre>
  
  <p><b>Discussion:</b></p>
  
  <pre><code>payment.com: project name         
  payment: is the name of (domain, view, controller)
  makePayment: is a webflow to make payment
  ValidationService: is a service to test if credit card is valid or not
  </code></pre>
  
  <p><b>Problem:</b><br>
  i got this error with in my grails project  </p>
  
  <pre><code>i have a grails webflow that makes a payment, in this webflow i use grails 
  command object to validate input values.
  when i call the method isValid from Validation service i got this error
  </code></pre>
  
  <p><b>Note:</b>  </p>
  
  <pre><code>i try to serialize domain class, controller, service, &amp; command object class, 
  but i couldn't solve this issue.
  </code></pre>
  
  <p>any help, thanks</p>
  
  <p><b>Edit:</b></p>
  
  <p><b>Validation Service</b></p>
  
  <pre><code> package payment.com
  
   import java.io.Serializable;
  
   class ValidationService implements Serializable{
  
  // Filter out non-digit characters
  def getDigitsOnly (String s) {
    StringBuffer digitsOnly = new StringBuffer ();
    char c;
    for (int i = 0; i &lt; s.length (); i++) {
      c = s.charAt (i);
      if (Character.isDigit (c)) digitsOnly.append (c);
    }
    return digitsOnly.toString ();
  }
  
  // Perform Luhn check
  def isValid (String cardNumber) {
    String digitsOnly = getDigitsOnly (cardNumber);
    int sum = 0;
    int digit = 0;
    int addend = 0;
    boolean timesTwo = false;
  
    for (int i = digitsOnly.length () - 1; i &gt;= 0; i--) {
      digit = Integer.parseInt (digitsOnly.substring (i, i + 1));
      if (timesTwo){
        addend = digit * 2;
        if (addend &gt; 9) addend -= 9;
      }else{
        addend = digit;
      }
      sum += addend;
      timesTwo = !timesTwo;
    }
    int modulus = sum % 10;
  
    if (modulus == 0){
        return true
    }else{
      return false
    }
  }
  }
  </code></pre>
  
  <p><b>MakePaymentStep1Command</b></p>
  
  <pre><code>package payment.com
  
  import org.codehaus.groovy.grails.validation.Validateable;
  import java.io.Serializable;
  import payment.com.ValidationService;
  
  @Validateable
  class MakePaymentStep1Command implements Serializable{
  ValidationService ValidationService
  String cardNumber
  
  static constraints ={
      cardNumber(blank:false, size:11..16, validator:{ val, obj-&gt;
          if (!obj.ValidationService.isValid(val)){
              return ['payment.cardNumber.invalid']
          }
          return true;
      })
  }
   }
  </code></pre>
  
  <p><b>Payment Controller</b></p>
  
  <pre><code>class PaymentController{
  ....
  ....
  def MakePaymentFlow = {
  ....
      Step1{
          on('submit').to('Step1Submit')
      }
      Step1Submit{
          action {MakePaymentStep1Command cmd -&gt;
              flow.step1Bean = cmd
              if (!flow.step1Bean.validate()){
                  error()
              }
          }
          on('error').to('Step1')
          on('success'){
              flow.message = null
          }.to('Step2')
      }
  
  
  ....
  }
  
  
  }
  </code></pre>
  
  <p><b>The Error happens here:</b></p>
  
  <pre><code> if (!flow.step1Bean.validate()){
       error()
   }
  </code></pre>