cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
1069
Views
0
Helpful
0
Comments
cdnadmin
Level 11
Level 11
This document was generated from CDN thread

Created by: Amlan Das on 19-11-2010 05:27:40 AM
I have written an Action Element Class that creates objects out of a custom class and does some DB dip, and updates session variables.
 
But when I run the call studio app, I get an error in the custom element that says - xyz is not a valid Action Element Class.
 
But when I had exported the code to a jar file, it did not give any errors.
 
In the code, I am setting the element name, description, folder name of the custom element. Then I define the settings of the element, create dependency for linking the method calls. Then in doAction method, I create an object of the custom class and then call the method that is ndescribed in the custom class.
 
Has anybody ever encountered anything similar to this? If so, what could be the possible reason? Am I missing anything basic?

Subject: RE: VXML error: xyz is not a valid Action Elemnt Class
Replied by: Manoj Anantha on 19-11-2010 05:35:12 AM
Hi Amlan,
 
Nice to see your post at developer site:
 
In building custom elements for VXML application, you need to implement and extend few classes. That apart few function that is required for the call studio to display as a element.
 
You can refer to the CVP templates in the developer site that would help you build the action element. To know where you have gone wrong you will have to send me the java code.
 
-Manoj Anantha

Subject: RE: VXML error: xyz is not a valid Action Elemnt Class
Replied by: Vinod Adusumilli on 20-01-2012 08:03:27 PM
I have a similar problem and below is the code from the example given the documentation for a Bank.
Error i see in the logs is
 
192.168.0.104.1327107531302.0.BankCallFlow,01/20/2012 18:58:57.959, The error was: 'GetAccountInfo' is not a valid action element class.
com.audium.server.AudiumException: 'GetAccountInfo' is not a valid action element class.
    at com.audium.server.controller.Controller.goToAction(Controller.java:2713)
    at com.audium.server.controller.Controller.goToElement(Controller.java:2458)
    at com.audium.server.controller.Controller.continueCall(Controller.java:2282)
    at com.audium.server.controller.Controller.doPost(Controller.java:599)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
    at java.lang.Thread.run(Thread.java:595)

 
package src;
import com.audium.server.session.user.*;
import com.audium.server.AudiumException;
import com.audium.server.voiceElement.ActionElementBase;
import com.audium.server.session.ActionElementData;


import java.util.*;

/**
 * This class contains the GetAccountInfo action element. The philosofy behind the
 * design of the Audium Bank application is to have a single action element that performs
 * much of the activity required by the application so that most of the rest of the
 * elements in the application can remain static. There are several advantages behind
 * this design:
 *
 * <P><LI> Most of the code for the application is concentrated in a single place. Making
 * changes is faster and more convenient.
 * <LI> Performance is improved by using static content since the Audium Server does not
 * need to run custom code.
 * <LI> This design works well in a developement enviroment that divides the work. The
 * developer can build the code while the application designer using the Audium Builder
 * can build the flow of the application in parallel, simply referring to a "black box"
 * which they know the developer will supply later.
 *
 * <P>This design starts to break down once the activity becomes more involved.
 * The more work done, the longer the action will take, possibly incurring unnacceptable
 * wait times and burdening the memory footprint with data that may never be referred to
 * in the application. All these factors must be considered before the design of a voice
 * application is finalized.
 */

