2013-02-06 4 views
5

Ho due webapp di riposo che voglio distribuire su Jboss 7.1.1. server.Jboss 7.1.1 - Jackson ContextResolver <ObjectMapper> funziona solo su una distribuzione

Le richieste di rest in entrambe le app producono e consumano Json. Uso il provider di jackson per serializzare e deserializzare oggetti.

Ora, ho bisogno di configurazioni personalizzate di ObjectMapper per ogni webapp. Quindi per risolvere questo problema ho aggiunto le classi @Provider che implementano ContextResolver. Uno per ogni progetto. Fe. Uno della mia classe che assomiglia:

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

funziona bene quando schiero solo uno di questi progetti JBoss. Quando provo a distribuire entrambi, solo il primo progetto inizializzato utilizza objectMapper definito. L'altro non chiama mai il metodo getContext dalla classe ContextResolver. Cosa potrei fare di sbagliato?

EDIT !:

Dopo un sacco di prove ho deciso di cambiare il metodo di analisi JSON da Jackson a staxon. Speravo almeno che questo metodo funzionasse bene. Ma non ... La serializzazione funziona perfettamente su entrambe le applicazioni distribuite. Ma ancora una volta, in qualche modo, JBoss ha deciso di usare Jackson invece di Staxon nel processo di deserializzazione. Di nuovo sempre l'applicazione che chiamo prima dopo la distribuzione funziona bene. Ma in secondo luogo usando jackson (non so perché ...) che chiama eccezioni. Sempre ...

C'è qualche problema con Jboss? Probabilmente sto solo facendo qualcosa di sbagliato ma non ho idea di dove. Qualcuno ha idea di dove dovrei guardare?

+0

questo è l'esatto caso d'uso e problema che ho. E uno dei motivi per cui sto iniziando a preferire .net o lo sviluppo di apple – NimChimpsky

risposta

4

Sembra che abbia trovato la soluzione per questo problema. Era noto problema della RESTEasy, che può essere rimosso build-in opzione:

per risolvere questo problema ho dovuto aggiungere param a web.xml dei miei progetti:

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

ho trovato questo soluzione in Resteasy jira. È davvero strano per me che non ci siano informazioni in qualsiasi documentazione relativa a jboss o resteasy ...

+0

+1 per il collegamento a JIRA –

+0

se potessi aggiungere 100 volte. Questo è il motivo per cui non mi piace jboss e tutti i progetti associati, scarsamente documentati e buggy. – NimChimpsky