[
https://issues.apache.org/jira/browse/JENA-2074?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jon updated JENA-2074:
----------------------
Description:
If the data loaded into Jena contains some badly-formed absolute URIrefs as the
object of some triples (eg.
</tmp/release/crawl/2021/02/19/page.1g2y60c-x43zpnt82fv>)..
then, when I query Fuseki passing HTTP header...
- ✅ "Accept: application/sparql-results+xml" - the results come back the same
as was loaded.
- ✅ "Accept: application/n-triples" - the results come back the same as was
loaded.
- ❌ "Accept: application/rdf+xml" - Fuseki logs the following exception:
{code:java}
13:09:11 ERROR Fuseki :: Internal error
java.lang.IllegalArgumentException: setContentLength(267) when already written
8192
at
org.eclipse.jetty.server.Response.setContentLength(Response.java:823)
~[fuseki-server.jar:3.17.0]
at
javax.servlet.ServletResponseWrapper.setContentLength(ServletResponseWrapper.java:161)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.HttpServletResponseTracker.setContentLength(HttpServletResponseTracker.java:87)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.ServletOps.writeMessagePlainText(ServletOps.java:73)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.ServletOps.writeMessagePlainTextError(ServletOps.java:86)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.ServletOps.responseSendError(ServletOps.java:55)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.ActionExecLib.execAction(ActionExecLib.java:120)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.server.Dispatcher.dispatchAction(Dispatcher.java:118)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.server.Dispatcher.process(Dispatcher.java:110)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.server.Dispatcher.dispatch(Dispatcher.java:96)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.FusekiFilter.doFilter(FusekiFilter.java:51)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:284)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:247)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:602)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1612)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1582)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:766)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
~[fuseki-server.jar:3.17.0]
at org.eclipse.jetty.server.Server.handle(Server.java:516)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
~[fuseki-server.jar:3.17.0]
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
[fuseki-server.jar:3.17.0]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)
[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
[fuseki-server.jar:3.17.0]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
[fuseki-server.jar:3.17.0]
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:773)
[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:905)
[fuseki-server.jar:3.17.0]
at java.lang.Thread.run(Thread.java:834) [?:?]
{code}
Seems the first 8192 bytes of the query results have been sent before the bad
URIref is encountered, so it's too late to send just the error message on its
own.
The main problem is that the error message that Fuseki is trying to report
gets lost, going neither to the client nor the log file. The actual error looks
like this:
{code:java}
Failed to write output in RDF/XML: Only well-formed absolute URIrefs can be
included in RDF/XML output:
</tmp/release/crawl/2021/02/19/page.1g2y60c-x43zpnt82fv> Code:
57/REQUIRED_COMPONENT_MISSING in SCHEME: A component that is required by the
scheme is missing.
{code}
Ideally just the actual error message should get logged instead of the
exception and stack trace.
Also the usual log entry recording the HTTP status and query duration doesn't
appear.
As a *dirty hack*.. I tried commenting out the following line and it does avoid
the exception:
[https://github.com/apache/jena/blob/22c54db046b610f0ef1dbe5fadd4a8527af98fe8/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ServletOps.java#L73]
Another question is whether the HTTP status returned to the client (HTTP/1.1
400 Bad Request) is appropriate, given that the client-side query is valid and
it's the server-side data that is at fault?
was:
If the data loaded into jena contains some badly-formed absolute URIrefs as the
object of some triples (eg.
</tmp/release/crawl/2021/02/19/page.1g2y60c-x43zpnt82fv>)..
then:
- when I query passing header "Accept: application/sparql-results+xml" the
results come back the same as was loaded.
- when I query passing header "Accept: application/n-triples" the results come
back the same as was loaded.
- when I query passing header "Accept: application/rdf+xml" fuseki logs the
following exception:
{code:java}
13:09:11 ERROR Fuseki :: Internal error
java.lang.IllegalArgumentException: setContentLength(267) when already written
8192
at
org.eclipse.jetty.server.Response.setContentLength(Response.java:823)
~[fuseki-server.jar:3.17.0]
at
javax.servlet.ServletResponseWrapper.setContentLength(ServletResponseWrapper.java:161)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.HttpServletResponseTracker.setContentLength(HttpServletResponseTracker.java:87)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.ServletOps.writeMessagePlainText(ServletOps.java:73)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.ServletOps.writeMessagePlainTextError(ServletOps.java:86)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.ServletOps.responseSendError(ServletOps.java:55)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.ActionExecLib.execAction(ActionExecLib.java:120)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.server.Dispatcher.dispatchAction(Dispatcher.java:118)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.server.Dispatcher.process(Dispatcher.java:110)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.server.Dispatcher.dispatch(Dispatcher.java:96)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.FusekiFilter.doFilter(FusekiFilter.java:51)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
~[fuseki-server.jar:3.17.0]
at
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:284)
~[fuseki-server.jar:3.17.0]
at
org.apache.jena.fuseki.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:247)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:602)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1612)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1582)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:766)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
~[fuseki-server.jar:3.17.0]
at org.eclipse.jetty.server.Server.handle(Server.java:516)
~[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
~[fuseki-server.jar:3.17.0]
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
[fuseki-server.jar:3.17.0]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)
[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
[fuseki-server.jar:3.17.0]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
[fuseki-server.jar:3.17.0]
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:773)
[fuseki-server.jar:3.17.0]
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:905)
[fuseki-server.jar:3.17.0]
at java.lang.Thread.run(Thread.java:834) [?:?]
{code}
Seems the first 8192 of the query results have been sent before the bad URIref
is encountered, so it's too late to send just the error message on its own.
The main problem is that the error message that fuseki is trying to report
gets lost, going neither to the client nor the log file. The actual error looks
like this:
{code:java}
Failed to write output in RDF/XML: Only well-formed absolute URIrefs can be
included in RDF/XML output:
</tmp/release/crawl/2021/02/19/page.1g2y60c-x43zpnt82fv> Code:
57/REQUIRED_COMPONENT_MISSING in SCHEME: A component that is required by the
scheme is missing.
{code}
Ideally just the actual error message should get logged instead of the
exception and stack trace.
Also the usual log entry recording the HTTP status and query duration doesn't
appear.
As a *dirty hack*.. I tried commenting out the following line and does avoid
the exception:
https://github.com/apache/jena/blob/22c54db046b610f0ef1dbe5fadd4a8527af98fe8/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ServletOps.java#L73
Another question is whether the HTTP status returned to the client (HTTP/1.1
400 Bad Request) is appropriate, given that the client-side query is valid and
it's the server-side data that is at fault?
> Jetty crash when returning badly formed URIrefs as RDF/XML
> -----------------------------------------------------------
>
> Key: JENA-2074
> URL: https://issues.apache.org/jira/browse/JENA-2074
> Project: Apache Jena
> Issue Type: Bug
> Components: Fuseki
> Affects Versions: Jena 3.17.0, Jena 4.0.0
> Reporter: Jon
> Priority: Minor
>
> If the data loaded into Jena contains some badly-formed absolute URIrefs as
> the object of some triples (eg.
> </tmp/release/crawl/2021/02/19/page.1g2y60c-x43zpnt82fv>)..
> then, when I query Fuseki passing HTTP header...
> - ✅ "Accept: application/sparql-results+xml" - the results come back the
> same as was loaded.
> - ✅ "Accept: application/n-triples" - the results come back the same as was
> loaded.
> - ❌ "Accept: application/rdf+xml" - Fuseki logs the following exception:
> {code:java}
> 13:09:11 ERROR Fuseki :: Internal error
> java.lang.IllegalArgumentException: setContentLength(267) when already
> written 8192
> at
> org.eclipse.jetty.server.Response.setContentLength(Response.java:823)
> ~[fuseki-server.jar:3.17.0]
> at
> javax.servlet.ServletResponseWrapper.setContentLength(ServletResponseWrapper.java:161)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.jena.fuseki.servlets.HttpServletResponseTracker.setContentLength(HttpServletResponseTracker.java:87)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.jena.fuseki.servlets.ServletOps.writeMessagePlainText(ServletOps.java:73)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.jena.fuseki.servlets.ServletOps.writeMessagePlainTextError(ServletOps.java:86)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.jena.fuseki.servlets.ServletOps.responseSendError(ServletOps.java:55)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.jena.fuseki.servlets.ActionExecLib.execAction(ActionExecLib.java:120)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.jena.fuseki.server.Dispatcher.dispatchAction(Dispatcher.java:118)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.jena.fuseki.server.Dispatcher.process(Dispatcher.java:110)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.jena.fuseki.server.Dispatcher.dispatch(Dispatcher.java:96)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.jena.fuseki.servlets.FusekiFilter.doFilter(FusekiFilter.java:51)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.jena.fuseki.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:284)
> ~[fuseki-server.jar:3.17.0]
> at
> org.apache.jena.fuseki.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:247)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:602)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1612)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1582)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:766)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> ~[fuseki-server.jar:3.17.0]
> at org.eclipse.jetty.server.Server.handle(Server.java:516)
> ~[fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
> ~[fuseki-server.jar:3.17.0]
> at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
> [fuseki-server.jar:3.17.0]
> at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
> [fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)
> [fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> [fuseki-server.jar:3.17.0]
> at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
> [fuseki-server.jar:3.17.0]
> at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> [fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:773)
> [fuseki-server.jar:3.17.0]
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:905)
> [fuseki-server.jar:3.17.0]
> at java.lang.Thread.run(Thread.java:834) [?:?]
> {code}
> Seems the first 8192 bytes of the query results have been sent before the bad
> URIref is encountered, so it's too late to send just the error message on its
> own.
> The main problem is that the error message that Fuseki is trying to report
> gets lost, going neither to the client nor the log file. The actual error
> looks like this:
> {code:java}
> Failed to write output in RDF/XML: Only well-formed absolute URIrefs can be
> included in RDF/XML output:
> </tmp/release/crawl/2021/02/19/page.1g2y60c-x43zpnt82fv> Code:
> 57/REQUIRED_COMPONENT_MISSING in SCHEME: A component that is required by the
> scheme is missing.
> {code}
> Ideally just the actual error message should get logged instead of the
> exception and stack trace.
> Also the usual log entry recording the HTTP status and query duration
> doesn't appear.
> As a *dirty hack*.. I tried commenting out the following line and it does
> avoid the exception:
>
> [https://github.com/apache/jena/blob/22c54db046b610f0ef1dbe5fadd4a8527af98fe8/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ServletOps.java#L73]
> Another question is whether the HTTP status returned to the client (HTTP/1.1
> 400 Bad Request) is appropriate, given that the client-side query is valid
> and it's the server-side data that is at fault?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)