public class GetAccountInfo extends ActionElementBase
{
    static final int PREDICT_THRESHOLD = 3;
@Override
    public void doAction(java.lang.String name, ActionElementData actionAPI) throws AudiumException
    {
        /* Throughout the code is placed System.out statements to use for debugging
        purposes. Depending on the application server, this content is printed on the
        console on which the application server runs. */
       
        System.out.println("I am in account login");
       
        /* Use the API to get the account number and PIN entered by the caller. */
        String accountNumber = actionAPI.getElementData("Account", "value");
        String pin = actionAPI.getElementData("Pin", "value");
       
        /* Here, we need to use the User Management System to obtain information
        on the user. We use the API provided for this. Since we need to find records
        in the database affiliated with a user, we need to create a user query object.
        We can set as many contraints as we want. Here the constraints are the account
        number and PIN. Once the user query object is set, we obtain a list of users
        that conform to the query constraints. */
        UserAPI userAPI = actionAPI.getUserAPI();
        UserQuery uq = new UserQuery();
        uq.setPinConstraint(pin);
        uq.setAccountNumberConstraint(accountNumber);
       
        List users =  userAPI.getUsers(uq);
        User user = null;
       
        /* If there are no users in the result, we know the account number and/or PIN
        is incorrect. We set the value of the Session Data named "badlogincount". The
        presense of a non-zero value in this setting indicates that the login was incorrect.
        This value contains a count which is incremented here. A decision element later
        in the call checks if the count has reached the maximum allowable. If the result
        found a user, then we set this Session Data variable to 0, indicating the login
        was valid*/
        if (users.size() == 0) {
            int badlogincount = 0;
            String savedCount = (String)actionAPI.getSessionData("badlogincount");
            if (savedCount != null) {
                badlogincount = Integer.parseInt(savedCount);
            }
            badlogincount++;
            actionAPI.setSessionData("badlogincount", Integer.toString(badlogincount));
            return;
        } else {
            actionAPI.setSessionData("badlogincount", Integer.toString(0));
        }
       
        String all_accounts = null;
        String balance = null;
        String account = null;
        String predicted_account = null;
       
        int naccounts = 0;
       
        /* Now that we know there is a user with the given account and PIN, we want
        to retrieve the User's record.*/
       
        user = (User) users.get(0);
       
        /* What we are doing here is a nice way to save ourselves work later. We "associate"
        this call with the user (identified by a UID automatically created by the user management
        system). From then on, there will be no need to go through the same process as above to
        get a record of that user, we just refer to the user associated with the account.
        This not only saves us coding work, but also acts as a "cache" for the user record.
        All future requests for that user's data will come from the cache rather than making
        a new query from the database. The developer can then request information on this
        user as often as desired without worrying about whether that will hurt performance
        by dipping to the database each time. */
        Integer uid = user.getUid();
        userAPI.setUid(uid);
       
        /* The checking balance is stored in the "custom1" column of the user table. We
        get it and use the API to store it in Session Data named "checkingBalance". */
        String checkingBalance = user.getCustom1();
        if (checkingBalance != null) {
            account = all_accounts = "checking";
            naccounts++;
            balance = checkingBalance;
            actionAPI.setSessionData("checkingBalance", checkingBalance);
        }
       
        /* We do the same for savings (stored in the "custom2" column of the user table). */
        String savingsBalance = user.getCustom2();
        if (savingsBalance != null) {
            if (all_accounts != null) {
                all_accounts += " or savings";
            } else {
                all_accounts = "savings";
            }
            account = "savings";
            naccounts++;
            balance = savingsBalance;
            actionAPI.setSessionData("savingsBalance", savingsBalance);
        }
        /* Ditto for the money market (stored in "custom3"). */
        String mmBalance = user.getCustom3();
        if (mmBalance != null) {
            if (all_accounts != null) {
                all_accounts += " or money market";
            } else {
                all_accounts = "money market";
            }
            account = "money market";
            naccounts++;
            balance = mmBalance;
            actionAPI.setSessionData("mmBalance", mmBalance);
        }
           
        /* Now we have to check another part of the User Management System - the call
        history. We are interested in knowing how many times the caller got information
        on any of their accounts in previous calls. We will use this information to
        predict which account they are most likely interested in getting the balance of
        this time. This time a CallRecordQuery object is created with the restraints that
        of a call from the caller (identified by their UID) and a flag named "checking"
        was tripped during that call. We need to make sure the design of the call flow
        includes a flag trigger whenever a caller gets the balance of that account. */
        CallRecordQuery query = new CallRecordQuery();
        query.addFlagNameConstraint("checking");
        query.setUidConstraint(uid);
        int num_checking = userAPI.getNumCallRecords(query);
           
        query = new CallRecordQuery();
        query.addFlagNameConstraint("savings");
        query.setUidConstraint(uid);
        int num_savings = userAPI.getNumCallRecords(query);
           
        query = new CallRecordQuery();
        query.addFlagNameConstraint("money_market");
        query.setUidConstraint(uid);
        int num_mm = userAPI.getNumCallRecords(query);

        /* Now that we have that information, we use the following algorithm to determine
        which account to immediately give the caller the balance for:
        - The account that has been requested more than the other accounts
        - The number of times in the past the caller has requested the balance of the
        account is greater than some threshold. */
        if (num_checking > num_savings && num_checking > num_mm &&
            num_savings >= PREDICT_THRESHOLD) {
            predicted_account = account = "checking";
            balance = checkingBalance;
        } else if (num_savings > num_checking && num_savings > num_mm &&
                   num_savings >= PREDICT_THRESHOLD) {
            predicted_account = account = "savings";
            balance = savingsBalance;
        } else if (num_mm > num_savings && num_mm > num_checking &&
                   num_mm >= PREDICT_THRESHOLD) {
            predicted_account = account = "money market";
            balance = mmBalance;
        }
        /* We store various information needed by other elements in Session Data. */
        actionAPI.setSessionData("balance", balance);
        actionAPI.setSessionData("account", account);
        if (predicted_account != null) {
            actionAPI.setSessionData("predicted_account", predicted_account);
        }
        actionAPI.setSessionData("all_accounts", all_accounts);
        actionAPI.setSessionData("naccounts", Integer.toString(naccounts));
       
        /* We print out all the information for display purposes. */       
        System.out.println("balance is              " + balance);
        System.out.println("account is              " + account);
        System.out.println("num_checking is         " + num_checking);
        System.out.println("num_savings is          " + num_savings);
        System.out.println("num_mm is               " + num_mm);
        System.out.println("predicted_account is    " + predicted_account);
        System.out.println("uid is                  " + uid);
        System.out.println("all_accounts is         " + all_accounts);
        System.out.println("naccounts is            " + naccounts);           
    }
}

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: Sidney Orret on 20-01-2012 09:45:52 PM
The example below works. It is custom Decision Element to move or rename a file.  I create it for a very specific purpose so please don¿t consider it for general use. I am providing just a working example of a custom element.


