如何理解Java中异步web服务客户端代码中AsyncHandler的这种用法?

如何理解Java中异步web服务客户端代码中AsyncHandler的这种用法?,java,webservices-client,Java,Webservices Client,我在学习编写web服务的异步客户端时遇到了这段代码。我试图理解这里如何使用“new asynchHandler(){…}”。我对Java比较陌生,有几件事我不了解: AsyncHandler来自javax.xml.ws.AsyncHandler,以及库存、本地或自定义对象如何成为其中的一部分。asynchHandler是什么意思 使用“newAsyncHandler(){…}”是类AsyncHandler的实例化还是实现 HandlerResponse和AsyncHandler之间的关系是什么

我在学习编写web服务的异步客户端时遇到了这段代码。我试图理解这里如何使用
“new asynchHandler(){…}”
。我对Java比较陌生,有几件事我不了解:

  • AsyncHandler来自
    javax.xml.ws.AsyncHandler
    ,以及库存、本地或自定义对象如何成为其中的一部分。
    asynchHandler
    是什么意思
  • 使用“new
    AsyncHandler(){…}
    ”是类AsyncHandler的实例化还是实现
  • HandlerResponse和AsyncHandler之间的关系是什么
  • 代码如下:

    public class StockWebServiceClientCallbackMainMyCopy {
        private static Logger log = Logger.getLogger(StockWebServiceClientCallbackMain.class.getName());
    
        @SuppressWarnings("unchecked")
        public static void main(String[] args) throws Exception {
            final Stock stockPort = new StockService().getStockPort();
            log.info("Got StockService port successfully");
    
            final int thresh = 2;
            // TODO: (53.01) Call async method passing in callback method
            //               In the callback method, print out all the items and exit
            //               Important: call System.exit() from callback
            stockPort.getStockItemsWithQuantityLessThanAsync(thresh, new AsyncHandler<Inventory>(){
                @Override
                public void handleResponse(Response<Inventory> response) {
                    log.info("Callback invoked");
                    try{
                        Inventory inventory = response.get();
                        for (Item item : inventory.getItems()){
                            System.out.println(item.getProductId() + " " + item.getQuantity());
                        }
                        System.exit(0);
                    }
                    catch(Exception e){
                        e.printStackTrace();
                    }
                }           
            });
    
            // TODO: (53.02) Note simulation of other activity using Thread.sleep()
            while (true){
                try{
                    Thread.sleep(1000);
                } catch (InterruptedException e){
                    // ok
                }
            }
        }
    }
    
    公共类StockWebServiceClientCallbackMainMyCopy{
    私有静态记录器log=Logger.getLogger(StockWebServiceClientCallbackMain.class.getName());
    @抑制警告(“未选中”)
    公共静态void main(字符串[]args)引发异常{
    最终库存stockPort=new StockService().getStockPort();
    log.info(“成功获取StockService端口”);
    最终整数阈值=2;
    //TODO:(53.01)调用异步方法传入回调方法
    //在回调方法中,打印出所有项并退出
    //重要提示:从回调调用System.exit()
    getStockItemsWithQuantityLessThanAsync(thresh,new asynchHandler()){
    @凌驾
    公共无效处理响应(响应){
    log.info(“调用回调”);
    试一试{
    库存=响应。获取();
    对于(项目:inventory.getItems()){
    System.out.println(item.getProductId()+“”+item.getQuantity());
    }
    系统出口(0);
    }
    捕获(例外e){
    e、 printStackTrace();
    }
    }           
    });
    //TODO:(53.02)注意使用Thread.sleep()模拟其他活动
    while(true){
    试一试{
    睡眠(1000);
    }捕捉(中断异常e){
    //嗯
    }
    }
    }
    }
    
    javax.xml.ws.asynchHandler是一个接口。您在代码中所做的是创建实现此接口的“匿名”类的实例

    接口(AsyncHandler)定义了一个名为HandlerResponse的方法。您可以在代码中重写此方法

    接口使用模板,模板可以是任何类型。因此,在实现该接口时,需要指定希望从服务调用返回的对象的类型