[ 
https://issues.apache.org/jira/browse/CXF-9021?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michael Kroll updated CXF-9021:
-------------------------------
    Estimated Complexity: Moderate  (was: Unknown)

> Warning "Could not resolve Schema for datatypes.dtd" when file was found
> ------------------------------------------------------------------------
>
>                 Key: CXF-9021
>                 URL: https://issues.apache.org/jira/browse/CXF-9021
>             Project: CXF
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 4.0.4
>            Reporter: Michael Kroll
>            Priority: Major
>
> Assuming you have
> - system property {{javax.xml.accessExternalDTD}} set to {{all}} or {{file}}
> - enabled {{out}} validation
> - an xsd that references a DTD
> And fire a request, the following log appears:
> {quote}
> WARN [org.apa.cxf.ws.add.EndpointReferenceUtils] Could not resolve Schema for 
> ../dtd/XMLSchema.dtd
> {quote}
> The request is then correctly validated, despite the warning. Tested with 
> both valid and invalid equests.
> Looking at the code: 
> {code:java|org.apache.cxf.ws.addressing.EndpointReferenceUtils.SchemaLSResourceResolver#resolveResource}
>             if (impl == null) {
>     [...] // if found in schemas map:
>             return impl;
>     if (systemId != null) {
>         [...] // if found by systemId:
>                 return impl;
>     }
>     if (namespaceURI != null) {
>         [...] // if found by namespaceURI:
>                 return impl;
>     }
>     [...]
>     if (systemId == null) {
>         systemId = publicId;
>     }
>     if (systemId != null) {
>         InputSource source = resolver.resolve(systemId, baseURI);
>         if (source != null) {
>             impl = new LSInputImpl();
>             impl.setByteStream(source.getByteStream());
>             impl.setSystemId(source.getSystemId());
>             impl.setPublicId(source.getPublicId());
> +            ### the code above is run, source is found, impl is set
> +            ### i miss a 'return impl;' here, to match the code above
>         }
>     }
>     LOG.warning("Could not resolve Schema for " + systemId);
> }
> return impl;
> {code}
> I added two inline 'comments', starting with ### to mark the place where i 
> miss a return statement.
> Reasoning:
> # all of the above happens in an if block: {{if (impl==null)}}
> # it seems that with different searches eg. via {{namespaceURI}} and 
> {{systemId}}, the variable {{impl}} should be filled and then returned
> # the warning in the last line says 'Could not resolve Schema'
> # but the code directly above it may indeed find a {{source}} and fill 
> {{impl}}
> # so the schema (in my case a DTD) is found. I can verify that by looking 
> into debug values. And the validation then takes place, with expected 
> outcomes.
> # first finding the schema and then printing that it could not be found is 
> misleading
> proposed solution:
> - either a {{return impl;}} statement like mentioned above
> - or guard the warning with {{if (impl==null)}}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to