-----
package com.customer_name.cvp.custom;

import java.io.*;
import com.audium.server.voiceElement.DecisionElementBase;
import com.audium.server.voiceElement.ElementInterface;
import com.audium.server.voiceElement.Setting;
import com.audium.server.voiceElement.ExitState;
import com.audium.server.voiceElement.ElementException;
import com.audium.server.session.DecisionElementData;
import com.audium.server.xml.DecisionElementConfig;
import com.audium.server.voiceElement.ElementData;

public class FileMoveRename extends DecisionElementBase implements ElementInterface
{
      /**
       * This is the name of the sample decision element which appears in
       * Audium Builder for Studio.
       */
    public String getElementName()
    {
        return "FileMoveRename";
    }

      /**
       * This is the name of the folder in Audium Builder for Studio in which this
       * sample decision element appears.
       */
    public String getDisplayFolderName()
    {
        return "Filesystem Manipulation Elements";
    }

      /**
       * This is the description of what this decision element does.
       */
    public String getDescription()
    {
        return "Moves filename1 to destination folder" ;
    }

      /**
       * This returns the settings used by this sample decision element.
       */
    public Setting[] getSettings() throws ElementException
    {
      // source and target file.
            Setting[] settingArray = new Setting[3];

        settingArray[0] = new Setting("filename1", "Source file",
                                "Source file full qualified name",
                                true,   // It is required
                                true,   // It appears only once
                                true,  // It does allow substitution
                                Setting.STRING);
            settingArray[0].setDefaultValue("");

            settingArray[1] = new Setting("destination", "Destination folder",
                          "Destination folder path",
                          true,   // It is required
                          true,   // It appears only once
                          true,  // It does allow substitution
                          Setting.STRING);
            settingArray[1].setDefaultValue("");

            settingArray[2] = new Setting("filename2", "Destination filename",
                          "Destination filename",
                          true,   // It is required
                          true,   // It appears only once
                          true,  // It does allow substitution
                          Setting.STRING);
            settingArray[2].setDefaultValue("");
            return settingArray;
    }

      /**
       * This method returns an array of ExitState objects representing all the
       * possible exit states the decision element can return. Here, the exit states
       * reflect the three possible states of the day, morning, afternoon, and evening.
       */
    public ExitState[] getExitStates() throws ElementException
    {
        ExitState[] exitStateArray = new ExitState[2];

        exitStateArray[0] = new ExitState("S", "S",
                                    "Success");
        exitStateArray[1] = new ExitState("E", "E",
                                    "Error");
        return exitStateArray;
    }

      /**
       * This method returns an array of ElementData objects representing the
       * element data that this decision element creates. Here, we store only
       * the result of the decision.
       */
    public ElementData[] getElementData() throws ElementException
    {
        ElementData[] elementDataArray = new ElementData[1];

        elementDataArray[0] = new ElementData("result", "The result of the decision");

        return elementDataArray;
    }

    /**
     * This method makes the decision. Here it obtains the time and splits up the
     * hour of the day into three parts. The only part that is configurable is the
     * cutoff between afternoon and evening. We get this from the configuration and
     * make the calculation accordingly.
     */
    public String doDecision(String name, DecisionElementData decisionData) throws ElementException
    {
      System.out.println("Entered FileMoveRename.");

      // Get the configuration
      DecisionElementConfig config = decisionData.getDecisionElementConfig();

      // Get the argument.
      String filename1 = config.getSettingValue("filename1", decisionData);
      String destination = config.getSettingValue("destination", decisionData);
      String filename2 = config.getSettingValue("filename2", decisionData);

      //           File (or directory) to be moved
        File file = new File(filename1);

        // Destination directory
        File dir = new File(destination);

      String toReturn = "E";

      decisionData.addToLog("source filename", filename1);
      decisionData.addToLog("destination folder", destination);
      decisionData.addToLog("destination filename", filename2);

      // Verify that a file with same name doesn't exist in destination folder
      // if exist, then delete
      File  target = new File(dir,filename2);
      if (target .exists()) {
            boolean deleted = target.delete();
            if (deleted) { System.out.println("File with same name deleted");}
      }

      boolean success = file.renameTo(new File(dir, filename2));

        //      File was  successfully moved
        if (success) {toReturn = "S";}

      // Store the decision in element data.
        decisionData.addToLog("move result", toReturn);
      decisionData.setElementData("result", toReturn);

      System.out.println("End of MoveFile.");

      return toReturn;
    }
}

--
Sidney L. Orret
Communications Consultant, , ITIL® v3
Verizon Consulting Services

