demoiselle / framework

Repositório principal contendo o Core e Extensions: JPA, Security, WS
https://demoiselle.org
127 stars 77 forks source link

Exceção DemoiselleRestException #115

Closed diogoabp closed 6 years ago

diogoabp commented 6 years ago

Boa tarde.

Estou desenvolvendo um sistema corporativo utilizando o demoiselle-parent-rest, versão 3.0.1.

pom.xml:

org.demoiselle.jee demoiselle-parent-rest 3.0.1 Ao testar as exceções: @get @path("/coordenador") public Response getInformacoesCoordenador() { throw new DemoiselleRestException(msg.onlyOwner(),403); }

Ele retorna um status 500, independente do código usado (por exemplo, 403).

Como proceder?

Obrigado!

Diogo

botelhojp commented 6 years ago

Olá, seu serviço está anotado para consumir e/ou prover json?

@Produces(APPLICATION_JSON)
@Consumes(APPLICATION_JSON)
@path("/coordenador")
public Response getInformacoesCoordenador() {
throw new DemoiselleRestException(msg.onlyOwner(),403);
}

Tentou lançar outro tipo de exceção, apenas para testar? throw new DemoiselleSecurityException("Teste", UNAUTHORIZED.getStatusCode());

diogoabp commented 6 years ago

Olá,

Está anotado. O outro erro (DemoiselleSecurityException) também gera um 500, conforme imagem:

image

Estou usando a versão 3.0.1.

clovisjunior commented 6 years ago

Olá Diogo,

Criei um projeto utilizando o demoiselle-parent-rest na versão 3.0.1 para reproduzir o erro. A classe que utilizei para teste foi essa:

package br.com.demoiselle.suporte;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.demoiselle.jee.rest.exception.DemoiselleRestException;

@Path("issue")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class TesteExcecaoService {

    @GET
    @Path("/coordenador")
    public Response getInformacoesCoordenador() {
        throw new DemoiselleRestException("Teste", 403);
    }

}

E o comando curl utilizado para testar foi esse:

curl -XGET 'http://localhost:8080/issue-15-0.0.1-SNAPSHOT/api/issue/coordenador' -H 'Content-Type: application/json' -v

Com esse resultado esperado, erro 403 com mensagem de "Teste":

* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /issue-15-0.0.1-SNAPSHOT/api/issue/coordenador HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Type: application/json
> 
< HTTP/1.1 403 Forbidden
< Connection: keep-alive
< X-Powered-By: Undertow/1
< Demoiselle-Version: Demoiselle JEE - Ragnar
< Server: WildFly/10
< Demoiselle-security: Enable
< Content-Type: application/json
< Content-Length: 49
< Date: Thu, 17 May 2018 13:35:31 GMT
< 
* Connection #0 to host localhost left intact
[{"error_description":["Teste"],"error":"Teste"}]% 

Uma coisa que notei na sua imagem foi a falta do Header 'Content-Type: application/json', adicione esse header e retorne o resultado para vermos.

Abraços

diogoabp commented 6 years ago

Boa tarde Clovis,

Copiei o seu código: `package br.edu.utfpr.extensao.teste;

import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response;

import org.demoiselle.jee.rest.exception.DemoiselleRestException;

@Path("issue") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public class TesteExcecaoService {

@GET
@Path("/coordenador")
public Response getInformacoesCoordenador() {
    throw new DemoiselleRestException("Teste", 403);
}

}`

E executei como você havia executado, segue retorno: ` curl -XGET 'http://localhost:8080/extensao-0.0.1/api/issue/coordenador' -H 'Content-Type: application/json' -v Note: Unnecessary use of -X or --request, GET is already inferred.

Obrigado.

diogoabp commented 6 years ago

Fiz alguns testes e atualizando de 3.0.1 para versão 3.0.2, o retorno é o esperado. Posso mudar sem afetar meu projeto?

Obrigado.

clovisjunior commented 6 years ago

Pode atualizar seu projeto para a 3.0.2.

O que deve estar acontecendo é que o erro gerado esta acontecendo em outro ponto da requisição e não no método que estávamos trabalhando.

Atualize para a versão 3.0.2, caso resolva seu problema, por favor feche essa issue.

Grato

diogoabp commented 6 years ago

Clovis,

Atualizei a versão e corrigiu.

Obrigado.