2

JBoss EAP 5 で Apache を前に実行する (JAX-RS を使用する) Web サービスアプリケーションがあります。XML がマーシャリングされている私のクラスは次のようになります。

@XmlRootElement(name = "newRequest")
public class NewRequest {
    @XmlElement(required = false, name = "Guid")
    public String guid;
    @XmlElement(required = false, name = "AuthorizedBy")
    public String authorizedBy;
}

およびリクエストを処理する実際のコード:

@Path("/newrequest")
public class NewResource {
    private static final Logger logger = Logger.getLogger(NewResource.class);

    @PUT
    @Consumes({"application/xml", "application/json"})
    @Produces({"application/xml", "application/json"})
    public String processNewRequest(@HeaderParam("Authorization") String authorization, NewRequest request) {
        ...
    }
    ...
}

Apache access_log にリクエストが表示されます。

10.1.4.55 - qa [26/Jun/2013:13:34:16 -0500] "PUT /rest/newrequest HTTP/1.1" 400 961 "-" "Apache-HttpClient/4.2.1 (java 1.5)" 135807 961

しかし、JBoss ログには何もありません。その 400 エラーは、XML で意図的にスペルを間違えたときに生成されます (JMeter を使用してリクエストを送信します。「new」の代わりに「nwe」を入力します。このエラーをキャッチして、どの要素が悪いのかを調べる方法はありますか? ? JAX-RS 例外マッパーについて読みましたが、これまで使用したことがなく、この問題を処理する正しい方法であるかどうかもわかりません。

4

1 に答える 1

0

はい、この例外を で処理する必要がありますExceptionMapper

例外マッパーは、JAX-RS で簡単に作成および構成できます。javax.ws.rs.ext.ExceptionMapper<T>インターフェイスを実装し、クラスに@Provider注釈を付けるだけです。

@Provider
public class ParseExceptionMapper extends implements ExceptionMapper<{Exception Being Thrown During Parse}> 
{
    @Override
    public Response toResponse({Exception Being Thrown During Parse} exception) 
    {
         //Create a response here.
    }
}

編集:

JBossにデプロイしているとだけ述べたので、JAX-RS実装としてResteasyを使用していると思います。BadRequestExceptionはJAX-RS 準拠の実装に含まれているため、実際には重要ではありません。

の ExceptionMapper 実装を作成してみてくださいorg.jboss.resteasy.spi.BadRequestException。これは、Resteasy が HTTP 400 エラーに遭遇したときに発生させる例外です。

import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import org.jboss.resteasy.spi.BadRequestException;

@Provider
public class BadRequestExceptionMapper implements ExceptionMapper<BadRequestException>
{
    @Override
    public Response toResponse(BadRequestException exception) 
    {
        //Create Response Here
    }
}
于 2013-07-05T05:10:07.033 に答える