Changeset 5394 for CMDIValidator/trunk/cmdi-validator-core/src/main/java/eu/clarin/cmdi/validator/extensions/CheckHandlesExtension.java
- Timestamp:
- 06/26/14 22:58:39 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
CMDIValidator/trunk/cmdi-validator-core/src/main/java/eu/clarin/cmdi/validator/extensions/CheckHandlesExtension.java
r5387 r5394 22 22 23 23 import org.apache.http.HttpStatus; 24 import org.slf4j.Logger;25 import org.slf4j.LoggerFactory;26 27 24 import net.sf.saxon.s9api.SaxonApiException; 28 25 import net.sf.saxon.s9api.XPathCompiler; … … 36 33 import eu.clarin.cmdi.validator.CMDIValidatorWriteableResult; 37 34 import eu.clarin.cmdi.validator.utils.HandleResolver; 35 import eu.clarin.cmdi.validator.utils.SaxonLocationUtils; 38 36 39 37 public class CheckHandlesExtension extends CMDIValidatorExtension { 40 private static final String XPATH = "//*:ResourceProxy[*:ResourceType/text() = 'Resource' or *:ResourceType/text() = 'Metadata']/*:ResourceRef /text()";38 private static final String XPATH = "//*:ResourceProxy[*:ResourceType/text() = 'Resource' or *:ResourceType/text() = 'Metadata']/*:ResourceRef"; 41 39 private static final String HDL_SCHEME = "hdl"; 42 40 private static final String HDL_PROXY_HTTP = "http"; … … 44 42 private static final String HDL_PROXY_HOST = "hdl.handle.net"; 45 43 private static final String URN_SCHEME = "urn"; 46 @SuppressWarnings("unused")47 private static final Logger logger =48 LoggerFactory.getLogger(CheckHandlesExtension.class);49 44 private final boolean resolveHandles; 50 45 private HandleResolver resolver = null; … … 91 86 for (XdmItem item : selector) { 92 87 String handle = null; 88 final int line = SaxonLocationUtils.getLineNumber(item); 89 final int column = SaxonLocationUtils.getColumnNumber(item); 93 90 final String h = item.getStringValue(); 94 91 if (h != null) { … … 98 95 } else { 99 96 if (!handle.equals(h)) { 100 result.reportWarning( -1, -1, "handle '" + h +97 result.reportWarning(line, column, "handle '" + h + 101 98 "' contains leading or tailing spaces " + 102 99 "within <ResourceRef> element"); … … 106 103 107 104 if (handle != null) { 108 checkHandleURISyntax(handle, result );109 } else { 110 result.reportError( -1, -1,105 checkHandleURISyntax(handle, result, line, column); 106 } else { 107 result.reportError(line, column, 111 108 "invalid handle (<ResourceRef> was empty)"); 112 109 } … … 119 116 120 117 private void checkHandleURISyntax(String handle, 121 CMDIValidatorWriteableResult result) throws CMDIValidatorException { 118 CMDIValidatorWriteableResult result, int line, int column) 119 throws CMDIValidatorException { 122 120 try { 123 121 final URI uri = new URI(handle); … … 130 128 final URI actionableURI = 131 129 new URI(HDL_PROXY_HTTP, HDL_PROXY_HOST, path, null); 132 checkHandleResolves(actionableURI, result );130 checkHandleResolves(actionableURI, result, line, column); 133 131 } catch (URISyntaxException e) { 134 132 /* should not happen */ … … 138 136 } else if (URN_SCHEME.equals(uri.getScheme())) { 139 137 if (resolveHandles) { 140 result.reportInfo( -1, -1, "PID '" + handle +138 result.reportInfo(line, column, "PID '" + handle + 141 139 "' skipped, because URN resolving is not supported"); 142 140 } else { 143 result.reportInfo( -1, -1, "PID '" + handle +141 result.reportInfo(line, column, "PID '" + handle + 144 142 "' skipped, because URN sytax checking is not supported"); 145 143 } … … 148 146 if (uri.getHost() != null) { 149 147 if (!HDL_PROXY_HOST.equalsIgnoreCase(uri.getHost())) { 150 result.reportError( -1, -1,148 result.reportError(line, column, 151 149 "The URI of PID '" + handle + 152 150 "' contains an unexpected host part of '" + 153 151 uri.getHost() + "'"); 154 152 } 155 checkHandleResolves(uri, result );156 } else { 157 result.reportError( -1, -1, "The URI of PID '" + handle+158 "' is missing the host part");153 checkHandleResolves(uri, result, line, column); 154 } else { 155 result.reportError(line, column, "The URI of PID '" + 156 handle + "' is missing the host part"); 159 157 } 160 158 } else { 161 159 if (uri.getScheme() != null) { 162 result.reportError( -1, -1,160 result.reportError(line, column, 163 161 "The URI of PID '" + handle + 164 162 "' contains an unexpected schema part of '" + 165 163 uri.getScheme() + "'"); 166 164 } else { 167 result.reportError( -1, -1, "The URI of PID '" + handle+168 "' is missing a proper schema part");165 result.reportError(line, column, "The URI of PID '" + 166 handle + "' is missing a proper schema part"); 169 167 } 170 168 } 171 169 } catch (URISyntaxException e) { 172 result.reportError( -1, -1, "PID '" + handle +170 result.reportError(line, column, "PID '" + handle + 173 171 "' is not a well-formed URI: " + e.getMessage()); 174 172 } … … 177 175 178 176 private void checkHandleResolves(URI uri, 179 CMDIValidatorWriteableResult result) throws CMDIValidatorException { 177 CMDIValidatorWriteableResult result, int line, int column) 178 throws CMDIValidatorException { 180 179 if (resolver != null) { 181 180 try { … … 188 187 /* FALL-THROUGH */ 189 188 case HttpStatus.SC_FORBIDDEN: 190 result.reportInfo( -1, -1, "PID '" + uri +189 result.reportInfo(line, column, "PID '" + uri + 191 190 "' resolved to an access protected resource (" + 192 191 code + ")"); 193 192 break; 194 193 case HttpStatus.SC_NOT_FOUND: 195 result.reportError( -1, -1, "PID '" + uri +196 "' resolved to an non-existing resource (" + code +197 ")");194 result.reportError(line, column, "PID '" + uri + 195 "' resolved to an non-existing resource (" + 196 code + ")"); 198 197 break; 199 198 case HandleResolver.TIMEOUT: 200 result.reportWarning( -1, -1, "Timeout while resolving PID '" +201 uri + "'");199 result.reportWarning(line, column, 200 "Timeout while resolving PID '" + uri + "'"); 202 201 break; 203 202 case HandleResolver.UNKNOWN_HOST: 204 result.reportWarning( -1, -1, "Unable to resolve host '" +205 uri.getHost() + "' while resolving PID '"+206 uri + "'");203 result.reportWarning(line, column, 204 "Unable to resolve host '" + uri.getHost() + 205 "' while resolving PID '" + uri + "'"); 207 206 break; 208 207 case HandleResolver.ERROR: 209 result.reportWarning( -1, -1,208 result.reportWarning(line, column, 210 209 "An error occurred while resolving PID '" + 211 210 uri + "'"); 212 211 break; 213 212 default: 214 result.reportWarning(- 1, -1, "PID '" + uri +215 "' resolved with an unexpected result (" + code +216 ")");213 result.reportWarning(-line, column, "PID '" + uri + 214 "' resolved with an unexpected result (" + 215 code + ")"); 217 216 break; 218 217 } // switch
Note: See TracChangeset
for help on using the changeset viewer.