Я создаю спокойный веб-сервис в JBoss AS 7.1.1 Final. Он отлично работает, пока мне не нужен специальный десериализатор. Код:Restful jboss Deserialize
@Entity
@DiscriminatorColumn(name = "tipo")
@Table(name = "debitavel", schema = "despesas_db")
@Inheritance(strategy = InheritanceType.JOINED)
@JsonDeserialize(using = DebitavelDeserializer.class)
@JsonSerialize(using = DebitavelSerializer.class)
public abstract class Debitavel {
}
Этот класс имеет 2 подкласса:
@Entity
@Table(name = "conta", schema = "despesas_db")
@DiscriminatorValue(value = "CONTA")
public class Conta extends Debitavel {
}
@Entity
@DiscriminatorValue(value = "CONTA")
@Table(name = "cartao", schema = "despesas_db")
public class CartaoCredito extends Debitavel {
}
И у меня есть этот класс использует Debitavel:
@Entity
@Table(name = "despesa", schema = "despesas_db")
@DiscriminatorValue(value = "D")
public class Despesa {
@Column
private String descricao;
@ManyToOne
@JoinColumn(name = "debitavel_id")
protected Debitavel debitavel;
}
Так на странице я посылаю JSON как тот
{
"descricao": "TESTE",
"debitavel": {
"id": 101,
"descricao": "Conta1",
"cor": "#ff0000",
"tipo": "CONTA"
}
}
Итак, я хочу класс, создающий ai nstance из CartaoCredito или Конта, основанный в atributte Tipo, поэтому я строю десериализатор:
public class DebitavelDeserializer extends JsonDeserializer<Debitavel> {
@Override
public Debitavel deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
//staff to create Conta or CartaoCredito
}
}
И мой pom.xml:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.12</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.12</version>
</dependency>
Однако, когда я попытался развернуть app, jboss говорит, что Debitavel - абстрактный класс, и он не может создать экземпляр. Я искал решение, и я попробовал несколько решений:
- Создайте jboss-deployment-structure.xml с модулями из jboss и измените предоставленный pom.xml;
- Измените модуль для отдыха resteasy;
- переход на новый jackson 2.x;
Это означает, что jboss просто игнорирует эти аннотации.
ТКС
Добавление зависимости от resteasy-jackson-provider также помогает мне. –