ceskaexpedice / kramerius

System Kramerius
GNU General Public License v3.0
45 stars 26 forks source link

Akubra nepracuje korektně se zvukovými streamy #706

Closed rzeh4n closed 4 years ago

rzeh4n commented 4 years ago

Následující balík FOXML obsahuje objekty soundRecording, soundUnit a track. Import a indexace do K4 s Akubrou (Kramerius 6.0.1 alpha) proběhne úspěšně. s2_zdravy_nemocny.zip

Nefunguje ale přehrávání, získávání dat z následujících endpointů vyhazuje chybu:

http://localhost:8080/search/audioProxy/uuid:a7244f11-a0b6-4e91-962a-cd4cb3138655/OGG (používá starý klient, který je součástí jádra) http://localhost:8080/search/api/v5.0/item/uuid:a7244f11-a0b6-4e91-962a-cd4cb3138655/streams/MP3 (používají nový klienti)

Definice datastreamu vypadá nějak takto:

 <foxml:datastream ID="MP3" STATE="A" CONTROL_GROUP="E" VERSIONABLE="true">
        <foxml:datastreamVersion ID="MP3.0" LABEL="Mp3 version of this audio track" MIMETYPE="audio/mpeg">
            <foxml:contentLocation TYPE="URL" REF="http://audio.test.digitallibrary.cz/meditor/kpw0822866/a7244f11-a0b6-4e91-962a-cd4cb3138655.mp3"/>
        </foxml:datastreamVersion>
    </foxml:datastream>

Připomínám, že Kramerius tady řeší autorizaci, typicky audio server není veřejně přístupný, např. tady bylo url původně toto: http://audioserver.nm.cz/meditor/kpw0822866/a7244f11-a0b6-4e91-962a-cd4cb3138655.mp3

A chybová hláška:

java.lang.UnsupportedOperationException: this is unsupported
    cz.incad.kramerius.fedora.impl.FedoraAccessAkubraImpl.getDataStreamXmlAsDocument(FedoraAccessAkubraImpl.java:185)
    cz.incad.kramerius.impl.CachedFedoraAccessImpl.getDataStreamXmlAsDocument(CachedFedoraAccessImpl.java:308)
    cz.incad.kramerius.security.SecuredFedoraAccessImpl.getDataStreamXmlAsDocument(SecuredFedoraAccessImpl.java:264)
    cz.incad.kramerius.audio.urlMapping.CachingFedoraUrlManager.getUrlFromFedora(CachingFedoraUrlManager.java:123)
    cz.incad.kramerius.audio.urlMapping.CachingFedoraUrlManager.getAudiostreamRepositoryUrl(CachingFedoraUrlManager.java:112)
    cz.incad.kramerius.audio.AudioStreamForwardUtils.GET(AudioStreamForwardUtils.java:52)
    cz.incad.kramerius.rest.api.k5.client.item.ItemResource.stream(ItemResource.java:241)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
    com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
    com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
    com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
    com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
    com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442)
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
    com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:290)
    com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:280)
    com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:184)
    com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:89)
    com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:121)
    com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:133)
    cz.incad.kramerius.auth.thirdparty.ExtAuthFilter.doFilter(ExtAuthFilter.java:62)
    cz.incad.Kramerius.CORSFilter.doFilter(CORSFilter.java:26)
    cz.incad.kramerius.auth.basic.AuthFilter.doFilter(AuthFilter.java:90)
    cz.incad.Kramerius.ClientClosedRequestFilter.doFilter(ClientClosedRequestFilter.java:25)
vlahoda commented 4 years ago

Opraveno v commitu 69ed128d. URL externiho datastreamu se ted ziskava explicitne primo z objektoveho modelu FOXML, neni uz tedy potreba ziskavat "surove" XML datastreamu a aplikovat na nej xpath. A dekuju za ty opravy tykajici se createdDate ...

rzeh4n commented 4 years ago

Ověřil jsem, že už to funguje správně. Díky.