IBM webMethods Hybrid Integration

IBM webMethods Hybrid Integration

Join this online group to communicate across IBM product users and experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.

 View Only
  • 1.  Not able to Run Shell Script using Java Service

    Posted Tue June 11, 2002 04:46 PM

    Hi All,

    I am trying to run a Shell Script using a java Service. It always gives an IO Exception and not running the Script.

    String cmds = new String[2];
    cmds[0] = “ls -la”
    cmds[1] = “pwd”

    // execute the command
    Process pro = Runtime.getRuntime().exec(cmds);
    // wait until it’s done executing
    pro.waitFor();

    // what did the process output from the Input pipe back to
    // this process (okay, who named this stuff)?
    InputStream out = pro.getInputStream();

    // output it (really slowly)
    int i;

    while ((i = out.read()) != -1) System.out.println((char) i);

    //

    This is the code which is trying to run the Script. The shell script basically remove the files from the directory based on the create date.

    /usr/bin/find /work/b2b/valunet/temp -mtime +14 -exec rm {} ;

    Any Suggestions.


    #Integration-Server-and-ESB
    #Flow-and-Java-services
    #webMethods


  • 2.  RE: Not able to Run Shell Script using Java Service

    Posted Wed June 12, 2002 01:29 PM

    Muru, try replacing your “while” code with the following:

     
    try { 
    while (true) { 
    // Get the bytes and return as an int 
    int i = out.read(); 
    
    // -1 indicates the end of the stream 
    if (i == -1) break; 
    
    // Cast the int into a char 
    char c = (char) i;  
    System.out.print(c);     
    } 
    } 
    catch (IOException e) { 
    System.err.println(e);  
    } 
    } 
    

    Also, don’t forget that Unicode characters are generally not handled properly within input and output streams; The casting of the byte into a char will return a ISO Latin-1 character.


    #Flow-and-Java-services
    #webMethods
    #Integration-Server-and-ESB


  • 3.  RE: Not able to Run Shell Script using Java Service

    Posted Wed June 12, 2002 03:26 PM

    Thanks Dan,

    No luck. I tried Using the one in Toolbox i get the same result IO Exception. I am attaching that code here. To handle this as a short term solution we delete all the files in the directory using a java service and schedule it for once in a week.

    This is the code from ToolBox.

    //Input Cursor
    IDataHashCursor pipelineCursor = pipeline.getHashCursor();

    //Declare Input and Output Variables
    String executionParams = null;
    String stdout = " ", exitValue = " ", stderr = " ";
    Object executionException = new Object();

    if ( pipelineCursor.first ( “executionParams” ) )
    {
    executionParams = (String)pipelineCursor.getValue();
    }

    //Try to execute the shell command

    try
    {
    Process p;
    //Execute the command
    p = Runtime.getRuntime().exec(executionParams);
    p.waitFor();

    //Get exitValue
    int exitvalue = p.exitValue();
    exitValue = Integer.toString(exitvalue);

    //Get the stdout and error streams of the process object
    //Note: The input stream obtains data piped from the standard output stream
    //of the process it represents.
    InputStream inputStream = p.getInputStream();
    InputStream errorStream = p.getErrorStream();

    //Get stderr
    BufferedReader errbfr = new BufferedReader( new InputStreamReader ( errorStream ) );
    StringBuffer errstrbfr = new StringBuffer();
    int b;

    while ( ( b = (int) errbfr.read()) != -1 )
    {
    char c = (char) b;
    errstrbfr.append(c);
    }

    stderr = errstrbfr.toString();

    //Get stdout
    BufferedReader outbfr = new BufferedReader ( new InputStreamReader (inputStream) );
    StringBuffer outstrbfr = new StringBuffer();
    int d;

    while ( (d = (int) outbfr.read()) != -1)
    {
    char e = (char) d;
    outstrbfr.append(e);
    }

    stdout = outstrbfr.toString();
    }
    catch (Exception e)
    {
    IDataHashCursor pipelineCursor_1 = pipeline.getHashCursor();
    pipelineCursor_1.last();
    pipelineCursor_1.insertAfter( “executionException”, e);
    pipelineCursor_1.destroy();
    }

    IDataHashCursor pipelineCursor_1 = pipeline.getHashCursor();
    pipelineCursor_1.last();
    pipelineCursor_1.insertAfter ( “stdout”, stdout );
    pipelineCursor_1.insertAfter ( “stderr”, stderr );
    pipelineCursor_1.insertAfter ( “exitValue”, exitValue );
    pipelineCursor_1.destroy();


    #webMethods
    #Flow-and-Java-services
    #Integration-Server-and-ESB


  • 4.  RE: Not able to Run Shell Script using Java Service

    Posted Wed June 12, 2002 05:06 PM

    Can you litter your code with “System.out.println” to identify where the code fails? Maybe that will help spot the issue.

    In the meanwhile, it is good to know that you have a workaround.


    #Integration-Server-and-ESB
    #Flow-and-Java-services
    #webMethods


  • 5.  RE: Not able to Run Shell Script using Java Service

    Posted Wed June 12, 2002 05:44 PM

    This might be a permissions issue. To get my “shell via java” program to work, I needed to modify a file called java.policy.


    #Integration-Server-and-ESB
    #Flow-and-Java-services
    #webMethods


  • 6.  RE: Not able to Run Shell Script using Java Service

    Posted Wed June 12, 2002 07:31 PM

    Dan,

    I am still looking in to that Service to get the proper error message.

    Mherzog,

    Which java file we need change we are running b2b server on solaris box i can see more than one java.policy files i can see one in b2b server/jvm/lib/. What needs to be changed if you can give me more details that would help us lot.

    Thanks,
    Muru.


    #webMethods
    #Integration-Server-and-ESB
    #Flow-and-Java-services


  • 7.  RE: Not able to Run Shell Script using Java Service

    Posted Thu June 13, 2002 02:00 PM

    Hi Muru - try splitting the “-al” from the “ls” as a seperate cmds array entry.

    We’ve had the same problems. We found using a command format of “sh -c command” to be the most reliable solution. i.e. In terms of your program, this worked for us

    cmds[0] = “/bin/sh”
    cmds[1] = “-c”
    cmds[1] = “find blah blah blah”


    #webMethods
    #Integration-Server-and-ESB
    #Flow-and-Java-services