2013-07-16 17 views
11

Podążyłem za dokumentem Jersey 2.0 (https://jersey.java.net/documentation/latest/user-guide.html#json.moxy), zmodyfikowanym pom.xml, dołączonym artefaktem jersey-media-moxy, skompilowanym i zainstalowanym. Mogłem uzyskać podstawowe odwzorowanie POJO na JSON dla przypadków Produkcji i Konsumpcji.Błąd serwera Jersey 2.0 i Moxy, ale brak dziennika serwera

Jednak, gdy próbowałem z niektórymi obiektami POJO ze złożonym typem danych jako typem zwracanego zasobu, otrzymałem komunikat o błędzie Wewnętrzny serwer o statusie 500, ale bez żadnego dziennika serwera. To jest bardzo denerwujące. Czy ktoś wie, czy to błąd, czy też coś mi brakowało w konfiguracji?

Nawiasem mówiąc, aby użyć odwzorowania Moxy dla obiektu POJO, POJO musi mieć pusty konstruktor parametrów. Czy są jakieś inne wymagania?

+0

See [moja odpowiedź] (http://stackoverflow.com/a/40896460/1751640) – Mordechai

Odpowiedz

1

Oficjalne Jersey przykłady, które pokazują, jak zintegrować EclipseLink MOXy można znaleźć pod następującym linkiem:

Gdzie znaleźć StackTrace dla błędu serwera wewnętrznego będzie zależeć od konfiguracji , czy możesz podać dodatkowe informacje na swój temat?

W powyższym przykładzie, jeśli usunę domyślny konstruktor z klasy org.glassfish.jersey.examples.jsonmoxy.TestBean, otrzymam następujące wyjątki podczas uruchamiania mvn test. Jedna z nich jest dobra, a druga zła. Zamierzam nawiązać kontakt z liderem z Jersey, aby wypracować właściwe zachowanie.

Bad Wyjątek

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) 

Dobry Wyjątek

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

Począwszy EclipseL tusz 2.5.1 możesz użyć autonomicznego modelu MOXyJsonProvider do przetestowania swojego modelu.

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

Dzięki za odpowiedź. Zainstalowałem moją aplikację jako Servlet na serwer Jetty, wykonując ten dokument (https://jersey.java.net/documentation/latest/modules-and-dependencies.html#server-jdk). Próbowałem również tego samego serwletu z serwerem Tomcat. Żaden z serwerów nie loguje się w stdout lub w plikach dziennika serwera, zwracając 500 błędów wewnętrznego serwera. –

+3

W Jersey niedawno pojawił się błąd śledzenia tego brakującego loginu: https://java.net/jira/browse/JERSEY-2000 –

5

miałem ten sam problem i znaleźć ten wpis:

Autorem realizowany ApplicationEventListener do logowania wyjątki rzucane przez Moxy. To jest moja implementacja (musi być zarejestrowane w aplikacji):

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, to naprawdę mi pomogło. – wvdz

Powiązane problemy