2 * Copyright (C) 2008 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.io
.jaxb
;
12 import java
.io
.IOException
;
13 import java
.util
.Properties
;
15 import org
.apache
.logging
.log4j
.LogManager
;
16 import org
.apache
.logging
.log4j
.Logger
;
17 import org
.apache
.xml
.resolver
.CatalogManager
;
18 import org
.apache
.xml
.resolver
.tools
.CatalogResolver
;
19 import org
.w3c
.dom
.ls
.LSInput
;
20 import org
.w3c
.dom
.ls
.LSResourceResolver
;
21 import org
.xml
.sax
.InputSource
;
24 * Copied from CATE (@author ben.clark). Not used at this point.
26 public class CdmResourceResolver
implements LSResourceResolver
{
28 private static final Logger logger
= LogManager
.getLogger();
30 private final CatalogResolver catalogResolver
;
32 public CdmResourceResolver() throws IOException
{
33 Properties properties
= new Properties();
34 if(logger
.isInfoEnabled()) {
35 logger
.info("Loading /CatalogManager.properties");
37 properties
.load(this.getClass().getResourceAsStream("/CatalogManager.properties"));
39 String
[] catalogFileNames
= properties
.getProperty("catalogs").split(",");
41 CatalogManager catalogManager
= new CatalogManager();
42 catalogManager
.setRelativeCatalogs(true);
43 catalogResolver
= new CatalogResolver(catalogManager
);
45 for(String catalogFileName
: catalogFileNames
) {
46 if(logger
.isInfoEnabled()) {
47 logger
.info("Parsing " + catalogFileName
);
49 catalogResolver
.getCatalog().parseCatalog(this.getClass().getResource(catalogFileName
));
54 public LSInput
resolveResource(String type
, String namespaceURI
, String publicId
, String systemId
, String baseURI
) {
56 if(logger
.isInfoEnabled()) {
57 logger
.info("Resolving " + namespaceURI
+ " with systemId " + systemId
+ ", trying " + systemId
);
59 InputSource inputSource
= catalogResolver
.resolveEntity( publicId
, systemId
);
60 if ( inputSource
== null ) {
61 if(logger
.isInfoEnabled()) {
62 logger
.info("Not found in filesystem: Looking in jar files for /schema/cdm/" + systemId
);
64 inputSource
= new InputSource(this.getClass().getResourceAsStream("/schema/cdm/" + systemId
));
66 if(inputSource
== null) {
67 if(logger
.isWarnEnabled()) {
68 logger
.warn(namespaceURI
+ " not found");
74 if(logger
.isInfoEnabled()) {
75 // log.info("Resource found");
77 LsInputImpl lsInput
= new LsInputImpl();
78 lsInput
.setByteStream( inputSource
.getByteStream() );
79 lsInput
.setCharacterStream( inputSource
.getCharacterStream() );
80 lsInput
.setPublicId( inputSource
.getPublicId() );
81 lsInput
.setSystemId( inputSource
.getSystemId() );
82 lsInput
.setEncoding( inputSource
.getEncoding() );