我刚开始研究使用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对象。