Voice: 213.393.5905
Fax: 877.450.4667
700 S Flower Street, 17th Floor, Los Angeles. CA 90017
http://maps.google.com/maps?hl=en&source=hp&q=700+S+Flower+Street,+17th+Floor,+Los+Angeles.+CA+90017&ie=UTF8&hq=&hnear=700+S+Flower+St,+Los+Angeles,+CA+90017&gl=us&ei=CVzCSqadKdPTlAeV0pzIBQ&ll=34.048375,-118.258402&spn=0.010596,0.022724&z=16&iwloc=A
Email: sidney.l.orret@verizon.com<mailto:sidney.l.orret@verizonbusiness.com>
Please note: This message is intended only for the individual or entity to which it is addressed and may contain information that is confidential and/or privileged. If you received this e-mail in error, please delete it and notify the sender immediately. Any dissemination, distribution or copying of this communication by someone other than the intended recipient, is strictly prohibited.


From: Cisco Developer Community Forums [mailto:cdicuser@developer.cisco.com]
Sent: Friday, January 20, 2012 6:35 PM
To: cdicuser@developer.cisco.com
Subject: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - General Discussion - All Versions: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene

Vinod Adusumilli has created a new message in the forum "General Discussion - All Versions":

--------------------------------------------------------------
Thank you sir,I will try that out.i was. Expecting examples to work smooth.

--
To respond to this post, please click the following link:

<http://developer.cisco.com/web/cvp/forums/-/message_boards/view_message/5042369>

or simply reply to this email.

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: GEOFFREY THOMPSON on 20-01-2012 08:20:52 PM
A hard question to answer accurately.

Is this your first attempt at writing a custom action element?

Normally one starts with something simple (like the old Audium configurable action element  template) and this helps develop the following techniques:


1.  Where do I put the class for Studio to see it?

2.  What to do if the class does not show up in the Element folder I named. Where is the error?

3.  Where do I put the class for CVP VXML Server to see it?

4.  Can I use a JAR, and if so, where does it go?

5.  Where do supporting JARS and classes go?

6.  What sort of debugging is going to work for me? (how to write to the activity log)

This is the old template for a configurable action element.

//These classes are used by custom configurable elements.
import com.audium.server.voiceElement.ActionElementBase;
import com.audium.server.voiceElement.ElementInterface;
import com.audium.server.voiceElement.Setting;
import com.audium.server.voiceElement.ElementData;
import com.audium.server.voiceElement.ElementException;

// This class is used by action elements.
import com.audium.server.session.ActionElementData;

/**
* This is the skeleton of a configurable action element. This is different
* from a standard action in that it is pre-built and the developer
* configures it in Audium Builder for Studio. The methods implemented here
* apply primarily to define the configuration for display in the Builder. Note
* that there is no need to implement the methods getExitStates because action
* elements only have a single exit state: "done".
*/
public class MyConfigurableAction extends ActionElementBase implements ElementInterface
{
    /**
     * This method is run when the action is visited. From the ActionElementData
     * object, the configuration can be obtained.
     */
    public void doAction(String name, ActionElementData data) throws ElementException
    {
            // PUT YOUR CODE HERE.
    }

      /**
      * This method returns the name the action element will have in the Element
       * Pane in the Audium Builder for Studio.
      */
    public String getElementName()
    {
            // PUT YOUR CODE HERE.

        return "My action element";
    }

      /**
      * This method returns the name of the folder in which this action element
       * resides. Return null if it is to appear directly under the Elements
       * folder.
      */
    public String getDisplayFolderName()
    {
            // PUT YOUR CODE HERE.

        return "My action element folder";
    }

      /**
      * This method returns the text of a description of the action element that
       * will appear as a popup when the cursor points to the element.
      */
    public String getDescription()
    {
            // PUT YOUR CODE HERE.

        return "My action element description";
    }

      /**
      * This method returns an array of Setting objects representing all the
       * settings this action element expects. Return null if the action element
       * does not need any settings.
      */
    public Setting[] getSettings() throws ElementException
    {
            // PUT YOUR CODE HERE.

        return null;
    }

      /**
      * This method returns an array of ElementData objects representing the
       * element data that this action element creates. Return null if the action
       * element does not create any Element Data.
      */
    public ElementData[] getElementData() throws ElementException
    {
            // PUT YOUR CODE HERE.

        return null;
    }
}

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: Vinod Adusumilli on 20-01-2012 08:56:33 PM
Thanks for u'r quick response,do I have to implement the interface for dynamic configuration?
 
I'm definetly new to cvp and trying to test the samples given.if you could help me figure the issue I would greatly appreciate u'r help.

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: Sidney Orret on 20-01-2012 09:08:52 PM
Vinod

I threw your code into my Call Studio and corrected few things that cleared the Audium related errors. It seems you were missing a bunch of imports and I had to add following lines at the top of the code.

import com.audium.server.voiceElement.ActionElementBase;
import com.audium.server.voiceElement.ElementInterface;
import com.audium.server.voiceElement.Setting;
import com.audium.server.voiceElement.ElementData;
import com.audium.server.voiceElement.ElementException;
import com.audium.server.session.ActionElementData;


The complete code is below.  But still, from your original code is apparent that you need to import some kind of custom classes to resolve following types UserAPI, userQuery, User and CallRecordQuery.

