Also noticed following :
When wadl2java code generation resolves <xsd:import
namespace="urn:ru:ilb:basicuuid:basicuuid"/>
using xml-resolver, it resolves it using publicId using this record in
catalog.xml
<public publicId="urn:ru:ilb:basicuuid:basicuuid"
uri="classpath:schemas/basicuuid/basicuuid.xsd" />
This is the code:
class org.apache.xml.resolver.Catalog, method resolveLocalPublic,
while (en.hasMoreElements()) {
...
if (e.getEntryType() == PUBLIC
&& e.getEntryArg(0).equals(publicId)) {
if (over || systemId == null) {
return e.getEntryArg(1);
}
}
}
and here publicId variable equals "urn:ru:ilb:basicuuid:basicuuid".
But in runtime, in org.apache.cxf.jaxrs.utils.schemas.SchemaHandler, method
createSchema
it resolves it using LSResourceResolver.resolveResource
and, surprisingly, publicId here is null, but
namespaceURI="urn:ru:ilb:basicuuid:basicuuid", and I can only resolve
schema using <uri> catalog entry
Don't know why different processors resovle imports differently.
Looking here,
https://jaxb.java.net/guide/Fixing_broken_references_in_schema.html
it says that only public entry in catalog required.
But, to resolve schema import both in runtime and during class compilation,
i need to write in catalog.xml two entries:
<!-- this is for xsd compilation -->
<public publicId="urn:ru:ilb:basicuuid:basicuuid"
uri="classpath:schemas/basicuuid/basicuuid.xsd" />
<!-- this is for SchemaHandler -->
<uri name="urn:ru:ilb:basicuuid:basicuuid"
uri="classpath:schemas/basicuuid/basicuuid.xsd" />
Don't know, how should this fixed (or should not)
E.g. , code like this could fix that, but seems ugly:
resolvedLocation =
catalogResolver.resolvePublic(publicId!=null?publicId:namespaceURI,
systemId);