Wicket在尝试访问Hibernate实体时“没有附加应用程序”

时间:2012-04-10 15:54:18

标签: hibernate wicket jax-rs

我刚开始研究使用Hibernate的现有Wicket应用程序。我正在使用JAX-RS为Hibernate数据(在同一个Web应用程序中)添加一个RESTful接口。 JAX-RS servlet根本不与Wicket交谈 - 它们独立创建Hibernate会话。

我有一个类User,它被定义为使用来自net.databinder.auth.data的类的Hibernate实体(也是JAXB可编组的):

@Entity
@Table(name = "user")
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlRootElement
public class User extends AbstractEntity implements DataUser {

一切正常,直到我尝试将设置密码(BasicPassword是可嵌入的net.databinder.auth.data类型)添加到我的RESTful接口(直到现在,我忽略了密码属性):

@XmlTransient
public void setPassword(BasicPassword password) {
  this.password = password;
}

@XmlElement
public void setPassword(String password) {
  setPassword(new BasicPassword(password));
}

突然间,当Apache CXF-JAXRS + Jackson + JAXB尝试在HTTP PUT中输入我的传入JSON用户对象时,它会调用user.setPassword("...")并收到以下错误:

WARN  - ApplicationExceptionMapper - WebApplicationException has been caught : There is no application attached to current thread "http-bio-8080"-exec-5 (through reference chain: com.example.entity.User["password"])

哇 - Wicket进来的地方? Apache CXF-JAXRS应该调用Jackson提供程序,它使用JAXB注释来解组我的传入用户规范,创建一个未绑定的Hibernate User对象,对吗?它尝试使用字符串设置密码,而方便方法将字符串转换为BasicPassword实例。据我所知,这些与Wicket无关。

为什么Wicket甚至参与其中?我现在不想要或不需要Wicket ---我只需要创建一个新的分离的Hibernate对象。

1 个答案:

答案 0 :(得分:0)

BasicPassword需要访问Wicket应用程序的授权设置才能计算密码哈希值。我想你也需要通过WicketFilter传递这些请求。