Skip to content

Commit e9880e5

Browse files
committed
Improve error handling
1 parent fb914f4 commit e9880e5

File tree

3 files changed

+93
-2
lines changed

3 files changed

+93
-2
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.commonwl.view;
21+
22+
import org.commonwl.view.workflow.RepresentationNotFoundException;
23+
import org.commonwl.view.workflow.WorkflowNotFoundException;
24+
import org.springframework.http.HttpHeaders;
25+
import org.springframework.http.HttpStatus;
26+
import org.springframework.http.MediaType;
27+
import org.springframework.http.ResponseEntity;
28+
import org.springframework.web.bind.annotation.ControllerAdvice;
29+
import org.springframework.web.bind.annotation.ExceptionHandler;
30+
31+
/**
32+
* Handles exception handling across the application
33+
*/
34+
@ControllerAdvice
35+
public class GlobalControllerErrorHandling {
36+
37+
/**
38+
* Workflow can not be found
39+
* @return A plain text error message
40+
*/
41+
@ExceptionHandler(WorkflowNotFoundException.class)
42+
public ResponseEntity<?> handleNotFound() {
43+
final HttpHeaders headers = new HttpHeaders();
44+
headers.setContentType(MediaType.TEXT_PLAIN);
45+
return new ResponseEntity<>("Workflow could not be found", headers, HttpStatus.NOT_FOUND);
46+
}
47+
48+
/**
49+
* Workflow exists but representation is not found
50+
* eg Generic git workflow asking for raw workflow URL
51+
* @return A plain text error message
52+
*/
53+
@ExceptionHandler(RepresentationNotFoundException.class)
54+
public ResponseEntity<?> handleNoRepresentation() {
55+
final HttpHeaders headers = new HttpHeaders();
56+
headers.setContentType(MediaType.TEXT_PLAIN);
57+
return new ResponseEntity<>("The workflow exists but the requested representation could not be found",
58+
headers, HttpStatus.NOT_FOUND);
59+
}
60+
61+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.commonwl.view.workflow;
21+
22+
import org.springframework.http.HttpStatus;
23+
import org.springframework.web.bind.annotation.ResponseStatus;
24+
25+
/**
26+
* Exception thrown when a workflow representation was not found
27+
*/
28+
@ResponseStatus(value = HttpStatus.NOT_ACCEPTABLE)
29+
public class RepresentationNotFoundException extends RuntimeException {
30+
}

src/main/java/org/commonwl/view/workflow/WorkflowPermalinkController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public void goToViewer(@PathVariable("commitid") String commitId,
7474
/**
7575
* Redirect to the raw file if this exists
7676
* @param commitId The commit ID of the workflow
77-
* @return A 302 redirect response to the raw URL or 404
77+
* @return A 302 redirect response to the raw URL or 406
7878
*/
7979
@GetMapping(value = "/git/{commitid}/**",
8080
produces = {"application/x-yaml", MediaType.APPLICATION_OCTET_STREAM_VALUE, "*/*"})
@@ -83,7 +83,7 @@ public void goToRawUrl(@PathVariable("commitid") String commitId,
8383
HttpServletResponse response) {
8484
Workflow workflow = getWorkflow(commitId, request);
8585
if (workflow.getRetrievedFrom().getType() == GitType.GENERIC) {
86-
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
86+
throw new RepresentationNotFoundException();
8787
} else {
8888
response.setHeader("Location", workflow.getRetrievedFrom().getRawUrl(commitId));
8989
response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);

0 commit comments

Comments
 (0)