title: Calling AS/400 RPG Programs from Java
body: <p>I want to call AS/400 RPG Programs from java, but I'm facing an error as below</p>
  
  <blockquote>
    <p>com.ibm.as400.data.PcmlException: Exception received: [com.ibm.as400.access.ObjectDoesNotExistException] /QSYS.LIB/%LIBL%.LIB/GETKURSJAV.PGM: Object does not exist.
                    at com.ibm.as400.data.ProgramCallDocument.callProgram(ProgramCallDocument.java:458)
                    at CallRPG.main(CallRPG.java:34)
    Caused by: com.ibm.as400.access.ObjectDoesNotExistException: /QSYS.LIB/%LIBL%.LIB/GETKURSJAV.PGM: Object does not exist.
                    at com.ibm.as400.access.RemoteCommandImplRemote.runProgramOffThread(RemoteCommandImplRemote.java:595)
                    at com.ibm.as400.access.RemoteCommandImplRemote.runProgram(RemoteCommandImplRemote.java:532)
                    at com.ibm.as400.access.ProgramCall.run(ProgramCall.java:780)
                    at com.ibm.as400.data.PcmlProgram.callProgram(PcmlProgram.java:681)
                    at com.ibm.as400.data.PcmlDocument.callProgram(PcmlDocument.java:462)
                    at com.ibm.as400.data.ProgramCallDocument.callProgram(ProgramCallDocument.java:445)
                    ... 1 more</p>
  </blockquote>
  
  <p>and this is my java code</p>
  
  <pre><code>import com.ibm.as400.access.AS400;
  import com.ibm.as400.access.AS400Message;
  import com.ibm.as400.access.ProgramParameter;
  import com.ibm.as400.data.PcmlException;
  import com.ibm.as400.data.ProgramCallDocument;
  
  public class CallRPG {
  
  public static void main(String[] args) {
      // TODO Auto-generated method stub
  
      AS400 as400 = null;
  
      String host = "10.2.62.7";
      String username = "USERNAME";
      String password = "PASSWORD";
  
      as400 = new AS400(host, username, password);
  
      if (as400 == null) {
          System.out.println("Connection Failed");
      } else {
          System.out.println("Connection Success");
      }
      ProgramCallDocument pcml;
  
      try {
          pcml = new ProgramCallDocument(as400, "getkursjav.pcml");
          pcml.setValue("GETKURSJAV.CCCKRS", "51");
          pcml.setValue("GETKURSJAV.IDXKRS", "5");
  
          // call the program
          boolean rc = pcml.callProgram("GETKURSJAV");
          if (rc == false) {
              System.out.println("Program failed");
          } else {
  
              int outputData = (int) pcml.getValue("GETKURSJAV.ZRTNKRS");
              System.out.println(outputData / 100000);            
          }
      } catch (PcmlException pe) {
          System.out.println(" Caught Exception ");
          pe.printStackTrace();
      } finally {
          System.exit(0);
      }
  
  }
  
  }
  </code></pre>
  
  <p>and this is my pcml file</p>
  
  <pre><code>&lt;pcml version="4.0"&gt;
     &lt;program name="GETKURSJAV" path="/QSYS.LIB/%LIBL%.LIB/GETKURSJAV.PGM"&gt;
        &lt;data name="CCCKRS" type="packed" length="2" precision="0" usage="input" /&gt;
        &lt;data name="IDXKRS" type="packed" length="2" precision="0" usage="input" /&gt;
        &lt;data name="ZRTNKRS" type="char" length="10" usage="output" /&gt;
     &lt;/program&gt;
  &lt;/pcml&gt;
  </code></pre>
  
  <p>what's wrong with my code ?
  Is I need to add as400 CURLIB and PRGLIB to my java code ? if yes, how can I add the libraries ?</p>