2011-11-03 12 views
13

Zaten çalışmakta olan JAX-RS üzerinde bir Web Service üzerinde çalışıyorum. Şimdi kullanıcıya özel bir mesajla 40X hatası göndermek için bazı İstisnaları yakalamanın yolunu arıyorum.JAX-RS Özel Durumunda özel bir iletiyle 40X hatası nasıl ayarlayabilirim?

Bir web servisi ve ExceptionMapper var.

Bu benim web hizmetidir: Bu benim ExceptionMapper

@Provider 
@Produces(MediaType.TEXT_XML) 
public class IllegalArgumentExceptionMapper 
    implements ExceptionMapper<IllegalArgumentException> { 

    @Override 
    public Response toResponse(IllegalArgumentException e) { 
     return Response.status(Response.Status.BAD_REQUEST).build(); 
    } 
} 

@Path(value = "/test/") 
public interface ServiceTest { 

    @Path(value = "{rrf}") 
    @GET 
    @Produces(MediaType.TEXT_XML) 
    public ObjectDTO getDealer(@PathParam("rrf") String rrf){ 
     ObjectDTO objectDTO = new ObjectDTO(); 
     if(verifyRRFSintax(rrf)) { 
      //Get the objet, this part works fine 
     } else { 
      throw new IllegalArgumentException("Custom message"); 
     } 
     return dwsDTO; 
    } 

    private boolean verifyRRFSintax(String rrf) { 
     return rrf.matches("[0-9]{8}"); 
    } 
} 

ve bu uygulamanın-context.xml dosyada sicil böyle mi

<bean id="serviceTest" class="ServiceTest"/> 

<jaxrs:server id="Server" address="/ws"> 
    <jaxrs:serviceBeans> 
     <ref bean="serviceTest"/> 
    </jaxrs:serviceBeans> 
    <jaxrs:providers> 
     <bean id="rffErrorException" class="IllegalArgumentExceptionMapper"/> 
    </jaxrs:providers> 
</jaxrs:server> 

zaman Ben hata ayıklama, IllegalArgumentExceptionMapper atıyor özel durum yakalar ama ben sarı bir ileti görmüyorum tarayıcıda gösterilen web sayfası. Ben her zaman bu özel mesajı tarayıcıda göstermek için nasıl yapabilirim? Neden, bu sarı sayfa her zaman aynıdır, Yanıt Statüsü (NOT_FOUND, BAD_REQUEST, YASAK) tür değiştirseniz bile?

PD: Konsolda, Eşleyici'nin istisnayı yakaladığında yazdırılan "out.handlemessage" iletisine sahibim.

Teşekkürler.

+0

Tamam çocuklar, teşekkürler, sonunda ihtiyacım olanı bulundu: public class DwsWebServiceException WebApplicationException { kamu DwsWebServiceException (Dize mesajı, int durumu) { süper (Tepki uzatır: Ben gibi bir Özel İstisna ekleyin. durum (durumu) .entity (mesaj) .Tip (MediaType.TEXT_XML) .build()); } } ve mesajı gösteriliyor. – jomaora

cevap

13
throw new WebApplicationException(Response.status(Status.NOT_FOUND)// Or another Status 
       .entity("Error Message").build()); 
+2

Diğer JAX-RS uygulamalarını bilmiyorum, ama benim için RestEasy 3.0x ile bu işe yaramayacak. Sessizce başarısız olur ve müşteri tarafından yanıt alınmaz. '.type (MediaType.TEXT_PLAIN)' seçeneğini 'Response' oluşturucunuzdaki metod zincirine eklemeniz gerekir, aksi takdirde String "varlık" ı daraltmış gibi görünür. – Lambart

+0

Teşekkürler, @Lambart, yorumunuz için teşekkürler: https://stackoverflow.com/questions/23628897/dropwizard-exception-handling-giving-custom-error-json-error-messages-to-clie –

+0

@FerranMaylinch Yardım olmaktan mutluluk duyuyorum. Gördüğüm kadarıyla bu soru ve cevabımı kendim üstlendim. :) – Lambart

İlgili konular