Ask around and find out which jar or class file you need to import, and you should be able to at least compile the class and generate the .class file.

Hope this helps. Regards

      Sidney


import java.util.*;
import com.audium.server.voiceElement.ActionElementBase;
import com.audium.server.voiceElement.ElementInterface;
import com.audium.server.voiceElement.Setting;
import com.audium.server.voiceElement.ElementData;
import com.audium.server.voiceElement.ElementException;
import com.audium.server.session.ActionElementData;


/**
* This class contains the GetAccountInfo action element. The philosofy behind the
* design of the Audium Bank application is to have a single action element that performs
* much of the activity required by the application so that most of the rest of the
* elements in the application can remain static. There are several advantages behind
* this design:
*
* <P><LI> Most of the code for the application is concentrated in a single place. Making
* changes is faster and more convenient.
* <LI> Performance is improved by using static content since the Audium Server does not
* need to run custom code.
* <LI> This design works well in a developement enviroment that divides the work. The
* developer can build the code while the application designer using the Audium Builder
* can build the flow of the application in parallel, simply referring to a "black box"
* which they know the developer will supply later.
*
* <P>This design starts to break down once the activity becomes more involved.
* The more work done, the longer the action will take, possibly incurring unnacceptable
* wait times and burdening the memory footprint with data that may never be referred to
* in the application. All these factors must be considered before the design of a voice
* application is finalized.
*/

public class GetAccountInfo extends ActionElementBase
{
    static final int PREDICT_THRESHOLD = 3;
@Override
    public void doAction(java.lang.String name, ActionElementData actionAPI) throws ElementException
    {
        /* Throughout the code is placed System.out statements to use for debugging
        purposes. Depending on the application server, this content is printed on the
        console on which the application server runs. */

        System.out.println("I am in account login");

        /* Use the API to get the account number and PIN entered by the caller. */
        String accountNumber = actionAPI.getElementData("Account", "value");
        String pin = actionAPI.getElementData("Pin", "value");

        /* Here, we need to use the User Management System to obtain information
        on the user. We use the API provided for this. Since we need to find records
        in the database affiliated with a user, we need to create a user query object.
        We can set as many contraints as we want. Here the constraints are the account
        number and PIN. Once the user query object is set, we obtain a list of users
        that conform to the query constraints. */
        UserAPI userAPI = actionAPI.getUserAPI();
        UserQuery uq = new UserQuery();
        uq.setPinConstraint(pin);
        uq.setAccountNumberConstraint(accountNumber);

        List users =  userAPI.getUsers(uq);
        User user = null;

        /* If there are no users in the result, we know the account number and/or PIN
        is incorrect. We set the value of the Session Data named "badlogincount". The
        presense of a non-zero value in this setting indicates that the login was incorrect.
        This value contains a count which is incremented here. A decision element later
        in the call checks if the count has reached the maximum allowable. If the result
        found a user, then we set this Session Data variable to 0, indicating the login
        was valid*/
        if (users.size() == 0) {
            int badlogincount = 0;
            String savedCount = (String)actionAPI.getSessionData("badlogincount");
            if (savedCount != null) {
                badlogincount = Integer.parseInt(savedCount);
            }
            badlogincount++;
            actionAPI.setSessionData("badlogincount", Integer.toString(badlogincount));
            return;
        } else {
            actionAPI.setSessionData("badlogincount", Integer.toString(0));
        }

        String all_accounts = null;
        String balance = null;
        String account = null;
        String predicted_account = null;

        int naccounts = 0;

        /* Now that we know there is a user with the given account and PIN, we want
        to retrieve the User's record.*/

        user = (User) users.get(0);

        /* What we are doing here is a nice way to save ourselves work later. We "associate"
        this call with the user (identified by a UID automatically created by the user management
        system). From then on, there will be no need to go through the same process as above to
        get a record of that user, we just refer to the user associated with the account.
        This not only saves us coding work, but also acts as a "cache" for the user record.
        All future requests for that user's data will come from the cache rather than making
        a new query from the database. The developer can then request information on this
        user as often as desired without worrying about whether that will hurt performance
        by dipping to the database each time. */
        Integer uid = user.getUid();
        userAPI.setUid(uid);

        /* The checking balance is stored in the "custom1" column of the user table. We
        get it and use the API to store it in Session Data named "checkingBalance". */
        String checkingBalance = user.getCustom1();
        if (checkingBalance != null) {
            account = all_accounts = "checking";
            naccounts++;
            balance = checkingBalance;
            actionAPI.setSessionData("checkingBalance", checkingBalance);
        }

        /* We do the same for savings (stored in the "custom2" column of the user table). */
        String savingsBalance = user.getCustom2();
        if (savingsBalance != null) {
            if (all_accounts != null) {
                all_accounts += " or savings";
            } else {
                all_accounts = "savings";
            }
            account = "savings";
            naccounts++;
            balance = savingsBalance;
            actionAPI.setSessionData("savingsBalance", savingsBalance);
        }
        /* Ditto for the money market (stored in "custom3"). */
        String mmBalance = user.getCustom3();
        if (mmBalance != null) {
            if (all_accounts != null) {
                all_accounts += " or money market";
            } else {
                all_accounts = "money market";
            }
            account = "money market";
            naccounts++;
            balance = mmBalance;
            actionAPI.setSessionData("mmBalance", mmBalance);
        }

        /* Now we have to check another part of the User Management System - the call
        history. We are interested in knowing how many times the caller got information
        on any of their accounts in previous calls. We will use this information to
        predict which account they are most likely interested in getting the balance of
        this time. This time a CallRecordQuery object is created with the restraints that
        of a call from the caller (identified by their UID) and a flag named "checking"
        was tripped during that call. We need to make sure the design of the call flow
        includes a flag trigger whenever a caller gets the balance of that account. */
        CallRecordQuery query = new CallRecordQuery();
        query.addFlagNameConstraint("checking");
        query.setUidConstraint(uid);
        int num_checking = userAPI.getNumCallRecords(query);

        query = new CallRecordQuery();
        query.addFlagNameConstraint("savings");
        query.setUidConstraint(uid);
        int num_savings = userAPI.getNumCallRecords(query);

        query = new CallRecordQuery();
        query.addFlagNameConstraint("money_market");
        query.setUidConstraint(uid);
        int num_mm = userAPI.getNumCallRecords(query);

        /* Now that we have that information, we use the following algorithm to determine
        which account to immediately give the caller the balance for:
        - The account that has been requested more than the other accounts
        - The number of times in the past the caller has requested the balance of the
        account is greater than some threshold. */
        if (num_checking > num_savings && num_checking > num_mm &&
            num_savings >= PREDICT_THRESHOLD) {
            predicted_account = account = "checking";
            balance = checkingBalance;
        } else if (num_savings > num_checking && num_savings > num_mm &&
                   num_savings >= PREDICT_THRESHOLD) {
            predicted_account = account = "savings";
            balance = savingsBalance;
        } else if (num_mm > num_savings && num_mm > num_checking &&
                   num_mm >= PREDICT_THRESHOLD) {
            predicted_account = account = "money market";
            balance = mmBalance;
        }
        /* We store various information needed by other elements in Session Data. */
        actionAPI.setSessionData("balance", balance);
        actionAPI.setSessionData("account", account);
        if (predicted_account != null) {
            actionAPI.setSessionData("predicted_account", predicted_account);
        }
        actionAPI.setSessionData("all_accounts", all_accounts);
        actionAPI.setSessionData("naccounts", Integer.toString(naccounts));

        /* We print out all the information for display purposes. */
        System.out.println("balance is              " + balance);
        System.out.println("account is              " + account);
        System.out.println("num_checking is         " + num_checking);
        System.out.println("num_savings is          " + num_savings);
        System.out.println("num_mm is               " + num_mm);
        System.out.println("predicted_account is    " + predicted_account);
        System.out.println("uid is                  " + uid);
        System.out.println("all_accounts is         " + all_accounts);
        System.out.println("naccounts is            " + naccounts);
    }
}





