2016-02-15 26 views
9
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 będzie pusta do desginPdfczyta wartość zmiennej w WS zabaw response Rozszerzono zakres

jej będzie asynchronicznie tak to dlaczego jej nie posiadających wartość contentByte, może jakiś inny sposób, więc mogę się synchronicznie używać lub inny sposób na rozwiązanie mojego problemu.

WSResponse resp = out.get(10000); 

się nie powiedzie

+0

Skąd pochodzi contentByte? to jest zmienna globalna? lub jest dostępny w bloku odpowiedzi? – Tomer

Odpowiedz

1

nie mam doświadczenia z Java obiecuje, ale w oparciu o moje doświadczenia w Scala, by Próbowałem coś takiego:

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 
0

powinien zadeklarować zmienna contentByte jak końcowego

void makePdfPage(String url, final PdfContentByte contentByte){ 

Dodatkowo powinieneś dodać kod odzyskiwania dla przypadku niepowodzenia

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