如何理解Java中异步web服务客户端代码中AsyncHandler的这种用法?
我在学习编写web服务的异步客户端时遇到了这段代码。我试图理解这里如何使用如何理解Java中异步web服务客户端代码中AsyncHandler的这种用法?,java,webservices-client,Java,Webservices Client,我在学习编写web服务的异步客户端时遇到了这段代码。我试图理解这里如何使用“new asynchHandler(){…}”。我对Java比较陌生,有几件事我不了解: AsyncHandler来自javax.xml.ws.AsyncHandler,以及库存、本地或自定义对象如何成为其中的一部分。asynchHandler是什么意思 使用“newAsyncHandler(){…}”是类AsyncHandler的实例化还是实现 HandlerResponse和AsyncHandler之间的关系是什么
“new asynchHandler(){…}”
。我对Java比较陌生,有几件事我不了解:
javax.xml.ws.AsyncHandler
,以及库存、本地或自定义对象如何成为其中的一部分。asynchHandler
是什么意思AsyncHandler(){…}
”是类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的方法。您可以在代码中重写此方法
接口使用模板,模板可以是任何类型。因此,在实现该接口时,需要指定希望从服务调用返回的对象的类型