--



From: Cisco Developer Community Forums [mailto:cdicuser@developer.cisco.com]
Sent: Friday, January 20, 2012 5:57 PM
To: cdicuser@developer.cisco.com
Subject: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - General Discussion - All Versions: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene

Vinod Adusumilli has created a new message in the forum "General Discussion - All Versions":

--------------------------------------------------------------
Thanks for u'r quick response,do I have to implement the interface for dynamic configuration?

I'm definetly new to cvp and trying to test the samples given.if you could help me figure the issue I would greatly appreciate u'r help.
--
To respond to this post, please click the following link:

<http://developer.cisco.com/web/cvp/forums/-/message_boards/view_message/5042359>

or simply reply to this email.

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: Vinod Adusumilli on 20-01-2012 09:34:34 PM
Thank you sir,I will try that out.i was. Expecting examples to work smooth.
 

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: Vinod Adusumilli on 20-01-2012 09:52:35 PM
I was not referring to what you provided, I was testing a application provided by Cisco as an example and from what you said it was missing some required references,that's what I meant.

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: Hemal Mehta on 22-01-2012 10:00:40 PM
It  is most likely a classpath issue.  Is this class part of jar file. If so where did you put the jar file ? The JVM is not able to find the class at runtime.
Hemal
________________________________
From: Cisco Developer Community Forums [cdicuser@developer.cisco.com]
Sent: Saturday, January 21, 2012 12:10 PM
To: cdicuser@developer.cisco.com
Subject: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - General Discussion - All Versions: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene

Vinod Adusumilli has created a new message in the forum "General Discussion - All Versions":

--------------------------------------------------------------
new error now,not sure if i went forward or backward but i get below error now

