Home Ask Login Register

Developers Planet

Your answer is one click away!

dermoritz February 2016

Can't serialize (json) object because weld crates a proxy "Unrecognized field "handler"

I have many DTO classes i my project that are serialize to json to be used for rest endpoints. All extend (direct or indirect) an abstract class "Linkable" that holds the id of the objects and creates self link using injected "UriInfo". To get this working i need to inject instances of the DTOs. This all works fine.

Lately i created 2 other DTO that have an additional level in hierarchy. The problem is that if i try to inject instances of this classes i get an proxy (created by weld). This proxies contain aditional fields that can't be serialize because they are unknown (no getters or setters): com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "handler"

So my question is: Why a proxy is instantiated and not the class itself. As a workaround: can i mark thos additional fields to be ignored somehow (the proxy is a subclass)?

Here is the code of the part of the hierarchy different to the working DTOs (CreatedByUserRepresentation extends Linkable):

public abstract class VoteRepresentation<T extends CreatedByUserRepresentation> extends CreatedByUserRepresentation{

    private T voteOf;

    @Min(-1) // down vote
    @Max(1) // up vote
    private int value;

    public boolean valueIsNotZero() {
        return value != 0;

    public T getVoteOf() {
        return voteOf;

    public int getValue() {
        return value;

    public void setVoteOf(T voteOf) {
        this.voteOf = voteOf;

    public void setValue(int value) {
        this.value = value;


The actual class:

@XmlRootElement(name = "problemvote", namespace = "urn:problems:problemvote")
public class ProblemVoteRepresentation extends VoteRepresentation<ProblemRepresentation> {

    protected Class<?> getResourceClass() {
        return ProblemVoteResource.class;



dermoritz February 2016

I found the cause of this odd behavior: It is the annotation @AssertTrue. If i remove it weld no longer uses a proxy and serialization works fine.

This limits usage of javax.validation a lot and i think this behavior is not intended?!

EDIT Martin Kouba gave a good explanation this behavior is implied by the bean validation spec 10.1.2.

Post Status

Asked in February 2016
Viewed 3,672 times
Voted 9
Answered 1 times


Leave an answer

Quote of the day: live life

Devs Planet ®

2014-2016 www.devsplanet.com

Devs Planet © all rights reserved