2011-02-09 33 views
1

JAXBがパラメータ値の文字列を自分のオブジェクトに変換するために使用すると思われるfromStringメソッドを使用して自分のクラスを作成しました。しかし、このfromStringメソッドの中には、例外を吹き飛ばすtry catchブロックがあります。以下のように。JAX-RS例外マッパーは、パラメータ変換時にスローされる例外を処理しません。

@Component 
@Provider 
public class CannotConvertAnimalExceptionHandler implements ExceptionMapper<CannotConvertAnimalException> 

ものがあることである私のリソースの方法で:

public class Animal{ 
    public static Animal fromString(final String input){ 

     try{ 
      ... 
     }catch(IllegalArgumentException ae){ 
      throw new CannotConvertAnimalException(); //this is my custom exception 
     } 
    } 
} 

そしてその後、私は次のようなCannotConvertAnimalExceptionためのマッパーを持っています。私は、それは動物に変換するパラメータ文字列がCannotConvertAnimalExceptionをスローしたときに、私の、カスタマー例外マッパーがそれを処理しないことが判明したデータ型動物

@GET 
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
public Response showAnimalInfo(Animal animal){....} 

を使用しています。代わりに、ParamException.QueryParamExceptionをスローして、QueryParamExceptionハンドラに渡して応答を処理します。

変換が悪くなったときやCannotConvertAnimalExceptionがスローされたときに正しいマッパーがそれを処理するようにする方法はありますか?

答えて

3

これで答えが見つかりました。文字列からオブジェクトへの変換を試みるときにスローする例外は、QueryParamExceptionの中にラップされ、したがって、QueryParamException ExceptionMapper(もしあれば)によって処理されることが分かります。この問題を回避するための一つの方法は、実際にQueryParamExceptionによって包まれているものは例外を識別し、適切なハンドラもちろんの

Map<Exception, ExceptionMapper> mapper; 

catch(Exception e){ 
    exMapper = mapper.get(exception.getCause); 
} 

にQueryParamExceptionの原因を一致させるために地図のいくつかの種類を使用することです適切な例外とマッパーを含むyorマップをロードする必要があります。私は春にこの変数にマップを挿入させることでこれを行います。

0

異なるJAX-RSフレームワークを使用してください。 (実際にどのフレームワークを使用していますか?)
Winkであなたのシナリオはうまくいくと思います。

関連する問題