[
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)