Question

Sorry for my English. I want to set @ManagedProperty for class TaskBO, but it is not works. TaskMB class:

@ManagedBean(name="taskMB")
@RequestScoped
public class TaskMB implements Serializable {

    @ManagedProperty(value="#{TaskBO}")
    public TaskBO taskBO;

    public TaskBO getTaskBO() {
        return this.taskBO;
    }

    public void setTaskBO(TaskBO taskBO){
        this.taskBO = taskBO;
    }
    //...
}

It prints the error:

javax.servlet.ServletException: Unable to set property taskBO for managed bean taskMB
javax.el.ELException: java.lang.IllegalArgumentException: Cannot convert com.otv.model.bo.TaskBO@6c80b8 of type class $Proxy135 to class com.otv.model.bo.TaskBO

But if I add interface ITaskBO, that it is works:

@ManagedProperty(value="#{TaskBO}")
public ITaskBO taskBO;

public ITaskBO getTaskBO() {
    return this.taskBO;
}

public void setTaskBO(ITaskBO taskBO){
    this.taskBO = taskBO;
}

Why not work @ManagedProperty with the class TaskBO?

Was it helpful?

Solution

Is best pratice wire interface instead of concrete class to prevent the problem you encountered.

Cannot convert com.otv.model.bo.TaskBO@6c80b8 of type class $Proxy135 to class com.otv.model.bo.TaskBO

Often Spring's managed object are proxied and a java proxy can be casted ONLY to interface and not to concrete class; the error above is generated because:

  1. TaskBO object is managed by Spring and proxied to an object of type $Proxy135 (the real type of your object now is not really concrete class TaskBO but a proxy you can cast to ITaskBO, the $Proxy135)
  2. you are trying to do some like public TaskBO taskBO = (TaskBO)$Proxy135; but cast a proxy to concrete class is impossible
  3. The right way is to write public ITaskBO taskBO = (ITaskBO)$Proxy135; and this works because a proxy can be cast only to interface

Avoid - as much as possible - use of concrete class in favor of interface.

In addiction you can look here if you are mixing configuration how described in linked question.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top