You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2011/12/24 14:32:43 UTC

svn commit: r1222971 - in /activemq/activemq-apollo/trunk: apollo-dto/src/main/java/org/apache/activemq/apollo/dto/ apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/ apollo-web/src/main/webapp/WEB-INF/org/apache/activemq/apollo/dto/

Author: chirino
Date: Sat Dec 24 13:32:43 2011
New Revision: 1222971

URL: http://svn.apache.org/viewvc?rev=1222971&view=rev
Log:
Fixes web console HTML view regression add more details to the ErrorDTO.

Bug introduced when the fix for APLO-122 was committed.

Added:
    activemq/activemq-apollo/trunk/apollo-web/src/main/webapp/WEB-INF/org/apache/activemq/apollo/dto/ErrorDTO.jade
Modified:
    activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/ErrorDTO.java
    activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/JaxrsExceptionMapper.scala
    activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/Support.scala

Modified: activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/ErrorDTO.java
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/ErrorDTO.java?rev=1222971&r1=1222970&r2=1222971&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/ErrorDTO.java (original)
+++ activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/ErrorDTO.java Sat Dec 24 13:32:43 2011
@@ -31,44 +31,28 @@ import java.util.List;
 public class ErrorDTO {
 
     /**
+     * The error code.
+     */
+    @XmlAttribute(name="code")
+    public String code;
+
+    /**
      * The message associated with the error.
      */
     @XmlAttribute(name="message")
     public String message;
 
-    public ErrorDTO(){}
+    /**
+     * The resource being access which caused the error
+     */
+    @XmlAttribute(name="resource")
+    public String resource;
 
-    public ErrorDTO(String message) {
-        this.message = message;
-    }
+    public ErrorDTO(){}
 
     /**
      * To hold any other non-matching XML elements
      */
     @XmlAnyElement(lax=true)
     public List<Object> other = new ArrayList<Object>();
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof ErrorDTO)) return false;
-
-        ErrorDTO errorDTO = (ErrorDTO) o;
-
-        if (message != null ? !message.equals(errorDTO.message) : errorDTO.message != null) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        return message != null ? message.hashCode() : 0;
-    }
-
-    @Override
-    public String toString() {
-        return "ErrorDTO{" +
-                "message='" + message + '\'' +
-                '}';
-    }
 }

Modified: activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/JaxrsExceptionMapper.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/JaxrsExceptionMapper.scala?rev=1222971&r1=1222970&r2=1222971&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/JaxrsExceptionMapper.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/JaxrsExceptionMapper.scala Sat Dec 24 13:32:43 2011
@@ -19,6 +19,8 @@ package org.apache.activemq.apollo.web.r
 import javax.ws.rs.core._
 import javax.ws.rs.ext._
 import javax.ws.rs._
+import core.MediaType._
+import core.Response.Status
 import core.Response.Status._
 import org.apache.activemq.apollo.dto.ErrorDTO
 import javax.servlet.http.HttpServletRequest
@@ -40,21 +42,34 @@ class JaxrsExceptionMapper extends Excep
     http_request.getRequestURI + Option(query).map("?"+_).getOrElse("")
   }
 
