2013-02-06 19 views
5

Mam dwa odpoczynku, które chcę zainstalować na Jboss 7.1.1. serwer.Jboss 7.1.1 - Jackson ContextResolver <ObjectMapper> działa tylko na jednym wdrożeniu

Żądania odpoczynku w obu aplikacjach produkują i konsumują Json. Używam dostawcę jackson do serializowania i deserializacji obiektów.

Teraz potrzebuję niestandardowych konfiguracji ObjectMapper dla każdej aplikacji internetowej. Aby rozwiązać ten problem, dodałem klasy @Provider implementujące ContextResolver. Jeden dla każdego projektu. Fe. Jedna z moich klas wygląda następująco:

@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; 
    } 
} 

Działa dobrze, gdy wdrażam tylko jeden z tych projektów na jboss. Kiedy próbuję wdrożyć oba, tylko pierwszy zainicjowany projekt używa zdefiniowanego objectMapper. Inny nigdy nie wywołuje metody getContext z klasy ContextResolver. Co mogłem zrobić źle?

EDIT !:

Po wielu próbach postanowiłem zmienić metodę parsowania JSON z Jackson do staxon. Miałem nadzieję, że przynajmniej ta metoda zadziała dobrze. Ale nie ... Serializacja działa doskonale w obu wdrożonych aplikacjach. Ale znowu, jboss postanowił użyć jacksona zamiast staxona w procesie deserializacji. Znowu zawsze działa aplikacja, którą nazywam pierwszym po wdrożeniu. Ale drugi używający jacksona (nie mam pojęcia dlaczego ...), który wywołuje wyjątki. Zawsze ...

Czy jest jakiś problem z Jboss? Prawdopodobnie robię coś złego, ale nie mam pojęcia, gdzie. Ktoś ma pomysł, gdzie powinienem wyglądać?

+0

Jest to dokładny przypadek użycia i problem, który mam. I jeden z powodów, dla których zaczynam preferować .net i lub apple development – NimChimpsky

Odpowiedz

4

Wygląda na to, że znalazłem rozwiązanie tego problemu. Wiadomo było wydanie resteasy, które mogą być usunięte przez wbudowany w opcji:

Aby rozwiązać ten problem, po prostu musiałem dodać param do web.xml z moich projektów:

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

Znalazłem rozwiązanie w Resteasy jira. To naprawdę dziwne, że nie ma informacji w żadnej dokumentacji związanej z jboss lub resteasy ...

+0

+1 dla linku do JIRA –

+0

, gdybym mógł plus to 100 razy zrobiłbym to. Dlatego nie lubię jboss i wszystkich powiązanych projektów, słabo udokumentowanych i błędnych. – NimChimpsky