2013-02-06 24 views
5

Tôi có hai ứng dụng web còn lại mà tôi muốn triển khai trên Jboss 7.1.1. máy chủ.Jboss 7.1.1 - Jackson ContextResolver <ObjectMapper> chỉ hoạt động trên một triển khai

Yêu cầu còn lại trong cả hai ứng dụng tạo và tiêu thụ Json. Tôi sử dụng nhà cung cấp jackson để serialize và deserialize đối tượng.

Bây giờ, tôi cần cấu hình ObjectMapper tùy chỉnh cho mỗi ứng dụng web. Vì vậy, để giải quyết vấn đề này tôi đã thêm vào @Provider lớp thực hiện ContextResolver. Một cho mỗi dự án. Fe. Một trong những lớp học của tôi trông giống như vậy:

@provider 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public class JacksonConfig implements ContextResolver<ObjectMapper> { 
    private final ObjectMapper objectMapper; 
    public JacksonConfig() 
    { 
     objectMapper = new ObjectMapper(); 
     objectMapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true); 
    } 
    @Override 
    public ObjectMapper getContext(Class<?> objectType) { 
     return objectMapper; 
    } 
} 

Nó hoạt động tốt khi tôi triển khai chỉ một trong những dự án này trên jboss. Khi tôi cố gắng triển khai cả hai, chỉ sử dụng dự án khởi tạo đầu tiên được xác định objectMapper. Người khác không bao giờ gọi phương thức getContext từ lớp ContextResolver. Tôi có thể làm gì sai?

EDIT !:

Sau rất nhiều thử nghiệm tôi đã quyết định thay đổi phương pháp phân tích cú pháp JSON từ jackson để staxon. Tôi hy vọng ít nhất phương pháp này sẽ hoạt động tốt. Nhưng không ... Serialization hoạt động hoàn hảo trên cả hai ứng dụng được triển khai. Nhưng một lần nữa, bằng cách nào đó, jboss quyết định sử dụng jackson thay vì staxon trong quá trình deserialization. Một lần nữa, ứng dụng luôn được tôi gọi đầu tiên sau khi triển khai hoạt động tốt. Nhưng thứ hai sử dụng jackson (không biết tại sao ...) gọi là ngoại lệ. Luôn luôn ...

Có vấn đề gì với Jboss không? Có lẽ tôi chỉ làm điều gì đó sai, nhưng tôi không có ý tưởng ở đâu. Ai cũng có ý tưởng tôi nên tìm ở đâu?

+0

đây là trường hợp sử dụng chính xác và vấn đề tôi có. Và một trong những lý do tôi bắt đầu thích .net và hoặc phát triển táo – NimChimpsky

Trả lời

4

Có vẻ như tôi đã tìm thấy giải pháp cho vấn đề này. Nó được biết đến vấn đề resteasy, có thể được loại bỏ bằng cách xây dựng trong tùy chọn:

Để giải quyết vấn đề này, tôi chỉ phải thêm param để web.xml các dự án của tôi:

<context-param> 
    <param-name>resteasy.use.deployment.sensitive.factory</param-name> 
    <param-value>false</param-value> 
</context-param> 

Tôi thấy điều này giải pháp trong Resteasy jira. Nó thực sự kỳ lạ đối với tôi rằng không có thông tin trong bất kỳ tài liệu liên quan đến jboss hoặc resteasy ...

+0

+1 cho liên kết đến JIRA –

+0

nếu tôi có thể cộng với 100 lần tôi sẽ làm. Đây là lý do tại sao tôi không thích jboss và tất cả các dự án liên quan, kém tài liệu và lỗi. – NimChimpsky