Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有终止CXF web服务调用的方法?_Java_Web Services_Cxf - Fatal编程技术网

Java 有没有终止CXF web服务调用的方法?

Java 有没有终止CXF web服务调用的方法?,java,web-services,cxf,Java,Web Services,Cxf,我正在使用CXF调用web服务。它的使用方法很简单,如文档中所述: HelloService service = new HelloService(); Hello client = service.getHelloHttpPort(); String result = client.sayHi("Joe"); 当需要时间时,如何终止此服务呼叫 我只发现了一个相关的问题,但这并没有提供任何解决方案 我认为这更多的是web服务器的功能。例如,如果您使用Jetty为您的CXF内容提供服务,那么您

我正在使用CXF调用web服务。它的使用方法很简单,如文档中所述:

HelloService service = new HelloService();
Hello client = service.getHelloHttpPort();

String result = client.sayHi("Joe");
当需要时间时,如何终止此服务呼叫

我只发现了一个相关的问题,但这并没有提供任何解决方案


我认为这更多的是web服务器的功能。例如,如果您使用Jetty为您的CXF内容提供服务,那么您可以将线程池设置为监视线程的内容

ThreadPoolExecutor pool = new ThreadPoolExecutor(...);
ExecutorService svc = new ControlledExecutorService(pool);
server.setThreadPool(new org.eclipse.jetty.util.thread.ExecutorThreadPool(svc));
然后是定制executor服务(抱歉,所有代码都直接在浏览器中输入。我在一台没有Java的iPad上。因此您可能需要做一些轻微的调整,但有用的部分应该在这里):

公共类ControlleExecutorService实现ExecutorService{
私人遗嘱执行人;
公共控制的ExecutorService(ExecutorService包装){
es=包裹;
}
@凌驾
public void execute(最终可运行命令){
Future=submit(新的可调用(){
公共布尔调用()引发异常{
command.run();
返回true;
}
});
//对你的未来进行适当的监控并打断它
//使用Future.cancel(true),如果需要。
}
}
确保将
true
传递给,以便发送中断


还请记住,与任何线程一样,仅仅因为您发送了一个中断,并不意味着它会遵守。您必须在线程中进行一些工作,以确保它们的行为良好。值得注意的是,定期检查
Thread.currentThread().isInterrupted()
并正确处理
InterruptedException
,将其拾取并优雅地停止任务,而不是让异常破坏一切。

我认为这更像是web服务器的一个功能。例如,如果您使用Jetty为您的CXF内容提供服务,那么您可以将线程池设置为监视线程的内容

ThreadPoolExecutor pool = new ThreadPoolExecutor(...);
ExecutorService svc = new ControlledExecutorService(pool);
server.setThreadPool(new org.eclipse.jetty.util.thread.ExecutorThreadPool(svc));
然后是定制executor服务(抱歉,所有代码都直接在浏览器中输入。我在一台没有Java的iPad上。因此您可能需要做一些轻微的调整,但有用的部分应该在这里):

公共类ControlleExecutorService实现ExecutorService{
私人遗嘱执行人;
公共控制的ExecutorService(ExecutorService包装){
es=包裹;
}
@凌驾
public void execute(最终可运行命令){
Future=submit(新的可调用(){
公共布尔调用()引发异常{
command.run();
返回true;
}
});
//对你的未来进行适当的监控并打断它
//使用Future.cancel(true),如果需要。
}
}
确保将
true
传递给,以便发送中断


还请记住,与任何线程一样,仅仅因为您发送了一个中断,并不意味着它会遵守。您必须在线程中进行一些工作,以确保它们的行为良好。值得注意的是,定期检查
Thread.currentThread().isInterrupted()
并正确处理
InterruptedException
,以将其拾取并优雅地停止任务,而不是让异常破坏一切。

感谢您的回答。不幸的是,cancel(true)不会中断web服务调用。上述链接中也讨论了这一点。一个可能的解决方案是使用MTOM,但在这种情况下,需要在服务器端进行配置。谢谢您的回答。不幸的是,cancel(true)不会中断web服务调用。上述链接中也讨论了这一点。一种可能的解决方案是使用MTOM,但在这种情况下,需要在服务器端进行配置。