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