+  @Produces(Array(APPLICATION_JSON, APPLICATION_XML, TEXT_XML))
   def toResponse(error: Throwable): Response = {
-    
-    def response(status: Response.Status, msg: String) = {
+
+    def response(status: Response.Status, msg: String=null) = {
       val response = Response.status(status)
-      response.entity(new ErrorDTO(msg))
+      var dto = new ErrorDTO()
+      dto.code = "%d: %s".format(status.getStatusCode, status.getReasonPhrase)
+      dto.message = msg;
+      dto.resource = requested_uri;
+      response.entity(dto)
       response.build
     }
 
     error match {
       case ex:WebApplicationException =>
-        ex.getResponse.getStatus match {
-          case 404 =>
-            response(NOT_FOUND, "Resource not found: "+requested_uri)
-          case _ =>
-            ex.getResponse
+        var code = ex.getResponse.getStatus
+        if(code >= 400 && code != 401) {
+          if(ex.getResponse.getStatus >= 500) {
+            Resource.warn(ex, "HTTP request from '%s' for %s '%s' caused internal server error: %s", http_request.getRemoteAddr, http_request.getMethod, requested_uri, ex.toString);
+          }
+          var status = Status.fromStatusCode(ex.getResponse.getStatus)
+          ex.getResponse.getEntity match {
+            case null => response(status)
+            case x:String => response(status, x)
+            case _ => ex.getResponse
+          }
+        } else {
+          ex.getResponse
         }
       case ex:Throwable =>
         Resource.warn(ex, "HTTP request from '%s' for %s '%s' caused internal server error: %s", http_request.getRemoteAddr, http_request.getMethod, requested_uri, ex.toString);

Modified: activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/Support.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/Support.scala?rev=1222971&r1=1222970&r2=1222971&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/Support.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/Support.scala Sat Dec 24 13:32:43 2011
@@ -33,6 +33,7 @@ import util.continuations._
 import org.apache.activemq.apollo.util._
 import java.net.{InetSocketAddress, URI}
 import java.security.cert.X509Certificate
+import org.apache.activemq.apollo.dto.ErrorDTO
 
 object Resource extends Log {
 
@@ -108,10 +109,10 @@ abstract class Resource(parent:Resource=
             if (authorizer.can(security_context, action, resource)) {
               block.onComplete(rc)
             } else {
-              unauthroized
+              unauthorized
             }
           } else {
-            unauthroized
+            unauthorized
           }
         } catch {
           case e:Throwable =>
@@ -217,13 +218,18 @@ abstract class Resource(parent:Resource=
     }
   }
 
-  protected def unauthroized = {
+  protected def unauthorized = {
     val response = Response.status(HttpServletResponse.SC_UNAUTHORIZED)
     if( http_request.getHeader("AuthPrompt")!="false" && http_request.getSession(false)==null ) {
       // TODO: perhaps get the realm from the authenticator
       var http_realm = "Apollo"
       response.header(HEADER_WWW_AUTHENTICATE, AUTHENTICATION_SCHEME_BASIC + " realm=\"" + http_realm + "\"")
     }
+
+    var dto = new ErrorDTO()
+    dto.code = "%d: %s".format(UNAUTHORIZED.getStatusCode, UNAUTHORIZED.getReasonPhrase)
+    dto.message = "You do not have access to access the resource.";
+    response.entity(dto)
     throw new WebApplicationException(response.build())
   }
 

Added: activemq/activemq-apollo/trunk/apollo-web/src/main/webapp/WEB-INF/org/apache/activemq/apollo/dto/ErrorDTO.jade
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-web/src/main/webapp/WEB-INF/org/apache/activemq/apollo/dto/ErrorDTO.jade?rev=1222971&view=auto
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-web/src/main/webapp/WEB-INF/org/apache/activemq/apollo/dto/ErrorDTO.jade (added)
+++ activemq/activemq-apollo/trunk/apollo-web/src/main/webapp/WEB-INF/org/apache/activemq/apollo/dto/ErrorDTO.jade Sat Dec 24 13:32:43 2011
@@ -0,0 +1,31 @@
+-# Licensed to the Apache Software Foundation (ASF) under one or more
+-# contributor license agreements.  See the NOTICE file distributed with
+-# this work for additional information regarding copyright ownership.
+-# The ASF licenses this file to You under the Apache License, Version 2.0
+-# (the "License"); you may not use this file except in compliance with
+-# the License.  You may obtain a copy of the License at
+-# 
+-# http://www.apache.org/licenses/LICENSE-2.0
+-# 
+-# Unless required by applicable law or agreed to in writing, software
+-# distributed under the License is distributed on an "AS IS" BASIS,
+-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-# See the License for the specific language governing permissions and
+-# limitations under the License.
+
+- import it._
+- val helper = new org.apache.activemq.apollo.web.resources.ViewHelper
+- import helper._
+
+div(style="padding:2em;font-size:150%")
+  - if(code!=null)
+    h1(style="font-size:150%") #{code}
+  - else
+    h1 Error
+  div(style="padding-left:1em")
+    - if(message !=null)
+      p #{message}
+    - if(it.resource !=null)
+      p
+        while trying to access
+        code #{it.resource}
\ No newline at end of file