JTAPI problem

Hi Friends,
Plz forgive me i have posted this in a wrong forum. I couldn't find a suitable forum.
I am beginner to JTAPI.I want to record telephone calls as part of my project.
Here in my system i have configured with a phone which is
attached to a PBX which is connected to machine through voice
modem.
phone->PBX->Voice Modem->Machine.
I am using jdk1.5,windows 2000 server and i have installed jtapi and xtapi and set classpath to it.
Problem is when i run the sample file InCall.java i got the following exception.
"Can't get Provider : javax.telephony.JtapiPeerUnavailable
Exception: JtapiPeer: net.xtapi.XJtapiPeer could not be
instantiated"
what could be the reason plz guide me.
With luv,
manu

Hi friends,
I have solved the problem of "Can't get Provider Exception". I have included mstapi.jar and xtapi.dll in the classpath.
But now iam getting another exception. "Can't get Terminal:Javax.telephony.InvalidArgumentException".
Plz Guide me
Manu

Similar Messages

  • CUCM 8.6.2 and JTAPI problems

    Hello,
    Following many threads regarding JTAPI errors, data sync, and so on (eg: https://supportforums.cisco.com/message/3566010#3566010 , https://supportforums.cisco.com/thread/2090094) , I'm wondering if this catastrophic bug CSCuf44112 could be the root cause for these errors. Not only UCCX errors but also other applications involving CTI (Voice Recording, CUPC/Jabber in control deskphone mode).
    It's difficult to fully understand what's written and the possible consequences.
    Help to decrypt would be appreciated.
    JC

    I have bookmarked your post.  An interesting topic indeed.  Thank you for posting it.
    Anthony Holloway
    Please use the star ratings to help drive great content to the top of searches.

  • JTAPI / CTI Connection problems CUCM 9.1.2 and AndTek 4.8.5

    Hi All,
    we have a problem with JTAPI Connection to AndTek. The colleagues, they use AndTek, can login / logout, but after it, the actual status doesn't change by the others. If they restarts the phones (cable out, cable in), status will be changed. Other solution, restart Callmanager (sometimes the restart of the service "CTI Manager" can help too). 
    With AndTek we tried to find the problem, what they found: the phones are losing the connection to the  AndTek service, and Application Users cannot control the phones.
    Questions:
    - How can I stay under control, investigate the connection of the JTAPI at side of CUCM
    . Which trace / debug can help to find the problem by Application Users

    You can monitor CTIConnectionActive under Performance tab in RTMT for a real-time number of JTAPI connections.
    CTIManager SDL traces from CUCM and JTAPI logs from Genesys should help diagnose the exact JTAPI messaging and see what is closing the connection.  There's a keep-alive process as part of JTAPI that Genesys should be using.
    Lastly, a packet capture may help if there are network interruptions causing the issue.

  • CAD - Unable to login agent due to problems in JTAPI or CM

    Hi Guys,
    I have the next issue: I have a 7911 that is not connecting to JTAPI. I know that this is an issue on the config of the CM, but I have double checked and I have the phone added on the JTAPI user.
    This phone uses extension mobility also, but every time I login with a valid CAD user I get that error.
    I have changed the phone on that cad, and with a different phone it works fine.
    2009-11-11 12:31:45.765 DEBUG [0xac4] PhoneDev: PD1883 GetDebugInfo --------------------- Begin: CONTROL_FAILURE_CONF ---------------------
    2009-11-11 12:31:45.765 DEBUG [0xac4] PhoneDev: PD1920 CONTROL_FAILURE_CONF: InvokedID = 3
    2009-11-11 12:31:45.765 DEBUG [0xac4] PhoneDev: PD1921 CONTROL_FAILURE_CONF: FailureCode is CF_GENERIC_UNSPECIFIED
    2009-11-11 12:31:45.765 DEBUG [0xac4] PhoneDev: PD1922 CONTROL_FAILURE_CONF: PeripheralErrorCode is 88001
    2009-11-11 12:31:45.765 DEBUG [0xac4] PhoneDev: PD1923 CONTROL_FAILURE_CONF: Error Text: Unable to login agent due to problems in JTAPI or CM
    2009-11-11 12:31:45.765 DEBUG [0xac4] PhoneDev: PD2195 GetDebugInfo --------------------- End: CONTROL_FAILURE_CONF ---------------------
    I attached th full degug.
    Do anyone have any ideas of what could be happening?
    Thanks a lot for your time!

    Hi,
    Thanks for the answer. This Week I  reboot this CUCM, but the issue remains. I also tried stoping the CTI manager process, but didnt help.
    The version of the CUCM is: 6.1.2.1000-13
    The version of the IPCCX is: 5.0(2)SR01_Build053
    I checked if the User's Device Profile was associated, I'm not sure if it is. I enter the user device profile and then I check that this user was assosiated with CTIManager. Do this means that this profile is associated?
    Please let me know if anyone have had any similar issue.
    Thanks a lot for all your help in this matter.
    Raymond

  • JTAPI, CallManager 3.3 and external calls problem

    Hi everyone,
    I'm putting together an application that uses JTAPI to track call times.
    When I'm tracking an internal call, the call time is pretty much exact and my application gets notified about all call events.
    But when tracking external calls (calls that go to the public telephone network) I've noticed that as soon as the call is directed to the router (a Cisco 3800), CallManager sends a connected event when in fact the phone on the other side is still ringing.
    Even if the external call never gets answered I get a connected (active call) event.
    I have a trace dump of my application that shows the events when they happen and I can provide that if needed but for now I was wondering what, if anything, should be configured either in CallManager 3.3 or the Cisco 3800 so that events are triggered correctly, i.e. get one connected event when the call is actually answered and not when CallManager passes the call to the router.

    Hey all
    Just got a 17" i7 MBP a few weeks ago, anxious of all the spinning beachball freezes people have reported in the Apple forums. Thankfully, I have none of these problems, however, I have a problem that's just as annoying.
    I have my laptop connected to an Eizo 24" Widescreen via a display port to DVI adapter, using the extended desktop functionality. I started fine, and I have pretty much the external monitor connected 90% of the time. But then after a few days (and this happens now 2-5 times ever day), the screens will go black, once entering sleep mode for the screens only, and I can't wake them up, only do a hard reboot via the power button. it's really annoying, as I can't leave the monitor plugged in, while I go do other stuff. When the MBP is on it's own, there's no problem.
    Also, sometimes when starting up, a few seconds into the desktop showing, I get severe graphics corruption, all kind of colours on both monitors, and I can only o a hard reboot to recover it. No problem as well when only using the MBP without the external monitor.
    The only good thing about these problems are that wen I push the machine hard (I am a graphic designer, so it get's pushed to max maybe 5 hours a day), there's no problems what so ever, it's like it's more tend to crash when cold. No problems during intense gaming as well.
    I run solely on the geforce card, as I have read a lot of problems are due to the switching of cards.
    Anyway, just wanted to chime in, hopefully Apple will deliver a solution for this soon. My old 2007 MBP was rock-solid, and so far this has been the least stable Mac I have owned. Love it still though.
    Lars

  • Jtapi - file palying problem

    Hi all,
    I am a Software Engineer, and programming in java since 2002. But now first time, I am working on a telephony application using JTAPI.
    I have a dialogic card (D/41-ESC) to play with.
    My code is working fine, it is dialing out, receiving calls, recording users voice and receiving DTMF input. All state and events are also according to documentations.
    But i am facing problem at palying of sound (wav/au) file from application to telephone. No exception occurs during execution.
    Please guide me what may be the problem.
    (FYI. I have no sound card on my system)
    looking for early reply. thanks in advance

    Hi,
    I need a help to make use of TTS in JTAPI 1.4 version. As there is no sample program for this JTAPI 1.4 package, am facing an issue to write a program to play a wave file. Am using Freetts to convert the text file into wave file with 8000 hz frequency. But to play till now I've used usePlayURL method to play the file. But the voice is not clear & soft. So our team preferred to choose a better voice using some other TTS engine & also make a try of TTS in JTAPI 1.4. But the existing source files are just a body for all each interfaces in that package. Don't know to make use of the interface methods.
    Kindly guide me to proceed my task.
    Welcoming the suggestions....
    Thanks & Regards,
    GrasyX

  • Jtapi - file playing problem

    Hi all,
    I am a Software Engineer, and programming in java since 2002. But now first time, I am working on a telephony application using JTAPI.
    I have a dialogic card (D/41-ESC) to play with.
    My code is working fine, it is dialing out, receiving calls, recording users voice and receiving DTMF input. All state and events are also according to documentations.
    But i am facing problem at palying of sound (wav/au) file from application to telephone. No exception occurs during execution.
    Please guide me what may be the problem.
    (FYI. I have no sound card on my system)
    looking for early reply. thanks in advance

    Hi,
    I need a help to make use of TTS in JTAPI 1.4 version. As there is no sample program for this JTAPI 1.4 package, am facing an issue to write a program to play a wave file. Am using Freetts to convert the text file into wave file with 8000 hz frequency. But to play till now I've used usePlayURL method to play the file. But the voice is not clear & soft. So our team preferred to choose a better voice using some other TTS engine & also make a try of TTS in JTAPI 1.4. But the existing source files are just a body for all each interfaces in that package. Don't know to make use of the interface methods.
    Kindly guide me to proceed my task.
    Welcoming the suggestions....
    Thanks & Regards,
    GrasyX

  • JTAPI GetProvider() problem

    Le but est d'avoir un petit bouton dans l'application qui fait sonner un t�l�phone gr�ce aux fonctionnalit�s fournies dans le JTAPI.
    Mon code ressemble � ceci :
    try
    JtapiPeer myPeer = JtapiPeerFactory.getJtapiPeer("com.cisco.jtapi.CiscoJtapiPeerImpl");
    // soit on met cela soit on met null et le vendor par d�faut est choisi (celui qui est dans le classpath)
    // dans tous les cas cela fonctionne, j'ai test�.
    Provider myProv=myPeer.getProvider("192.168.254.4;login=<**EDITED**>;passwd=<**EDITED**>");
    // ici crach boum Exception
    if(myProv!=null)
    Address myAddr=myProv.getAddress("8713"); // r�cup�rer mon adresse gr�ce au num�ro
    Terminal[] thaTerms=myAddr.getTerminals(); // r�cup�rer les t�l�phones reli�s � ce num�ro (il n'y en a qu'un)
    Terminal myTerm=thaTerms[0];
    System.out.println("NAME="+myTerm.getName()); // faire ce qu'on veut avec un terminal (autrement dit le faire sonner)
    catch(JtapiPeerUnavailableException unavailable)
    System.out.println("JtapiPeerUnavailableException= "+unavailable.getMessage());
    System.exit(1);
    catch(InvalidArgumentException ill)
    System.out.println(ill.getMessage());
    A la ligne
    Provider myProv=myPeer.getProvider("192.168.254.4;login=<**EDITED**>;passwd=<**EDITED**>");
    Le programme me lance l'exception :
    JtapiPeer name=com.cisco.jtapi.CiscoJtapiPeerImpl
    JtapiPeer service=<**EDITED**> (adresse ip du callManager)
    com.cisco.jtapi.PlatformExceptionImpl: Unable to create provider -- null
    at com.cisco.jtapi.CiscoJtapiPeerImpl.getProvider(com/cisco/jtapi/CiscoJtapiPeerImpl)
    at testJTAPI1.<init>(testJTAPI1.java:48)
    at testJTAPI1.main(testJTAPI1.java:131)
    Exception in thread "main"
    PlatformException est l'impl�mentation de l'exception PlatformException des sp�cifications de sun. jusque la c'est normal.
    Sun dit alors que:
    A PlatformException indicates an implementation-specific exception. The specific exceptions which implementations throw is documented in their release notes.
    Lorsque j'essaye d'aller voir chez cisco, rien si ce n'est dans les release notes:
    CSCdv03448 PlatformException to be thrown if getProvider() for unknown host
    Symptom:
    If getprovider was called for an unknown host JTAPI was not throwing PlatformException
    Condition:
    Call getProvider with a server name xyz or some other unknown host
    Workaround:
    None needed
    JTAPI now throws a PlatformException with the message "Unable to create provider -- xyz"
    Autrement dit cela signifie que si on appelle la fonction getProvider avec un hote qui n'existe pas ou n'est pas connu, le JTAPI devrait lancer l'exception
    Or moi je sp�cifie un hote dans la ligne getProviders qui existe....
    ET le programme de test qui utilise la m�me adresse fonctionne aussi !!....
    donc...je ne comprends pas ce qui se passe
    Auriez-vous une id�e quelconque ?

    hi yar all u need to do is to go to sourceforge.net and search for xtapi this is an implementation of jtapi i dont remember the version its to easy to use and ur problems will vanish in seconds dont get disheartc :) for any further help try there forums and u may also contact me [email protected] best of luck.

  • JTAPI Provider Problem

    I have Telephony Services running on my server. I have my client applications running correctly, the problem is that I want to the apps run at the web server and be access through the client regular web browser. The Jtapipeer works, but the provider cannot be created, it's says that it cannot found the server. I have done everything according the Install specs. but having no success :( What am i missing ?
    Thanks in advanced!
    Cheers!

    hey dude,
    i am building an application where i need to get a callerid and record telephonic conversation.......its a standalone application...but everytime i get this "cant get provider error" !! can u help me with this......? thanx.

  • Phone problems after upgrade from 8.5 to 9.0

    Hi everyone,
    I upgraded our UCCX cluster last week from 8.5 to 9.0, and ever since then I've been getting reports of delays when answering a call (up to ~10 seconds). I also have one user that reports not being able to hangup at the end of a call (has to wait for the customer to terminate the call). Any ideas?
    CUCM Version: 9.1.1.20000-5
    UCCX Version: 9.0.2.11001-24
    Also, I have ran the JTAPI resync to ensure that wasn't the issue.

    Thanks for the input guys, but it ended up being a weird problem resulting from extension mobility. When I upgraded the cluster, I forgot to deactivate extension mobility, and this apparently confused CUCM. Our agents use extension mobility in order to allow for moving between physical phones and IP communicator, and the CDA records showed call transfers from the CCX being routed through the subscriber (which is at a remote WAN site) before reaching the phones using extension mobility. Deactivating the service on the entire cluster, rebooting the cluster, and then reactivating the service fixed the issue.

  • Need Help In JTAPI generating a Flash Hook Signal

    Hi all,
    I am currently involved in a project that requires me to transfer a incoming call to another call. However, the lines that they are using is phonenet. Thus if I am to transfer a call in this environment, the application will use up 2 of the channals without freeing them even after the caller and the transfered party have terminated their connection(gotta physically busyout the trunk)
    I am very new in the field of telecommunication and esp to Jtapi. I would need some help from you guys as The only way that I think that could solve my problem is to send a flash hook signal then dial the number(flash hook transfer).
    Can anyone advise me on this?
    Thanks..
    Kenny

    Hey there,
    Have you tried File->Add to Library and then choose the songs off the flash drive? Another way is to head to "Edit" and then choose "Preferences". From there, head over to the "Advanced" tab and make sure there is a check mark next to "Copy files to iTunes Music folder when adding to library." See if that helps.
    B-rock

  • CUCM and UCCX JTAPI version 7.1(5) vs 7.1(5b)

    Wondering if any one has CUCM 7.1(5) running with UCCX and what JTAPI version is being used?  Then if anyone is running CUCM 71(5b) and if what version of JTAPI is being used?   Running into bug on CUCM 7.1(3) CSCtb77537 and need to upgrade.

    Hi
    I recently had a cust with this problem on 7.1(3); upgraded them to 7.1(5) and all was well afterwards.
    The version of JTAPI you use is the version of JTAPI that comes with whatever CCM version you install; so no point getting hung up on that - just remember to ensure all your JTAPI apps have their version upgraded to match (as with any TAPI apps).
    Regards
    Aaron
    Please rate helpful posts..

  • JTAPI

    Hi friends I want to use Voice modem with JTAPI is it possible.
    I have downloaded following code but it gives me error �cant get provider�
    What I have to do plz reply me soon [email protected]
    CODE
    =============PlacingPhoneCallGUI=====
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
    import javax.telephony.*;
    import javax.telephony.events.*;
    /* This class provides the graphical user interface for the placing call application. */
    public class PlacingPhoneCallGUI extends JFrame implements ActionListener
         /* Declaring the GUI variables. */
         JButton getProvider_button;
         JButton zero_button, one_button, two_button, three_button, four_button, five_button, six_button, seven_button, eight_button, nine_button, star_button, hash_button;
         JButton call_button, hang_button, redial_button, status_button;
         JTextField phoneNumText; /* Contains the destination phone number. */
         JComboBox lines_combo;
         JLabel oconn_label, otconn_label, conn_label, tconn_label;
         String phNumber = null;
         int maxPhoneLength = 15;
         /* Declaring the JTAPI variables. */
         Provider jtapiprovider = null; /* Contains the default JTAPI provider. */
         Terminal ph_terminal = null; /* The phone terminal attached to the system. */
         JTAPIOutCallObserver callobserver = null; /* Behaves as the call observer for this application. */
         Connection connection[] = null;/* This array holds the phone call connections objects. */
         Call phonecall = null; /* Behaves as the phone call. */
         TerminalConnection m_destTerminalConnection = null; /* Holds the destination terminal connection. */
         TerminalConnection m_terminalConnection = null; /* Holds the originating terminal connection. */
         /* Public constructor takes no input parameter. */
         public PlacingPhoneCallGUI()
              setTitle("Placing Phone Call");
              addWindowListener(new WindowAdapter()
                   public void windowClosing(WindowEvent we)
                        exit_from_application();
              buildGUI();
              callobserver = new JTAPIOutCallObserver(this);
              setSize(380, 300);
              setLocation(250, 100);
              setVisible(true);
         /* This method is called in the constructor. This method creates the GUI to place the Phone Call application. */
         public void buildGUI()
              /* Initializing the menu and menu items. */
              JMenu menu = new JMenu("File");
              JMenuBar menubar = new JMenuBar();
              JMenuItem exit_item = new JMenuItem("Exit");
              exit_item.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        exit_from_application();
              /* Adding the menu and the menu items in the menu bar. */
              menu.add(exit_item);
              menubar.add(menu);
              setJMenuBar(menubar);
              /* Get the content pane of the JFrame. Set the layout and the background color of the content pane. */
              Container cont = this.getContentPane();
              cont.setLayout(null);
              cont.setBackground(Color.gray);
              JLabel label = new JLabel("Please click the Get Providers button to get the list of providers.");
              label.setBounds(10,10,380,20);
              cont.add(label);
              JLabel provider_label = new JLabel("Providers");
              provider_label.setBounds(10,30,60,20);
              cont.add(provider_label);
              lines_combo = new JComboBox();
              lines_combo.setBounds(75,30, 235,20);
              lines_combo.addActionListener(this);
              cont.add(lines_combo);
              getProvider_button = new JButton("Get Providers");
              getProvider_button.addActionListener(this);
              getProvider_button.setBounds(190, 60, 120,20);
              cont.add(getProvider_button);
              JLabel dialer_label = new JLabel("Phone Dialer");
              dialer_label.setBounds(10,90, 100,20);
              cont.add(dialer_label);
              /* This panel contains the buttons from 0 -9, * and #. */
              JPanel dialer_panel = new JPanel();
              dialer_panel.setBackground(Color.gray);
              dialer_panel.setLayout(new GridLayout(4, 3, 3, 3));
              one_button = new JButton("1");
              two_button = new JButton("2");
              three_button = new JButton("3");
              four_button = new JButton("4");
              five_button = new JButton("5");
              six_button = new JButton("6");
              seven_button = new JButton("7");
              eight_button = new JButton("8");
              nine_button = new JButton("9");
              star_button = new JButton("*");
              zero_button = new JButton("0");
              hash_button = new JButton("#");
              one_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appening the phone number by 1 in the text field named phoneNumText. */
                        phoneNumText.setText(phoneNumText.getText()+"1");
              two_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 2. */
                        phoneNumText.setText(phoneNumText.getText()+"2");
              three_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 3. */
                        phoneNumText.setText(phoneNumText.getText()+"3");
              four_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 4. */
                        phoneNumText.setText(phoneNumText.getText()+"4");
              five_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 5. */
                        phoneNumText.setText(phoneNumText.getText()+"5");
              six_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 6. */
                        phoneNumText.setText(phoneNumText.getText()+"6");
              seven_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 7. */
                        phoneNumText.setText(phoneNumText.getText()+"7");
              eight_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 8. */
                        phoneNumText.setText(phoneNumText.getText()+"8");
              nine_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 9. */
                        phoneNumText.setText(phoneNumText.getText()+"9");
              zero_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 0. */
                        phoneNumText.setText(phoneNumText.getText()+"0");
              star_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appening the phone number by *. */
                        phoneNumText.setText(phoneNumText.getText()+"*");
              hash_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appening the phone number by #. */
                        phoneNumText.setText(phoneNumText.getText()+"#");
              /* Adding all the numbered buttons in the dialer_panel. */
              dialer_panel.add(one_button);
              dialer_panel.add(two_button);
              dialer_panel.add(three_button);
              dialer_panel.add(four_button);
              dialer_panel.add(five_button);
              dialer_panel.add(six_button);
              dialer_panel.add(seven_button);
              dialer_panel.add(eight_button);
              dialer_panel.add(nine_button);
              dialer_panel.add(star_button);
              dialer_panel.add(zero_button);
              dialer_panel.add(hash_button);
              /* Setting the position of the dialer panel and add it to the content pane. */
              dialer_panel.setBounds(10,115,140,110);
              cont.add(dialer_panel);
              JLabel ph_no = new JLabel("Phone Number");
              phoneNumText = new JTextField();
              phoneNumText.addKeyListener(new KeyAdapter()
                        public void keyReleased(KeyEvent ke)
                             if(phoneNumText.getText().length()>=maxPhoneLength)
                                  String str = phoneNumText.getText();
                                  phoneNumText.setText(str.substring(0,15));
              /* Initializing the Call, Hangup, Redial, and Show Status buttons. Add the action listener to the buttons. */
              call_button = new JButton("Call");
              hang_button = new JButton("Hangup");
              redial_button = new JButton("Redial");
              status_button = new JButton("Show Status");
              call_button.addActionListener(this);
              hang_button.addActionListener(this);
              redial_button.addActionListener(this);
              status_button.addActionListener(this);
              /* Setting the position of the Call, Hangup, Redial and Show Status buttons. Add the buttons to the content pane of the frame. */
              ph_no.setBounds(200, 90, 100,20);
              phoneNumText.setBounds(200, 115, 110, 20);
              call_button.setBounds(200, 140, 110, 20);
              hang_button.setBounds(200, 165, 110, 20);
              redial_button.setBounds(200, 190, 110, 20);
              status_button.setBounds(200, 215, 110, 20);
              cont.add(ph_no);
              cont.add(phoneNumText);
              cont.add(call_button);
              cont.add(hang_button);
              cont.add(redial_button);
              cont.add(status_button);
              /* Initializing the status panel. This panel can be shown or hidden by clicking on the Show Status button. */
              JPanel status_panel = new JPanel();
              status_panel.setBackground(Color.cyan);
              status_panel.setBorder(new EtchedBorder());
              status_panel.setLayout(null);
              /* Initializing the labels for the status panel. */
              JLabel label1 = new JLabel("Origin Connection");
              JLabel label2 = new JLabel("Origin Terminal Connection");
              JLabel label3 = new JLabel("Connection");
              JLabel label4 = new JLabel("Terminal Connection");
              oconn_label = new JLabel("Unknown");
              otconn_label = new JLabel("Unknown");
              conn_label = new JLabel("Unknown");
              tconn_label = new JLabel("Unknown");
              oconn_label.setForeground(Color.blue);
              otconn_label.setForeground(Color.blue);
              conn_label.setForeground(Color.blue);
              tconn_label.setForeground(Color.blue);
              /* Setting the position of different labels to be added in the status panel. */
              label1.setBounds(7, 7, 140, 20);
              label2.setBounds(157, 7, 180, 20);
              oconn_label.setBounds(7, 32, 140, 20);
              otconn_label.setBounds(157, 32, 180, 20);
              label3.setBounds(7, 67, 140, 20);
              label4.setBounds(157, 67, 180, 20);
              conn_label.setBounds(7, 92, 140, 20);
              tconn_label.setBounds(157, 92, 180, 20);
              /* Add different labels to the status panel. */
              status_panel.add(label1);
              status_panel.add(label2);
              status_panel.add(oconn_label);
              status_panel.add(otconn_label);
              status_panel.add(label3);
              status_panel.add(label4);
              status_panel.add(conn_label);
              status_panel.add(tconn_label);
              status_panel.setBounds(10, 250, 350, 120);
              cont.add(status_panel);
         /* This method is invoked when end user clicks on any button provides in the user interface. */
         public void actionPerformed(ActionEvent ae)
              /* If end user user clicks on the Call button. */
              if (ae.getSource() == call_button)
                   /* Shows the error message if an outgoing call is already placing. */
                   if (phonecall != null)
                        JOptionPane.showMessageDialog(null, "Please hangup the call first.", "Error", JOptionPane.ERROR_MESSAGE);
                        return;
                   /* Shows the error message if the end user did not specify the phone number. */
                   if (phoneNumText.getText() == null || phoneNumText.getText().trim().equals(""))
                        JOptionPane.showMessageDialog(null, "Invalid phone number entry!", "Error", JOptionPane.ERROR_MESSAGE);
                        return;
                   phNumber = ""+phoneNumText.getText().trim();
                   Address address = null;
                   /* Shows the error message if the terminal is not selected by the end user. */
                   if (ph_terminal == null)
                        JOptionPane.showMessageDialog(null, "Please select a terminal first.", "Error", JOptionPane.ERROR_MESSAGE);
                        return;
                   try
                        /* Getting the addresses associated with the particular terminal. */
                        Address addresses[] = ph_terminal.getAddresses();
                        address = addresses[0];
                   catch (Exception excp)
                        System.err.println("Exception in ph_terminal.getAddresses(): "+excp) ;
                   try
                        /* Creating the Call object and adding the observer to that Call object. */
                        phonecall = jtapiprovider.createCall();
                        phonecall.addObserver(callobserver);
                   catch (Exception excp)
                        System.err.println("Exception in jtapiprovider.createCall(): "+excp) ;
                   /* Place the telephone call. */
                   try
                        connection = phonecall.connect(ph_terminal, address, phNumber);
                   catch (Exception excp)
                        System.out.println("Exception in placing the phone call: "+excp.toString());
                   try
                        TerminalConnection[] tconnection = connection[1].getTerminalConnections();
                        m_destTerminalConnection = tconnection[0];
                        Terminal t = m_destTerminalConnection.getTerminal();
                        tconnection = connection[0].getTerminalConnections();
                        TerminalConnection m_terminalConnection = tconnection[0];
                        t.addCallObserver(callobserver);
                   catch(Exception e)
                        System.out.println("Exception getting remote terminal");
                   //StatusWindow status_window = new StatusWindow(new JFrame("parent"), false);
              else if (ae.getSource() == getProvider_button)
                   /* Create a provider by first obtaining the XTAPI implementation of JTAPI and then the default provider of the XTAPI implementation. */
                   try
                        /* Creating the provider by obtaining the XTAPI implementation of JTAPI. */
                        JtapiPeer jtapipeer = JtapiPeerFactory.getJtapiPeer("net.sourceforge.gjtapi.raw.modem.ModemProvider");
                        /* Obtaining the default provider of the selected implementation. */
                        jtapiprovider = jtapipeer.getProvider(null);
                        Terminal[] terminals = jtapiprovider.getTerminals();
                        for(int i = 0; i < terminals.length; i++)
                             /* Populating the combo box with the present terminals. */
                             lines_combo.insertItemAt(terminals, i);
                        getProvider_button.setEnabled(false);
                   catch (Exception excp)
                        JOptionPane.showMessageDialog(this, "Unable to get the provider.");
              else if (ae.getSource() == lines_combo)
                   /* This code invokes when end user selects an item from the combo box. */
                   try
                        if (ph_terminal != null)
                             /* Removing the call observer object associated with that terminal. */
                             ph_terminal.removeCallObserver(callobserver);
                        /* Instantiate the terminal object and adding the call observer to that terminal. */
                        ph_terminal = (Terminal)lines_combo.getSelectedItem();
                        ph_terminal.addCallObserver(callobserver);
                   catch (Exception e)
                        JOptionPane.showMessageDialog(this, "Unable to add the call observer to the selected terminal.");
              else if (ae.getSource() == hang_button)
                   /* This code invokes when end user clicks on the Hangup button in the user interface. */
                   try
                        for (int i=0; i<connection.length; i++)
                             try
                                  /* Closing all the connections and set the Call object to null. */
                                  connection[i].disconnect();
                                  phonecall = null;
                             catch(Exception ex)
                                  System.out.println("Exception in closing the phone call. ");
                   catch (Exception ex){}
              else if (ae.getSource() == redial_button)
                   /* This method invokes when end user clicks on the Redial button. */
                   call_button.doClick();
              else if (ae.getSource() == status_button)
                   if (status_button.getText().equals("Show Status"))
                        /* Maximize the size of the frame when end user clicks on the Show Status button. */
                        setSize(380, 440);
                        status_button.setText("Hide Status");
                   else
                        /* Minimize the size of the frame when end user clicks on the Hide Status button. */
                        setSize(380, 300);
                        status_button.setText("Show Status");
         /* This method is used to terminate the application. */
         void exit_from_application()
              hang_button.doClick();
              System.exit(0);
         /* Main method. */
         public static void main(String[] args)
              PlacingPhoneCallGUI ppc = new PlacingPhoneCallGUI();
    ====JTAPIOutCallObserver================
    import javax.telephony.*;
    import javax.telephony.events.*;
    /* The MyOutCallObserver class implements the CallObserver interface. */
    public class JTAPIOutCallObserver implements CallObserver
         PlacingPhoneCallGUI gui = null;
         /* Public constructor takes the object of PlacingPhoneCallGUI class as parameter. */
         public JTAPIOutCallObserver(PlacingPhoneCallGUI gui)
              this.gui = gui;
         /* The callChangedEvent() method is called every time an associated event with the call is raised. */
         public void callChangedEvent(CallEv[] evlist)
              for (int i = 0; i < evlist.length; i++)
                   /* Checking if the event occured is the connection event. */
                   if (evlist[i] instanceof ConnEv)
                        if (evlist[i].getID() == ConnAlertingEv.ID)
                             /* This event indicates that the state of the connection is changed to the Connection.ALERTING. */
                             gui.oconn_label.setText("ALERTING");
                             gui.conn_label.setText("ALERTING");
                        else if (evlist[i].getID() == ConnInProgressEv.ID)
                             /* This event indicates that the state of the connection is changed to the Connection.IN_PROGRESS. */
                             gui.oconn_label.setText("INPROGRESS");
                             gui.conn_label.setText("INPROGRESS");
                        else if (evlist[i].getID() == ConnConnectedEv.ID)
                             /* This event indicates that the state of the connection is changed to the Connection.CONNECTED. */
                             gui.oconn_label.setText("CONNECTED");
                             gui.conn_label.setText("CONNECTED");
                        else if (evlist[i].getID() == ConnDisconnectedEv.ID)
                             /* This event indicates that the state of the connection is changed to the Connection.DISCONNECTED. */
                             gui.oconn_label.setText("DISCONNECTED");
                             gui.conn_label.setText("DISCONNECTED");
                        else if (evlist[i].getID() == ConnUnknownEv.ID)
                             /* This event indicates that the state of the connection is changed to the Connection.UNKNOWN. */
                             gui.oconn_label.setText("UNKNOWN");
                             gui.conn_label.setText("UNKNOWN");
                        else if (evlist[i].getID() == ConnCreatedEv.ID)
                             /* This event indicates that the new connection has been created. */
                             gui.oconn_label.setText("IDLE");
                             gui.conn_label.setText("IDLE");
                   /* Checking if the event occured is the terminal connection event. */
                   else if (evlist[i] instanceof TermConnEv)
                        if (evlist[i].getID() == TermConnActiveEv.ID)
                             /* This event indicates that the state of the terminal connection object is changed to the TerminalConnection.ACTIVE. */
                             gui.otconn_label.setText("ACTIVE");
                             gui.tconn_label.setText("ACTIVE");
                        else if (evlist[i].getID() == TermConnRingingEv.ID)
                             /* This event indicates that the state of the terminal connection object is changed to the TerminalConnection.RINGING. */
                             gui.otconn_label.setText("RINGING");
                             gui.tconn_label.setText("RINGING");
                        else if (evlist[i].getID() == TermConnDroppedEv.ID)
                             /* This event indicates that the state of the terminal connection object is changed to the TerminalConnection.DROPPED. */
                             gui.otconn_label.setText("DROPPED");
                             gui.tconn_label.setText("DROPPED");
                        else if (evlist[i].getID() == TermConnUnknownEv.ID)
                             /* This event indicates that the state of the terminal connection object is changed to the TerminalConnection.UNKNOWN. */
                             gui.otconn_label.setText("UNKNOWN");
                             gui.tconn_label.setText("UNKNOWN");
                        else if (evlist[i].getID() == TermConnCreatedEv.ID)
                             /* This event indicates that a new terminal connection object has been created. */
                             gui.otconn_label.setText("IDLE");
                             gui.tconn_label.setText("IDLE");
    Hi friends I want to use Voice modem with JTAPI is it possible.
    I have downloaded following code but it gives me error �cant get provider�
    What I have to do plz reply me soon [email protected]
    CODE
    =============PlacingPhoneCallGUI=====
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
    import javax.telephony.*;
    import javax.telephony.events.*;
    /* This class provides the graphical user interface for the placing call application. */
    public class PlacingPhoneCallGUI extends JFrame implements ActionListener
         /* Declaring the GUI variables. */
         JButton getProvider_button;
         JButton zero_button, one_button, two_button, three_button, four_button, five_button, six_button, seven_button, eight_button, nine_button, star_button, hash_button;
         JButton call_button, hang_button, redial_button, status_button;
         JTextField phoneNumText; /* Contains the destination phone number. */
         JComboBox lines_combo;
         JLabel oconn_label, otconn_label, conn_label, tconn_label;
         String phNumber = null;
         int maxPhoneLength = 15;
         /* Declaring the JTAPI variables. */
         Provider jtapiprovider = null; /* Contains the default JTAPI provider. */
         Terminal ph_terminal = null; /* The phone terminal attached to the system. */
         JTAPIOutCallObserver callobserver = null; /* Behaves as the call observer for this application. */
         Connection connection[] = null;/* This array holds the phone call connections objects. */
         Call phonecall = null; /* Behaves as the phone call. */
         TerminalConnection m_destTerminalConnection = null; /* Holds the destination terminal connection. */
         TerminalConnection m_terminalConnection = null; /* Holds the originating terminal connection. */
         /* Public constructor takes no input parameter. */
         public PlacingPhoneCallGUI()
              setTitle("Placing Phone Call");
              addWindowListener(new WindowAdapter()
                   public void windowClosing(WindowEvent we)
                        exit_from_application();
              buildGUI();
              callobserver = new JTAPIOutCallObserver(this);
              setSize(380, 300);
              setLocation(250, 100);
              setVisible(true);
         /* This method is called in the constructor. This method creates the GUI to place the Phone Call application. */
         public void buildGUI()
              /* Initializing the menu and menu items. */
              JMenu menu = new JMenu("File");
              JMenuBar menubar = new JMenuBar();
              JMenuItem exit_item = new JMenuItem("Exit");
              exit_item.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        exit_from_application();
              /* Adding the menu and the menu items in the menu bar. */
              menu.add(exit_item);
              menubar.add(menu);
              setJMenuBar(menubar);
              /* Get the content pane of the JFrame. Set the layout and the background color of the content pane. */
              Container cont = this.getContentPane();
              cont.setLayout(null);
              cont.setBackground(Color.gray);
              JLabel label = new JLabel("Please click the Get Providers button to get the list of providers.");
              label.setBounds(10,10,380,20);
              cont.add(label);
              JLabel provider_label = new JLabel("Providers");
              provider_label.setBounds(10,30,60,20);
              cont.add(provider_label);
              lines_combo = new JComboBox();
              lines_combo.setBounds(75,30, 235,20);
              lines_combo.addActionListener(this);
              cont.add(lines_combo);
              getProvider_button = new JButton("Get Providers");
              getProvider_button.addActionListener(this);
              getProvider_button.setBounds(190, 60, 120,20);
              cont.add(getProvider_button);
              JLabel dialer_label = new JLabel("Phone Dialer");
              dialer_label.setBounds(10,90, 100,20);
              cont.add(dialer_label);
              /* This panel contains the buttons from 0 -9, * and #. */
              JPanel dialer_panel = new JPanel();
              dialer_panel.setBackground(Color.gray);
              dialer_panel.setLayout(new GridLayout(4, 3, 3, 3));
              one_button = new JButton("1");
              two_button = new JButton("2");
              three_button = new JButton("3");
              four_button = new JButton("4");
              five_button = new JButton("5");
              six_button = new JButton("6");
              seven_button = new JButton("7");
              eight_button = new JButton("8");
              nine_button = new JButton("9");
              star_button = new JButton("*");
              zero_button = new JButton("0");
              hash_button = new JButton("#");
              one_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appening the phone number by 1 in the text field named phoneNumText. */
                        phoneNumText.setText(phoneNumText.getText()+"1");
              two_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 2. */
                        phoneNumText.setText(phoneNumText.getText()+"2");
              three_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 3. */
                        phoneNumText.setText(phoneNumText.getText()+"3");
              four_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 4. */
                        phoneNumText.setText(phoneNumText.getText()+"4");
              five_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 5. */
                        phoneNumText.setText(phoneNumText.getText()+"5");
              six_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 6. */
                        phoneNumText.setText(phoneNumText.getText()+"6");
              seven_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 7. */
                        phoneNumText.setText(phoneNumText.getText()+"7");
              eight_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 8. */
                        phoneNumText.setText(phoneNumText.getText()+"8");
              nine_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 9. */
                        phoneNumText.setText(phoneNumText.getText()+"9");
              zero_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appending the phone number by 0. */
                        phoneNumText.setText(phoneNumText.getText()+"0");
              star_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appening the phone number by *. */
                        phoneNumText.setText(phoneNumText.getText()+"*");
              hash_button.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent ae)
                        /* Appening the phone number by #. */
                        phoneNumText.setText(phoneNumText.getText()+"#");
              /* Adding all the numbered buttons in the dialer_panel. */
              dialer_panel.add(one_button);
              dialer_panel.add(two_button);
              dialer_panel.add(three_button);
              dialer_panel.add(four_button);
              dialer_panel.add(five_button);
              dialer_panel.add(six_button);
              dialer_panel.add(seven_button);
              dialer_panel.add(eight_button);
              dialer_panel.add(nine_button);
              dialer_panel.add(star_button);
              dialer_panel.add(zero_button);
              dialer_panel.add(hash_button);
              /* Setting the position of the dialer panel and add it to the content pane. */
              dialer_panel.setBounds(10,115,140,110);
              cont.add(dialer_panel);
              JLabel ph_no = new JLabel("Phone Number");
              phoneNumText = new JTextField();
              phoneNumText.addKeyListener(new KeyAdapter()
                        public void keyReleased(KeyEvent ke)
                             if(phoneNumText.getText().length()>=maxPhoneLength)
                                  String str = phoneNumText.getText();
                                  phoneNumText.setText(str.substring(0,15));
              /* Initializing the Call, Hangup, Redial, and Show Status buttons. Add the action listener to the buttons. */
              call_button = new JButton("Call");
              hang_button = new JButton("Hangup");
              redial_button = new JButton("Redial");
              status_button = new JButton("Show Status");
              call_button.addActionListener(this);
              hang_button.addActionListener(this);
              redial_button.addActionListener(this);
              status_button.addActionListener(this);
              /* Setting the position of the Call, Hangup, Redial and Show Status buttons. Add the buttons to the content pane of the frame. */
              ph_no.setBounds(200, 90, 100,20);
              phoneNumText.setBounds(200, 115, 110, 20);
              call_button.setBounds(200, 140, 110, 20);
              hang_button.setBounds(200, 165, 110, 20);
              redial_button.setBounds(200, 190, 110, 20);
              status_button.setBounds(200, 215, 110, 20);
              cont.add(ph_no);
              cont.add(phoneNumText);
              cont.add(call_button);
              cont.add(hang_button);
              cont.add(redial_button);
              cont.add(status_button);
              /* Initializing the status panel. This panel can be shown or hidden by clicking on the Show Status button. */
              JPanel status_panel = new JPanel();
              status_panel.setBackground(Color.cyan);
              status_panel.setBorder(new EtchedBorder());
              status_panel.setLayout(null);
              /* Initializing the labels for the status panel. */
              JLabel label1 = new JLabel("Origin Connection");
              JLabel label2 = new JLabel("Origin Terminal Connection");
              JLabel label3 = new JLabel("Connection");
              JLabel label4 = new JLabel("Terminal Connection");
              oconn_label = new JLabel("Unknown");
              otconn_label = new JLabel("Unknown");
              conn_label = new JLabel("Unknown");
              tconn_label = new JLabel("Unknown");
              oconn_label.setForeground(Color.blue);
              otconn_label.setForeground(Color.blue);
              conn_label.setForeground(Color.blue);
              tconn_label.setForeground(Color.blue);
              /* Setting the position of different labels to be added in the status panel. */
              label1.setBounds(7, 7, 140, 20);
              label2.setBounds(157, 7, 180, 20);
              oconn_label.setBounds(7, 32, 140, 20);
              otconn_label.setBounds(157, 32, 180, 20);
              label3.setBounds(7, 67, 140, 20);
              label4.setBounds(157, 67, 180, 20);
              conn_label.setBounds(7, 92, 140, 20);
              tconn_label.setBounds(157, 92, 180, 20);
              /* Add different labels to the status panel. */
              status_panel.add(label1);
              status_panel.add(label2);
              status_panel.add(oconn_label);
              status_panel.add(otconn_label);
              status_panel.add(label3);
              status_panel.add(label4);
              status_panel.add(conn_label);
              status_panel.add(tconn_label);
              status_panel.setBounds(10, 250, 350, 120);
              cont.add(status_panel);
         /* This method is invoked when end user c

    He, the code is in there twice so it's not as big as it first seems.
    Your problem doesn't seem to be programming related however, it's more of a hardware problem. If the code can't get a provider, then you need to figure out why it can't. Maybe there are applications out there that you can use to test if you can get to a provider from your workstation?

  • JTAPI + Xtapi: Urgent help needed with compensation.

    Hi
    I'm new to jtapi. I'm using xtapi implementation with the following statements in Outcall.java sample code.
    import javax.telephony.*;
    import javax.telephony.events.*;
    //import MyOutCallObserver;
    public class Outcall {
      public static final void main(String args[]) {
        Provider myprovider = null;
        try {
          JtapiPeer peer = JtapiPeerFactory.getJtapiPeer("net.xtapi.XJtapiPeer");
          myprovider = peer.getProvider("MSTAPI");
        } catch (Exception excp) {
          System.out.println("Can't get Provider: " + excp.toString());
          System.exit(0);
        Address origaddr = null;
        Terminal origterm = null;
        try {
          origaddr = myprovider.getAddress("1");
          //Just get some Terminal on this Address
          Terminal[] terminals = origaddr.getTerminals();
          if (terminals == null) {
            System.out.println("No Terminals on Address.");
            System.exit(0);
          origterm = terminals[0];
        } catch (Exception excp) {
          // Handle exceptions;
        // Create the telephone call object and add an observer.
         Call mycall = null;
        try {
          mycall = myprovider.createCall();
          mycall.addObserver(new MyOutCallObserver());
        } catch (Exception excp) {
          // Handle exceptions
        try {
          Connection c[] = mycall.connect(origterm, origaddr, "5149372568");
        } catch (Exception excp) {
          System.out.println(excp.toString());
    }I have dowloaded all the jar files (xtapi.jar, mstapisp.jar, jtapi1.2.jar) and added to the library in Netbeans IDE. And i have put Xtapi.dll in the source folder (same as Outcall.java).
    When I run the project I get the following error and the program hangs execution without finishing.
    javax.telephony.InvalidArgumentException
    MyOutCallObserver.callChangedEvent
    java.lang.NullPointerException
    java.lang.NullPointerException
    I believe the above exception come is from the below line in the code.
    origaddr = myprovider.getAddress("1");
    The getAddress( ) of the provider class throws InvalidArgumentException. Can some one help me in solving the error?
    Is this error has anything to do with the my modem or the xtapi.inf file. I want to know how to get the contents for xtapi.inf file and where to place it. I'm using US Robotics Fax modem. I also tried the same code in a system wich has intel voice modem, but got the same error.
    If some one has a complete source code for java application, which can pick and answer phone calls. If it has a link from pbx to voip through the modem, it will be really great. I'm ready to buy the code from you if its is working.
    Thanks in advance for the help.
    Harun.

    Problem solved.
    Actually the exception doesn't affect the running of the program. The problem was solved when i reinstalled the modem driver and tried again.

  • Use of JTAPI in Caller ID

    Hello all, I'm doing a Computer Science degree, and my topic for this semester's programing project is Caller ID Management. I'm supposed to implement a call-logging software in Java, and JTAPI seems like a ready solution, but the problem is, I'm not quite sure how to use it, and my lecturers are clueless. I was told to use a caller ID-enabled 56K modem for my project, and I'm lost.
    I've been doing some research on how caller ID works from phone to phone, and I've read how it works, from what meagre sources I can find on the net - emphasis here on the ASCII format for the CND message, and the format of the protocol used.
    My questions are as follows:
    1) Will I be able to use JTAPI for my project? I know it's written on the JTAPI page that it can be used for call-logging, but I'm going mad trying to finish going through all the specifications provided on this site, and I'm still not even sure which package I should be looking at.
    2) If the caller ID is going to be from phone to pc, do I have to be directly worried about the protocol, and the format & content of the received data messages, or will the JTAPI methods deal with that internally?
    Unrelated request:
    If anyone has any good sites or documents on implementing Caller ID (preferably as detailed as possible), I'd be grateful if you helped me out abit. I've only managed to find two pages of something helpful: most of the info on Caller ID is too superfluous to be of any help.
    Thanks for your help! :)

    Hi
    When I was trying to compile Outcall and Incall sample code from sun website I found this error:
    "Can't get Provider: javax.telephony.JtapiPeerUnavailableException: JtapiPeer: DefaultJtapiPeer could not be instantiated."
    If you can give me a sample code that you know it will work or you know any changes needed to this sample code plz say to me, I would be glad that you give me a code that you are sure about that because I am new in JTAPI

Maybe you are looking for