[ https://issues.apache.org/jira/browse/ODE-1019?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tammo van Lessen updated ODE-1019: ---------------------------------- Fix Version/s: 1.4 1.3.7 > 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 > Fix For: 1.3.7, 1.4 > > Attachments: LoggingDOMErrorHandler.java, SchemaCaptureTest.java > > > 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)