2013-07-16 12 views
11

Jersey 2.0の文書(https://jersey.java.net/documentation/latest/user-guide.html#json.moxy)、変更されたpom.xml、jersey-media-moxyアーティファクトが含まれ、コンパイルされてインストールされました。私は、ProducesとConsumesの両方のための基本的なPOJOからJSONへのマッピング作業を得ることができました。Jersey 2.0とMoxy内部サーバーエラーが発生しましたがサーバーログがありません

しかし、複雑なデータ型のPOJOをリソースの戻り値の型として試してみたとき、私はステータス500内部サーバーエラーが発生しましたが、サーバーログはありませんでした。それは非常に迷惑です。誰かがそれがバグか私が設定で何かを逃したかどうかを知っていますか?

ところで、POJOオブジェクトにMoxyマッピングを使用するには、POJOに空のパラメータコンストラクタが必要です。その他の要件はありますか?内部サーバーエラーのためにスタックトレースがあなたのセットアップに依存する見つける

EclipseLink MOXyを統合する方法を示し

+0

を参照してください[私の答え](http://stackoverflow.com/a/40896460/1751640)ご回答のため – Mordechai

答えて

1

公式Jersey例としては、以下のリンクで見つけることができますあなたについての追加情報を提供できますか?

上記の例を使用して、org.glassfish.jersey.examples.jsonmoxy.TestBeanクラスからデフォルトのコンストラクタを削除すると、mvn testを実行するときに次の例外が発生します。そのうちの1つは良いもので、もう1つは悪いものです。私はジャージーのリードをフォローアップして適切な行動を取るつもりです。

悪い例外

testGet(org.glassfish.jersey.examples.jsonmoxy.JsonResourceTest) Time elapsed: 0.507 sec <<< ERROR! 
javax.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error 
    at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:904) 
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:749) 
    at org.glassfish.jersey.client.JerseyInvocation.access$500(JerseyInvocation.java:88) 
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:650) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:426) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:646) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:375) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:275) 
    at org.glassfish.jersey.examples.jsonmoxy.JsonResourceTest.testGet(JsonResourceTest.java:76) 

グッド例外

roundTripTest(org.glassfish.jersey.examples.jsonmoxy.JsonResourceTest) Time elapsed: 0.048 sec <<< ERROR! 
javax.ws.rs.WebApplicationException: HTTP 500 Internal Server Error 
    at org.eclipse.persistence.exceptions.JAXBException.factoryMethodOrConstructorRequired(JAXBException.java:144) 
    at org.eclipse.persistence.jaxb.compiler.AnnotationsProcessor.finalizeProperties(AnnotationsProcessor.java:896) 
    at org.eclipse.persistence.jaxb.compiler.AnnotationsProcessor.processClassesAndProperties(AnnotationsProcessor.java:282) 
    at org.eclipse.persistence.jaxb.compiler.Generator.<init>(Generator.java:150) 
    at org.eclipse.persistence.jaxb.JAXBContext$TypeMappingInfoInput.createContextState(JAXBContext.java:1017) 
    at org.eclipse.persistence.jaxb.JAXBContext.<init>(JAXBContext.java:174) 
    at org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:165) 
    at org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:152) 
    at org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:112) 
    at org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:102) 
    at org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.getJAXBContext(MOXyJsonProvider.java:302) 
    at org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.writeTo(MOXyJsonProvider.java:787) 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:194) 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139) 
    at org.glassfish.jersey.filter.LoggingFilter.aroundWriteTo(LoggingFilter.java:268) 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139) 
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1005) 
    at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:430) 
    at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:290) 
    at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:203) 
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:215) 
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:650) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:426) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:646) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:402) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:305) 
    at org.glassfish.jersey.examples.jsonmoxy.JsonResourceTest.roundTripTest(JsonResourceTest.java:84) 

UPDATE

EclipseLで開始インク2.5.1を使用してMOXyJsonProviderスタンドアロンでモデルをテストすることができます。

import java.lang.reflect.Field; 
import java.util.*; 
import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider; 

public class Demo { 

    private List<Foo> foos; 

    public static void main(String[] args) throws Exception { 
     MOXyJsonProvider moxyJsonProvider = new MOXyJsonProvider(); 

     Field field = Demo.class.getDeclaredField("foos"); 

     List<Foo> foos = new ArrayList<Foo>(1); 
     Foo foo = new Foo(); 
     foo.setBar("Hello World"); 
     foos.add(foo); 

     moxyJsonProvider.writeTo(foos, field.getType(), field.getGenericType(), null, null, null, System.out); 
    } 

} 
+0

感謝。このドキュメント(https://jersey.java.net/documentation/latest/modules-and-dependencies.html#server-jdk)に従って、私のアプリケーションをServlet to Jettyサーバとしてデプロイしました。 Tomcatサーバーと同じサーブレットも試しました。いずれのサーバーも、内部サーバーエラー500を返すときに、サーバーログがstdoutまたはサーバーログファイルにありません。 –

+3

ジャージーは最近このログの欠落を追跡するバグを持っています:https://java.net/jira/browse/JERSEY-2000 –

5

私は同じ問題を抱えていたし、この記事を見つけました:

著者はMOXYによってスローされた例外をログに記録するApplicationEventListenerを実施しました。これは、(あなたのアプリケーションに登録する必要があります)私の実装です:

public class ExceptionListener implements ApplicationEventListener { 

    @Override 
    public void onEvent(ApplicationEvent event) { 

    } 

    @Override 
    public RequestEventListener onRequest(RequestEvent requestEvent) { 
     return new ExceptionRequestEventListener(); 
    } 

    public static class ExceptionRequestEventListener implements RequestEventListener{ 
     private final Logger logger; 

     public ExceptionRequestEventListener(){ 
      logger = Logger.getLogger(getClass()); 
     } 

     @Override 
     public void onEvent(RequestEvent event) { 
      switch (event.getType()){ 
       case ON_EXCEPTION: 
        Throwable t = event.getException(); 
        logger.error("Found exception for requestType: "+event.getType(), t); 
      } 
     } 
    } 
} 
+0

Thx、これは本当に私を助けました。 – wvdz

関連する問題