Root Cause: java.lang.NoClassDefFoundError: com/audium/server/voiceElement/DecisionElementBase
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1346)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at com.audium.server.controller.AudiumServerConfiguration.loadLocalClasses(AudiumServerConfiguration.java:1403)
    at com.audium.server.controller.AudiumServerConfiguration.<init>(AudiumServerConfiguration.java:206)
    at com.audium.server.controller.AudiumServerConfiguration.initialize(AudiumServerConfiguration.java:843)
    at com.audium.server.controller.AudiumServerConfiguration.initializeAll(AudiumServerConfiguration.java:739)
    at com.audium.server.controller.ControllerInitializer.<init>(Controller.java:3429)
    at com.audium.server.controller.ControllerInitializer.doInitialization(Controller.java:3440)
    at com.audium.server.controller.Controller.init(Controller.java:370)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:448)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)


--
To respond to this post, please click the following link:

<http://developer.cisco.com/web/cvp/forums/-/message_boards/view_message/5046353>

or simply reply to this email.

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: Vinod Adusumilli on 22-01-2012 10:04:36 PM
Its a class file and its in the java/classes folder.
 
It  is most likely a classpath issue.  Is this class part of jar file. If so where did you put the jar file ? The JVM is not able to find the class at runtime.
Hemal
________________________________
From: Cisco Developer Community Forums [cdicuser@developer.cisco.com]
Sent: Saturday, January 21, 2012 12:10 PM
To: cdicuser@developer.cisco.com
Subject: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - General Discussion - All Versions: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene

Vinod Adusumilli has created a new message in the forum "General Discussion - All Versions":

--------------------------------------------------------------
new error now,not sure if i went forward or backward but i get below error now

Root Cause: java.lang.NoClassDefFoundError: com/audium/server/voiceElement/DecisionElementBase
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1346)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at com.audium.server.controller.AudiumServerConfiguration.loadLocalClasses(AudiumServerConfiguration.java:1403)
    at com.audium.server.controller.AudiumServerConfiguration.<init>(AudiumServerConfiguration.java:206)
    at com.audium.server.controller.AudiumServerConfiguration.initialize(AudiumServerConfiguration.java:843)
    at com.audium.server.controller.AudiumServerConfiguration.initializeAll(AudiumServerConfiguration.java:739)
    at com.audium.server.controller.ControllerInitializer.<init>(Controller.java:3429)
    at com.audium.server.controller.ControllerInitializer.doInitialization(Controller.java:3440)
    at com.audium.server.controller.Controller.init(Controller.java:370)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:448)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)


--
To respond to this post, please click the following link:

<http://developer.cisco.com/web/cvp/forums/-/message_boards/view_message/5046353>

or simply reply to this email.


Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: Vinod Adusumilli on 21-01-2012 01:10:47 PM
new error now,not sure if i went forward or backward but i get below error now
 
Root Cause: java.lang.NoClassDefFoundError: com/audium/server/voiceElement/DecisionElementBase
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1346)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at com.audium.server.controller.AudiumServerConfiguration.loadLocalClasses(AudiumServerConfiguration.java:1403)
    at com.audium.server.controller.AudiumServerConfiguration.<init>(AudiumServerConfiguration.java:206)
    at com.audium.server.controller.AudiumServerConfiguration.initialize(AudiumServerConfiguration.java:843)
    at com.audium.server.controller.AudiumServerConfiguration.initializeAll(AudiumServerConfiguration.java:739)
    at com.audium.server.controller.ControllerInitializer.<init>(Controller.java:3429)
    at com.audium.server.controller.ControllerInitializer.doInitialization(Controller.java:3440)
    at com.audium.server.controller.Controller.init(Controller.java:370)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:448)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)

 

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: Hemal Mehta on 22-01-2012 10:20:40 PM
The class file you are referring to is a application file. That may well be there, however  it seems like it cannot find the DecisionElementBase class it references.
Do you have framework.jar in your classpath ?
Hemal
________________________________
From: Cisco Developer Community Forums [cdicuser@developer.cisco.com]
Sent: Sunday, January 22, 2012 9:04 PM
To: cdicuser@developer.cisco.com
Subject: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - General Discussion - All Versions: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene

Vinod Adusumilli has created a new message in the forum "General Discussion - All Versions":

--------------------------------------------------------------
Its a class file and its in the java/classes folder.

It is most likely a classpath issue. Is this class part of jar file. If so where did you put the jar file ? The JVM is not able to find the class at runtime.
Hemal
________________________________
From: Cisco Developer Community Forums [cdicuser@developer.cisco.com]
Sent: Saturday, January 21, 2012 12:10 PM
To: cdicuser@developer.cisco.com
Subject: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - General Discussion - All Versions: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene

Vinod Adusumilli has created a new message in the forum "General Discussion - All Versions":

--------------------------------------------------------------
new error now,not sure if i went forward or backward but i get below error now

