2013-07-16 41 views
11

Tôi đã theo tài liệu Jersey 2.0 (https://jersey.java.net/documentation/latest/user-guide.html#json.moxy), tệp pom.xml đã sửa đổi, bao gồm tạo phẩm và phương tiện được tạo và cài đặt. Tôi có thể nhận POJO cơ bản cho công việc ánh xạ JSON cho cả hai trường hợp Produces và Consumes.Lỗi 2.0 và lỗi máy chủ nội bộ của Moxy nhưng không có nhật ký máy chủ

Tuy nhiên, khi tôi thử với một số POJO với kiểu dữ liệu phức tạp làm kiểu trả về tài nguyên, tôi nhận được rất nhiều Trạng thái 500 Lỗi máy chủ nội bộ nhưng không có nhật ký máy chủ. Điều đó rất phiền. Có ai biết nếu nó là một lỗi hoặc tôi bị mất một cái gì đó trong cấu hình?

Nhân tiện, để sử dụng ánh xạ Moxy cho đối tượng POJO, POJO cần có một hàm tạo tham số rỗng. Có bất kỳ yêu cầu nào khác không?

+0

Xem [câu trả lời của tôi] (http://stackoverflow.com/a/40896460/1751640) – Mordechai

Trả lời

1

Các Jersey ví dụ chính thức chứng minh làm thế nào để tích hợp EclipseLink MOXy thể được tìm thấy tại liên kết sau:

Nơi để tìm thấy stacktrace cho các lỗi máy chủ nội bộ sẽ phụ thuộc vào thiết lập của bạn , bạn có thể cung cấp thêm thông tin về bạn không?

Sử dụng ví dụ trên nếu tôi xóa hàm tạo mặc định từ lớp org.glassfish.jersey.examples.jsonmoxy.TestBean Tôi sẽ nhận được các ngoại lệ sau khi chạy mvn test. Một trong số đó là tốt và cái còn lại là xấu. Tôi sẽ theo sát với lãnh đạo Jersey để tìm ra hành vi thích hợp.

Bad Exception

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) 

Tốt Exception

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) 

CẬP NHẬT

Bắt đầu với EclipseL mực 2.5.1 bạn có thể sử dụng MOXyJsonProvider độc lập để kiểm tra mô hình của mình.

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

Cảm ơn phản hồi của bạn. Tôi đã triển khai ứng dụng của mình dưới dạng Servlet thành máy chủ Jetty bằng cách làm theo tài liệu này (https://jersey.java.net/documentation/latest/modules-and-dependencies.html#server-jdk). Tôi cũng đã thử cùng một servlet với máy chủ Tomcat. Không có máy chủ nào có đăng nhập máy chủ trong các tệp nhật ký stdout hoặc máy chủ nhật ký khi trả lại 500 lỗi máy chủ nội bộ. –

+3

Jersey gần đây có một lỗi theo dõi vấn đề đăng nhập bị thiếu này: https://java.net/jira/browse/JERSEY-2000 –

5

tôi đã cùng một vấn đề và tìm thấy bài đăng này:

Tác giả thực hiện ApplicationEventListener để đăng nhập các ngoại lệ ném bởi MOXY. Đây là thực hiện của tôi (cần phải được đăng ký trong ứng dụng của bạn):

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, điều này thực sự đã giúp tôi. – wvdz

Các vấn đề liên quan