Andy, why does ErrorHandlerStd throw RiotException? https://github.com/apache/jena/blob/master/jena-arq/src/main/java/org/apache/jena/riot/system/ErrorHandlerFactory.java#L128
It fails to pass on URI violations that way, because RiotException is too general. I guess this is the outcome of the ErrorHandler interface methods. Turns out there is already IRIException that captures the violations (but unfortunately does not extend RiotException): https://github.com/apache/jena/blob/master/jena-iri/src/main/java/org/apache/jena/iri/IRIException.java#L43 Couldnt ErrorHandler (re)use the IRIException? Maybe the interface should be refactored based on logging (Riot)Exceptions instead of String messages: public class IRIException extends RiotException { public final Violation violation; public IRIException(Violation violation) { this.violation = violation; } public Violation getViolation() { return violation; } } public interface ErrorHandler { public void exception(RiotException rex, int level, long line, long col); } public class CheckerIRI implements NodeChecker { public static void iriViolations(IRI iri, ErrorHandler errorHandler, ...) { ... Violation v = iter.next(); ... if ( isError ) // IRI errors are warning at the level of parsing - they got through syntax checks. errorHandler.exception(new IRIException(v), Level.WARNING, line, col); ... } } After this, IRI violations could be analyzed by ErrorHandler: public class ErrorHandlerCustom implements ErrorHandler { public void exception(RiotException rex, int level, long line, long col) { if (rex instanceof IRIException) { IRIException iex = (IRIException)rex; Violation v = iex.getViolation(); ... if (level == Level.ERROR) throw rex; // throw exception like error() does now } ... } } On Fri, Jul 8, 2016 at 11:28 PM, Andy Seaborne <a...@apache.org> wrote: > On 08/07/16 18:57, A. Soroka wrote: >> >> This may or may not be close to what you are looking for, but you might >> try something like oaj.riot.RDFDataMgr::parse with a wrapper around >> oaj.riot.system.StreamRDFLib::graph. You can subclass >> oaj.riot.system.StreamRDFWrapper for that. Then you have tuple-level control >> over the process and can throw exceptions or execute side-effects as >> desired. >> >> --- >> A. Soroka >> The University of Virginia Library >> >>> On Jul 8, 2016, at 1:46 PM, Martynas Jusevičius <marty...@graphity.org> >>> wrote: >>> >>> Hey, >>> >>> I have implemented an RDF/POST parser which extends ReaderRIOTBase: >>> >>> https://github.com/AtomGraph/Core/blob/master/src/main/java/org/graphity/core/riot/lang/RDFPostReader.java >>> >>> It silently accepts broken URIs, so I want the behavior to depend on >>> ParserProfile, and throw exceptions in case of strict error handler. >>> >>> I'm reading Model using Model.read(InputStream in, String base, String >>> lang), so the question is: how do I set the (strict) error handler >>> before reading it? > > > Model.read does not expose > > See ExRIOT_2 which sets the ErrorHandler. > > https://github.com/apache/jena/blob/master/jena-arq/src-examples/arq/examples/riot/ExRIOT_2.java > > Create a ReaderRIOT, set the error handler. > > See also: > ErrorHandlerFactory.setDefaultErrorHandler > > Or, for specifically IRIs, you might want to use ParserProfileBase or a > derivative rather than ParserProfileChecker > > >>> >>> Also, what is the difference/connection between ErrorHandler and >>> RDFErrorHandler? >>> >>> https://jena.apache.org/documentation/javadoc/arq/org/apache/jena/riot/system/ErrorHandler.html >>> >>> https://jena.apache.org/documentation/javadoc/jena/org/apache/jena/rdf/model/RDFErrorHandler.html > > > RDFErrorHandler is used the ARP, for RDF/XML parsing. > > It is adapted to ErrorHandler by RIOT. > >>> >>> Thanks, >>> >>> Martynas >>> atomgraph.com >> >> >