[
https://issues.apache.org/jira/browse/CXF-9021?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17899820#comment-17899820
]
Freeman Yue Fang commented on CXF-9021:
---------------------------------------
Thanks [~mickroll] for reporting this!
Fixed by going the proposed #1 solution, to align with other statements.
> 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
> Assignee: Freeman Yue Fang
> Priority: Major
> Fix For: 4.1.0, 3.5.10, 3.6.5, 4.0.6
>
>
> 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)