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);
失败
答案 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
}
});