Revision 9913
Added by Jing Tao about 8 years ago
src/edu/ucsb/nceas/metacat/DBEntityResolver.java | ||
---|---|---|
97 | 97 |
public InputSource resolveEntity (String publicId, String systemId) |
98 | 98 |
throws SAXException |
99 | 99 |
{ |
100 |
logMetacat.debug("DBEntityResolver.resolveEntity - in resolveEntity"); |
|
100 |
InputSource dtdSource= null; |
|
101 |
logMetacat.debug("DBEntityResolver.resolveEntity - in resolveEntity "+" the public id is "+publicId+" and systemId is "+systemId); |
|
101 | 102 |
String dbSystemID; |
102 | 103 |
String doctype = null; |
103 | 104 |
|
... | ... | |
114 | 115 |
logMetacat.debug("DBEntityResolver.resolveEntity - in get type from publicId and doctype is: " |
115 | 116 |
+ doctype); |
116 | 117 |
// assume public ID (doctype) is docname |
117 |
} else if (systemId != null) {
|
|
118 |
} else { |
|
118 | 119 |
doctype = dhandler.getDocname(); |
120 |
logMetacat.debug("DBEntityResolver.resolveEntity - there is not public id and in get type from the doc name and doctype is: " |
|
121 |
+ doctype); |
|
119 | 122 |
} |
120 | 123 |
} |
121 | 124 |
} else if ( handler instanceof AccessControlList ) { |
122 | 125 |
AccessControlList ahandler = null; |
123 | 126 |
ahandler = (AccessControlList)handler; |
124 |
//if ( ahandler.processingDTD() ) {
|
|
127 |
if ( ahandler.processingDTD() ) { |
|
125 | 128 |
// public ID is doctype |
126 | 129 |
if (publicId != null) { |
127 | 130 |
doctype = publicId; |
128 | 131 |
// assume public ID (doctype) is docname |
129 |
} else if (systemId != null) {
|
|
132 |
} else { |
|
130 | 133 |
doctype = ahandler.getDocname(); |
131 | 134 |
} |
132 |
//}
|
|
135 |
} |
|
133 | 136 |
} |
137 |
} else { |
|
138 |
logMetacat.debug("DBEntityResolver.resolveEntity - the handler is null"); |
|
134 | 139 |
} |
135 | 140 |
|
136 | 141 |
// get System ID for doctype |
... | ... | |
139 | 144 |
logMetacat.info("DBEntityResolver.resolveEntity - get systemId from doctype: " + doctype); |
140 | 145 |
dbSystemID = getDTDSystemID(doctype); |
141 | 146 |
logMetacat.info("DBEntityResolver.resolveEntity - The Systemid is: " + dbSystemID); |
147 |
if(dbSystemID == null) { |
|
148 |
throw new SAXException("The doctype "+doctype+" ,which was defined by a DTD document, isn't registered in Metacat. Please contact the operator of the Metacat"); |
|
149 |
} |
|
142 | 150 |
// check that it is accessible on our system before getting too far |
143 | 151 |
try { |
144 | 152 |
InputStream in = checkURLConnection(dbSystemID); |
153 |
dtdSource = new InputSource(in); |
|
145 | 154 |
} catch (SAXException se) { |
155 |
se.printStackTrace(); |
|
156 |
throw se; |
|
146 | 157 |
// after an upgrade, the dtd will not exist on disk, but it is in xml catalog. The db system id may be pointing |
147 | 158 |
// back at this system Try and download it from the original system id and see if we still have a problem |
148 | 159 |
// checking the URL connection. |
149 |
logMetacat.warn("DBEntityResolver.resolveEntity - Problem when checking URL Connection: " + se.getMessage()); |
|
160 |
/*logMetacat.warn("DBEntityResolver.resolveEntity - Problem when checking URL Connection: " + se.getMessage());
|
|
150 | 161 |
logMetacat.warn("DBEntityResolver.resolveEntity - Probably, dtd for doc type " + doctype + " existed in xml catalog, but not on disk. Uploading from: " + systemId); |
151 | 162 |
InputStream istream = checkURLConnection(systemId); |
152 | 163 |
uploadDTDFromURL(istream, systemId); |
... | ... | |
157 | 168 |
logMetacat.error("DBEntityResolver.resolveEntity - still could not find dtd for doc type " + doctype + " at " |
158 | 169 |
+ dbSystemID + " : " + e2.getMessage()); |
159 | 170 |
dbSystemID = null; |
160 |
} |
|
171 |
}*/
|
|
161 | 172 |
} |
162 |
boolean doctypeIsInDB = true; |
|
173 |
/*boolean doctypeIsInDB = true;
|
|
163 | 174 |
// no System ID found in db XML Catalog |
164 | 175 |
if (dbSystemID == null) { |
165 | 176 |
doctypeIsInDB = false; |
... | ... | |
198 | 209 |
} |
199 | 210 |
istream = checkURLConnection(dbSystemID); |
200 | 211 |
is.setByteStream(istream); |
201 |
return is; |
|
212 |
return is;*/
|
|
202 | 213 |
} else { |
203 |
// use provided systemId for the other cases |
|
204 |
logMetacat.info("DBEntityResolver.resolveEntity - doctype is null and using system id from file"); |
|
205 |
InputStream istream = checkURLConnection(systemId); |
|
206 |
return null; |
|
207 |
|
|
214 |
//we can't determine the public id or the name of the root element in for this dtd defined xml document |
|
215 |
String message = "Metacat can't determine the public id or the name of the root element of the document, so the validation can't be imposed and the document is rejected"; |
|
216 |
logMetacat.error("DBEntityResolver.resolveEntity - "+message); |
|
217 |
throw new SAXException(message); |
|
218 |
//InputStream istream = checkURLConnection(systemId); |
|
219 |
//return null; |
|
208 | 220 |
} |
221 |
return dtdSource; |
|
209 | 222 |
|
210 | 223 |
} |
211 | 224 |
|
Also available in: Unified diff
use the new rules to validate an xml object base on dtds.