Как надежно загрузить XMLCatalog из ресурсов пути к классам (внутри jar)?

Ниже приведены некоторые фрагменты кода, которые указывают на то, что я пытаюсь сейчас сделать, но это ненадежно. Принципиально я думаю потому что вы можете зарегистрировать обработчик протокола только один раз, и иногда другие библиотеки могут делать это первыми.

import org.apache.xerces.util.XMLCatalogResolver;



public static synchronized XMLCatalogResolver getResolver() {
        String c[] = {"classpath:xml-catalog.xml"};
        if (cr==null) {

            log.debug("Registering new protcol handler for classpath");
            ConfigurableStreamHandlerFactory configurableStreamHandlerFactory = new ConfigurableStreamHandlerFactory("classpath", new org.fao.oek.protocols.classpath.Handler(XsdUtils.class.getClassLoader()));
            configurableStreamHandlerFactory.addHandler("http", new sun.net.www.protocol.http.Handler());


            URL.setURLStreamHandlerFactory(configurableStreamHandlerFactory);

            log.debug("Creating new catalog resolver");

        cr = new XMLCatalogResolver(c);

        }
        return cr;
    }

xml-catalog.xml содержит:

<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<group  prefer="public"  xml:base="classpath:org/me/myapp/xsd/" >  
  <uri name="http://www.w3.org/XML/1998/namespace" uri="xml.xsd"/>
  <uri name="http://www.w3.org/1999/xlink" uri="xlink.xsd" />
  <uri name="http://www.w3.org/2001/XMLSchema" uri="XMLSchema.xsd" />
  <uri name="http://purl.org/dc/elements/1.1/" uri="dc.xsd" />
  <uri name="http://www.loc.gov/mods/v3"  uri="mods-3.3.xsd" />
 </group>
</catalog>

Очевидно - файлы xsd существуют в нужном месте в пути к классам.

5
задан Dave Jarvis 5 September 2014 в 17:36
поделиться