簡體   English   中英

從Java調用Perl腳本(Eclipse中的JAX-WS)

[英]Calling Perl script from Java (JAX-WS in Eclipse)

我有一個JAX-WS Web服務,它接收一個字符串作為參數,調用Perl腳本,並返回轉換成大寫形式的字符串。 它在Tomcat 8(Eclipse上的localhost)上運行。

從控制台輸入時:

curl -X POST --data "mystring=HelloWorld" http://localhost:8080/MyServices/api/generatePath

除Perl調用外,一切正常。 在調試器上,我看到該行已執行,但顯然沒有任何反應(甚至沒有錯誤)。 如果我從控制台運行perl /home/me/workspace/match.pl ,則效果很好。 match.pl文件的路徑正確。

另外, process.exitValue()返回2。

@Path("/")
public class MyServices {
    @POST
    @Path("/generatePath")
    @Produces(MediaType.APPLICATION_JSON)

    public Response generatePathService(
            @FormParam("mystring") String myString) {

        Process process = null;

        try {
            process = Runtime.getRuntime().exec("perl /home/me/workspace/match.pl --lang en");
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

        return Response.status(200).entity(myString.toUpperCase()).build();
    }
}

我前段時間也有類似的東西。 對我來說,解決方案是“接受”程序的輸出。 像這樣:

Process p = Runtime.getRuntime().exec(cmd);
final InputStream is = p.getInputStream();
new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            while (is.available() != 0) {
                is.read();
            }
        } catch (IOException ex) {
        }
    }
}).start();

您還應該嘗試使用p.getErrorStream()獲取錯誤流。 一種替代方法是以這種方式更改您的perl程序,以使沒有任何內容可以打印為標准輸出或錯誤輸出。

或者,您調用Shell腳本並將輸出重定向到dev / null(類似於blabla> / dev / null之類的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM