从 Java 调用 Perl 脚本(Eclipse 中的 JAX-WS)
Calling Perl script from Java (JAX-WS in Eclipse)
我有一个 JAX-WS 网络服务,它接收一个字符串作为参数,调用一个 Perl 脚本,然后 return 将字符串转换为大写。它在 Tomcat 8(Eclipse 上的本地主机)上 运行ning。
当我从控制台输入时:
curl -X POST --data "mystring=HelloWorld" http://localhost:8080/MyServices/api/generatePath
除 Perl 调用外一切正常。在调试器上,我看到该行已执行,但显然没有任何反应(甚至没有错误)。如果我从控制台 运行 perl /home/me/workspace/match.pl
它工作得很好。 match.pl 文件的路径是正确的。
此外,process.exitValue()
return 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();
}
}
前段时间我得到了类似的东西。我的解决方案是 'accept' 程序的输出。像这样:
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`。
我有一个 JAX-WS 网络服务,它接收一个字符串作为参数,调用一个 Perl 脚本,然后 return 将字符串转换为大写。它在 Tomcat 8(Eclipse 上的本地主机)上 运行ning。
当我从控制台输入时:
curl -X POST --data "mystring=HelloWorld" http://localhost:8080/MyServices/api/generatePath
除 Perl 调用外一切正常。在调试器上,我看到该行已执行,但显然没有任何反应(甚至没有错误)。如果我从控制台 运行 perl /home/me/workspace/match.pl
它工作得很好。 match.pl 文件的路径是正确的。
此外,process.exitValue()
return 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();
}
}
前段时间我得到了类似的东西。我的解决方案是 'accept' 程序的输出。像这样:
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`。