[英]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.