1

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

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

@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 用户对象进行 ummarshall 时,它调用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 注释来解组我传入的用户规范,创建一个未绑定的 HibernateUser对象,对吗?它尝试使用字符串设置密码,便捷方法将字符串转换为BasicPassword实例。据我所知,这一切都与 Wicket 无关。

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

4

1 回答 1

0

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

于 2012-04-10T16:07:46.630 回答