[ https://issues.apache.org/jira/browse/ODE-1019?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Igor Vorobiov updated ODE-1019: ------------------------------- Description: There is the method for wsdl schema parsing(org.apache.ode.utils.xsd.XSUtils.captureSchema(LSInput, XMLEntityResolver)) where schema load exceptions and errors are handled incorrectly. First case when we receive model but there were errors during parsing: {code} XSModel model = schemaLoader.load(input); if (model != null && errors.size() != 0) { // TODO: throw Exception} {code} The question is do we need to throw Exception in this case. Second case when exceptions were thrown during parsing in xerces: {code:title=org.apache.xerces.impl.xs.XMLSchemaLoader.load(LSInput)|borderStyle=solid} public XSModel load(LSInput is) { try { Grammar g = loadGrammar(dom2xmlInputSource(is)); return ((XSGrammar) g).toXSModel(); } catch (Exception e) { reportDOMFatalError(e); // will be printed as System.err //reportDOMFatalError=>fErrorHandler.getErrorHandler().handleError(error); return null; } } {code} Fix for the second case can be handler creation which implements DOMErrorHandler and collects all exceptions in handleError(DOMError error) method. schemaLoader should be configured with this handler: {code} LoggingDOMErrorHandler deh = new LoggingDOMErrorHandler(__log); schemaLoader.setParameter(Constants.DOM_ERROR_HANDLER, deh); {code} And after load schema call we can check exceptions size like it is done for errors: {code} ArrayList<Exception> exceptions = deh.getExceptions(); XSModel model = schemaLoader.load(input); if (exceptions.size() != 0) { // TODO: throw Exception} {code} Attached test to reproduce second case and exception handler class. was: There is the method for wsdl schema parsing(org.apache.ode.utils.xsd.XSUtils.captureSchema(LSInput, XMLEntityResolver)) where schema load exceptions and errors are handled incorrectly. First case when we receive model but there were errors during parsing: XSModel model = schemaLoader.load(input); if (model != null && errors.size() != 0) { // TODO: throw Exception} The question is do we need to throw Exception in this case. Second case when exceptions were thrown during parsing in xerces: org.apache.xerces.impl.xs.XMLSchemaLoader.load(LSInput) public XSModel load(LSInput is) { try { Grammar g = loadGrammar(dom2xmlInputSource(is)); return ((XSGrammar) g).toXSModel(); } catch (Exception e) { reportDOMFatalError(e); // will be printed as System.err //reportDOMFatalError=>fErrorHandler.getErrorHandler().handleError(error); return null; } } Fix for second case can be handler creation which implements DOMErrorHandler and collects all exceptions in handleError(DOMError error) method. schemaLoader should be configured with this handler: LoggingDOMErrorHandler deh = new LoggingDOMErrorHandler(__log); schemaLoader.setParameter(Constants.DOM_ERROR_HANDLER, deh); And after load schema call we can check exceptions size like it is done for errors: ArrayList<Exception> exceptions = deh.getExceptions(); XSModel model = schemaLoader.load(input); if (exceptions.size() != 0) { // TODO: throw Exception} Attached test to reproduce second case and exception handler class. > Schema load exception is not handled for captureSchema > ------------------------------------------------------ > > Key: ODE-1019 > URL: https://issues.apache.org/jira/browse/ODE-1019 > Project: ODE > Issue Type: Bug > Components: Deployment > Affects Versions: 1.3.6 > Reporter: Igor Vorobiov > Priority: Minor > > There is the method for wsdl schema > parsing(org.apache.ode.utils.xsd.XSUtils.captureSchema(LSInput, > XMLEntityResolver)) where schema load exceptions and errors are handled > incorrectly. > First case when we receive model but there were errors during parsing: > {code} > XSModel model = schemaLoader.load(input); > if (model != null && errors.size() != 0) { // TODO: throw Exception} > {code} > The question is do we need to throw Exception in this case. > Second case when exceptions were thrown during parsing in xerces: > {code:title=org.apache.xerces.impl.xs.XMLSchemaLoader.load(LSInput)|borderStyle=solid} > > public XSModel load(LSInput is) { > try { > Grammar g = loadGrammar(dom2xmlInputSource(is)); > return ((XSGrammar) g).toXSModel(); > } catch (Exception e) { > reportDOMFatalError(e); // will be printed as System.err > > //reportDOMFatalError=>fErrorHandler.getErrorHandler().handleError(error); > return null; > } > } > {code} > Fix for the second case can be handler creation which implements > DOMErrorHandler and collects all exceptions in handleError(DOMError error) > method. > schemaLoader should be configured with this handler: > {code} > LoggingDOMErrorHandler deh = new LoggingDOMErrorHandler(__log); > schemaLoader.setParameter(Constants.DOM_ERROR_HANDLER, deh); > {code} > And after load schema call we can check exceptions size like it is done for > errors: > {code} > ArrayList<Exception> exceptions = deh.getExceptions(); > XSModel model = schemaLoader.load(input); > if (exceptions.size() != 0) { // TODO: throw Exception} > {code} > Attached test to reproduce second case and exception handler class. -- This message was sent by Atlassian JIRA (v6.2#6252)