Closed leiblix closed 8 years ago
Toto už v Krameriu je, jenom se to zřejmě zapomnělo zdokumentovat.
Muzes to prosim trochu popsat. Koukal jsem na to nepodarilo se mi stahnout pdf pres napr. http://kramerius.mzk.cz/search/api/v5.0/pdf/parent?pid=uuid:530719f5-ee95-4449-8ce7-12b0f4cadb22&numer=2
Promiň, myslel jsem, že to bude fungovat o něco líp, já to neimplementoval. Dokumentace k tomu není, vidím taky jenom tento kód. Popíš ti to později, dnes už stíhám akorát přiložit stacktrace
V 27, 2015 2:51:42 ODP. cz.incad.kramerius.rest.api.k5.client.pdf.PDFResource parent
SEVERE: null
java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:454)
at java.lang.Integer.parseInt(Integer.java:527)
at cz.incad.kramerius.rest.api.k5.client.pdf.PDFResource.parent(PDFResource.java:195)
at sun.reflect.GeneratedMethodAccessor1122.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263)
at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178)
at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at cz.incad.Kramerius.CORSFilter.doFilter(CORSFilter.java:32)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at cz.incad.Kramerius.security.basicauth.AuthFilter.basicAuth(AuthFilter.java:125)
at cz.incad.Kramerius.security.basicauth.AuthFilter.doFilter(AuthFilter.java:86)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:589)
at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:394)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:776)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:705)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:898)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:744)
Ok,
chyba v tom stacktracu by mela nastat jen pokud nevyplnim parametr number. Pokud ho vyplnim, tak bude chyba jinde.
Kazdopadne takto to spadlo na pekne veci: if (number == null || number.trim().equals("")) number = "" + (Integer.parseInt(number) - 1);
Kdyz je number null, tak ho pojdme parsovat jako integer :) Hold Java neni Javascript :)
Heh :)
Jinak už vidím proč ten tvůj odkaz nefunguje, máš tam překlep /s/numer/number/
http://kramerius.mzk.cz/search/api/v5.0/pdf/parent?pid=uuid:530719f5-ee95-4449-8ce7-12b0f4cadb22&number=2 funguje :-)
Jej :) Super, diky.
Vola se tam checkNumber(String number) z https://github.com/ceskaexpedice/kramerius/blob/master/rest/src/main/java/cz/incad/kramerius/rest/api/k5/client/pdf/AbstractPDFResource.java
Kontroluje se, ze number nepresahlo limit, ktery si predpokladam nastavuje admin kazdeho Krameria sam. Zjistim nejak tento limit? Pokud jeden Kramerius ma limt 100 a jiny Kramerius limit 200. Tak jak to mam v klientovi omezit? Mohl by byt dotaz na ty properties - nevim co tam je, citlive informace by se posilat nemely, ale tyhle konfiguracni hodnoty, ktere by se mely promitnout do UI by mely byt pres API dostupne.
Mozna by taky bylo dobre opravit tu podivnost tady: https://github.com/ceskaexpedice/kramerius/blob/master/rest/src/main/java/cz/incad/kramerius/rest/api/k5/client/pdf/PDFResource.java#L195
A misto toho (pokud neni vyplneny parametr number) vygenerovat pdf pro cely dokument. V klientovi budu vzdy number zadavat (pocet stranek znam a chci to mit pod kontrolou), ale opravit by se to mohlo.
V Incad klientovi obchází API a naplní si patřičný skript v šabloně zde https://github.com/moravianlibrary/kramerius/blob/master/client/src/main/webapp/WEB-INF/html_header.vm
Samozřejmě to má být v API....takto toho klienta nejde plně implementovat
Mohl by byt dotaz na ty properties - nevim co tam je, citlive informace by se posilat nemely, ale tyhle konfiguracni hodnoty, ktere by se mely promitnout do UI by mely byt pres API dostupne.
v 90 % to citlivé hodnoty jsou, buď to jsou hesla, nebo různé cesty a jiná interní nastavení. Myslím, že nebude vadit, že těch pár zajímavých konfiguračních direktiv přidáme do #11
Nakonec pouzivam tu druhou metodu pro generovani PDF ii) api/v5.0/pdf/selection?pids=PID_ARRAY protoze potrebuju mit moznost vybrat stranky OD - DO nebo vygenerovat PDF pro jednu konkretni stranku. Nevyhoda je, ze musim explicitne vyjmenovat vsechny stranky v pids parametru a url tak muze byt moc dlouhe, u 150 stranek (pids parametr v url ma delku 150*48-1=7199) uz to haze: 413 (Request Entity Too Large)
i) api/v5.0/pdf/parent?pid=PARENT_PID&number=N dovoluje vygenerovat jen prvnich N stranek. Chtelo by to u teto metody pridat parametr offset: api/v5.0/pdf/parent?pid=PARENT_PID&number=N&offset=O pro vygenerovani N po sobe jdoucich stranek pocinaje strankou O Je tam sice parametr firstPageType, ale ten resi neco jineho.
V tuhle chvili neni napriklad mozne z 500 strankoveho dokumentu vygenerovat PDF se strankami 100 - 300 Dalsi moznosti by bylo volani ii) pres POST a nepredavat tak pids array v url
Uzivateli nabizim 3 moznosti u generovani PDF - treti moznost bych za stavajicich podminek musel omezit na maximalni rozsah 100 stran. Pokud by se to vyzadovalo, tak bych jeste pridal 4. moznost, kdy si uzivatel vybere stranky libovolne.
Endpoint v API, přes které půjde vygenerovat PDF.
Parametrem je seznam uuid, v případě jiného modelu než page, se přihodí i potomci