Michael Kroll created CXF-9021:
----------------------------------

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


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