1

Hibernateを使用する既存のWicketアプリケーションの作業を開始しました。JAX-RSを使用して(同じWebアプリ内の)HibernateデータにRESTfulインターフェイスを追加しています。JAX-RSサーブレットは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が着信JSONユーザーオブジェクトをHTTPPUTでアンマーシャルしようとすると、それが呼び出さ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は、JAXBアノテーションを使用して着信ユーザー仕様をアンマーシャリングし、バインドされていないHibernateUserオブジェクトを作成するJacksonプロバイダーを呼び出す必要があります。文字列を使用してパスワードを設定しようとし、convenienceメソッドは文字列をBasicPasswordインスタンスに変換します。私が見る限り、これはWicketとは何の関係もありません。

なぜWicketがここに関与しているのですか?この時点ではWicketは必要ないか、必要ありません---新しいデタッチされたHibernateオブジェクトを作成する必要があります。

4

1 に答える 1

0

BasicPasswordパスワードハッシュを計算するには、Wicketアプリケーションの認証設定にアクセスする必要があります。これらのリクエストも通過する必要があると思いますWicketFilter

于 2012-04-10T16:07:46.630 に答える