读取WS响应范围中的变量值

时间:2016-02-15 14:58:53

标签: java playframework java-8 promise playframework-2.3

void makePdfPage(String url, PdfContentByte contentByte){
    com.itextpdf.text.Font sans = UtilityMethods.getSansSerifFont(14);
    sans.setColor(80,147,225);
    ColumnText ct = new ColumnText(contentByte);
    ct.setSimpleColumn("Hello", 0, 780, 595, 830, 10, Element.ALIGN_CENTER);
    try {
        ct.go();
    } catch (DocumentException e) {
        System.out.println(e);
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



  Promise<WSResponse> out = notification.call(url);
    out.map(resp->{
        Map<String,Object> mapp= Json.fromJson(resp.asJson().get("list"), Map.class);
        PdfService.designPdf(mapp, contentByte);
        return resp;
    });
}

contentByte空白到desginPdf

它的异步,这就是为什么它没有contentByte的值,可以通过任何其他方式,以便我可以同步使用或以任何其他方式来解决我的问题。

WSResponse resp = out.get(10000);

失败

2 个答案:

答案 0 :(得分:1)

我没有Java承诺的经验,但根据我在Scala的经验,我会尝试这样的事情:

Promise<WSResponse> out = notification.call(url);
WSResponse res = out.map(resp->{
  Map<String,Object> mapp= Json.fromJson(resp.asJson().get("list"), Map.class);
  PdfService.designPdf(mapp, contentByte);
  return resp;
});
//Do something with res

答案 1 :(得分:0)

您应将contentByte变量声明为 final

void makePdfPage(String url, final PdfContentByte contentByte){

此外,您应该为失败案例添加恢复代码

 map(...)
 .recover(new Function<Throwable,JsonNode>() {
   public JsonNode apply(Throwable ex) {
        if(Logger.isErrorEnabled()){
            Logger.error("retrieving api info",ex);
        }
        return null; //TODO
    }
  });