Root Cause: java.lang.NoClassDefFoundError: com/audium/server/voiceElement/DecisionElementBase
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1346)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at com.audium.server.controller.AudiumServerConfiguration.loadLocalClasses(AudiumServerConfiguration.java:1403)
at com.audium.server.controller.AudiumServerConfiguration.<init>(AudiumServerConfiguration.java:206)
at com.audium.server.controller.AudiumServerConfiguration.initialize(AudiumServerConfiguration.java:843)
at com.audium.server.controller.AudiumServerConfiguration.initializeAll(AudiumServerConfiguration.java:739)
at com.audium.server.controller.ControllerInitializer.<init>(Controller.java:3429)
at com.audium.server.controller.ControllerInitializer.doInitialization(Controller.java:3440)
at com.audium.server.controller.Controller.init(Controller.java:370)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)


--
To respond to this post, please click the following link:

<http://developer.cisco.com/web/cvp/forums/-/message_boards/view_message/5046353>

or simply reply to this email.

--
To respond to this post, please click the following link:

<http://developer.cisco.com/web/cvp/forums/-/message_boards/view_message/5045260>

or simply reply to this email.

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: Vinod Adusumilli on 23-01-2012 09:12:07 PM
It may be a issue with debugger but all i'm doing is trying to debug and run the Audium Bank - Sample.zip. i downloaded from the cisco dev network.
I dont have a vxml server that i can deploy so i'm using the studio debugger to run it.

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: Vinod Adusumilli on 23-01-2012 09:35:49 PM
I'm evaluating the dubbuger and writing review report for cisco and i need u'r feedback,are u ready to help?

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: Vinod Adusumilli on 23-01-2012 08:28:06 PM
I have the path in the classpath for framework.jar but still i'm getting the error message, I'm using debbuger and i can never get to start the debug with the classfiles in java folder,if i remove the classfiles i can atleast get to the action/decision step and fails there.

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: GEOFFREY THOMPSON on 23-01-2012 08:44:40 PM
Forget the debugger ¿ that¿s a different paradigm. Concentrate on the problem space.

>>> the classfiles in java folder

I don¿t know what you are talking about.

Are you creating a custom action element?

Are you making a resuseable component?

Are you coding this inside Eclipse?

Are you then saving the class file to the Studio common\classes folder?

Does it appear in Studio in the element list under your designated folder?

When you deploy the application, have you also copied the class file into server\common\classes and restarted the server? You certainly don¿t have mess with class paths or anything like this ¿ it¿s a proven methodology.

Why don¿t you list EXACTLY the steps you have followed.

Regards,
Geoff

Subject: RE: New Message from Vinod Adusumilli in Customer Voice Portal (CVP) - Gene
Replied by: GEOFFREY THOMPSON on 23-01-2012 09:31:40 PM
>> I dont have a vxml server that i can deploy so i'm using the studio debugger to run it.

Ah, I see. My apologies.

I wonder what you are trying to learn though ¿ without a server and a voice gateway, you are just whistling Dixie.

Regards,
Geoff

Subject: RE: VXML error: xyz is not a valid Action Elemnt Class
Replied by: Phani Venigalla on 14-06-2012 12:59:04 PM


I have written an Action Element Class that creates objects out of a custom class and does some DB dip, and updates session variables.
 
But when I run the call studio app, I get an error in the custom element that says - xyz is not a valid Action Element Class.
 
But when I had exported the code to a jar file, it did not give any errors.
 
In the code, I am setting the element name, description, folder name of the custom element. Then I define the settings of the element, create dependency for linking the method calls. Then in doAction method, I create an object of the custom class and then call the method that is ndescribed in the custom class.
 
Has anybody ever encountered anything similar to this? If so, what could be the possible reason? Am I missing anything basic?


 
If you are running in debug mode in Call Studio, make sure to copy the classes/jar to C:\Cisco\CallStudio\eclipse\plugins\com.audiumcorp.studio.debug.runtime_x.y.y\AUDIUM_HOME\common\{classes|lib}
 
And deploy it to VXML Server too, at this location: C:\Cisco\CVP\VXMLServer\common\{classes|lib}

 
 
Hi,
 
Make sure you have given the class name XYZ same as a constructor in class and make sure you have imported all the necessary audim jar files in to java file.

Subject: RE: VXML error: xyz is not a valid Action Elemnt Class
Replied by: Vladimir Lozano Martinez on 14-06-2012 12:50:05 PM
I have written an Action Element Class that creates objects out of a custom class and does some DB dip, and updates session variables.
 
But when I run the call studio app, I get an error in the custom element that says - xyz is not a valid Action Element Class.
 
But when I had exported the code to a jar file, it did not give any errors.
 
In the code, I am setting the element name, description, folder name of the custom element. Then I define the settings of the element, create dependency for linking the method calls. Then in doAction method, I create an object of the custom class and then call the method that is ndescribed in the custom class.
 
Has anybody ever encountered anything similar to this? If so, what could be the possible reason? Am I missing anything basic?

 
If you are running in debug mode in Call Studio, make sure to copy the classes/jar to C:\Cisco\CallStudio\eclipse\plugins\com.audiumcorp.studio.debug.runtime_x.y.y\AUDIUM_HOME\common\{classes|lib}
 
And deploy it to VXML Server too, at this location: C:\Cisco\CVP\VXMLServer\common\{classes|lib}
Getting Started

Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community:

Quick Links