Igor Vorobiov created ODE-1019:
----------------------------------

             Summary: 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:
       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.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to