Project

General

Profile

« Previous | Next » 

Revision 6396

do not parse from last slash ("/") to the end when processing the request uri - otherwise things like format ids (text/csv) will be handled incorrectly.
https://redmine.dataone.org/issues/1773

View differences:

src/edu/ucsb/nceas/metacat/restservice/CNResourceHandler.java
140 140
            String resource = request.getPathInfo();
141 141
            resource = resource.substring(resource.indexOf("/") + 1);
142 142
                        
143
            // get the rest
143
            // for the rest of the resouce
144 144
            String extra = null;
145
            if (resource.lastIndexOf("/") != -1) {
146
                extra = resource.substring(resource.lastIndexOf("/") + 1);
147
            }
148 145
            
149 146
            logMetacat.debug("handling verb " + httpVerb + " request with resource '" + resource + "'");
150 147
            boolean status = false;
......
160 157
                } else if (resource.startsWith(RESOURCE_META)) {
161 158
                    logMetacat.debug("Using resource: " + RESOURCE_META);
162 159
                    
160
                    // after the command
161
                    extra = parseTrailing(resource, RESOURCE_META);
162
                    
163 163
                    // get
164 164
                    if (httpVerb == GET) {
165 165
                        getSystemMetadataObject(extra);
......
179 179
                    }
180 180
                } else if (resource.startsWith(RESOURCE_ASSERT_RELATION)) {
181 181
                	
182
                	// after the command
183
                    extra = parseTrailing(resource, RESOURCE_ASSERT_RELATION);
184
                    
182 185
                    // reserve the ID (in params)
183 186
                    if (httpVerb == GET) {
184 187
                    	assertRelation(extra);
......
186 189
                    }    
187 190
                } else if (resource.startsWith(RESOURCE_RESOLVE)) {
188 191
                	
192
                	// after the command
193
                    extra = parseTrailing(resource, RESOURCE_RESOLVE);
194
                    
189 195
                    // resolve the object location
190 196
                    if (httpVerb == GET) {
191 197
                    	resolve(extra);
......
193 199
                    }
194 200
                } else if (resource.startsWith(RESOURCE_OWNER)) {
195 201
                	
202
                	// after the command
203
                    extra = parseTrailing(resource, RESOURCE_OWNER);
204
                    
196 205
                    // set the owner
197 206
                    if (httpVerb == PUT) {
198 207
                    	owner(extra);
199 208
                    	status = true;
200 209
                    }    
201
                } else if (resource.startsWith(RESOURCE_OWNER)) {
202
                	
203
                    // set the owner
204
                    if (httpVerb == PUT) {
205
                    	owner(extra);
206
                    	status = true;
207
                    }
208 210
                } else if (resource.startsWith(RESOURCE_IS_AUTHORIZED)) {
209 211
                	
212
                	// after the command
213
                    extra = parseTrailing(resource, RESOURCE_IS_AUTHORIZED);
214
                    
210 215
                    // authorized?
211 216
                    if (httpVerb == GET) {
212 217
                    	isAuthorized(extra);
......
216 221
                    logMetacat.debug("Using resource 'object'");
217 222
                    logMetacat.debug("D1 Rest: Starting resource processing...");
218 223
                    
224
                    // after the command
225
                    extra = parseTrailing(resource, RESOURCE_OBJECTS);
226
                    
219 227
                    logMetacat.debug("objectId: " + extra);
220 228
                    logMetacat.debug("verb:" + httpVerb);
221 229

  
......
234 242
                } else if (resource.startsWith(RESOURCE_FORMATS)) {
235 243
                  logMetacat.debug("Using resource: " + RESOURCE_FORMATS);
236 244
                  
245
                  // after the command
246
                  extra = parseTrailing(resource, RESOURCE_FORMATS);
237 247
                  
238
                  
239 248
                  // handle each verb
240 249
                  if (httpVerb == GET) {
241 250
                  	if (extra == null) {
......
258 267

  
259 268
                } else if (resource.startsWith(RESOURCE_CHECKSUM)) {
260 269
                    logMetacat.debug("Using resource: " + RESOURCE_CHECKSUM);
270
                    
271
                    // after the command
272
                    extra = parseTrailing(resource, RESOURCE_CHECKSUM);
273
                    
261 274
                    //handle checksum requests
262 275
                    if (httpVerb == GET) {
263 276
                    
......
295 308
        }
296 309
    }
297 310
    
311
    private String parseTrailing(String resource, String token) {
312
    	// get the rest
313
        String extra = null;
314
        if (resource.indexOf(token) != -1) {
315
        	// what comes after the token?
316
            extra = resource.substring(resource.indexOf(token) + token.length());
317
            // remove the slash
318
            if (extra.startsWith("/")) {
319
            	extra = extra.substring(1);
320
            }
321
            // is there anything left?
322
            if (extra.length() == 0) {
323
            	extra = null;
324
            }
325
        }
326
        return extra;
327
    }
328
    
298 329
    /**
299 330
     * Get the checksum for the given guid
300 331
     * 

Also available in: Unified diff