2017-12-12 4 views
0

JAX-RSとMySqlデータベース(JPA)を使用してAPIを構築しています。JPAが返すオブジェクトが内部サーバエラーを返す

public Customer validateCustomer(Customer customer) { 

    //get the customer from the database 
    Query q = em.createQuery("SELECT c from Customer c WHERE c.login = :username"); 
    q.setParameter("username", customer.getLogin()); 
    List<Customer> results = q.getResultList(); 

    //check if user exsists 
    if(!results.isEmpty()){ 
     Customer fromDb = results.get(0); 

     //check if user provided correct password 
     if (!fromDb.getPassword().equals(customer.getPassword())) { 
      return null; 
     } else { 
      //create the session token and save it to the database 
      Random random = new SecureRandom(); 
      String token = new BigInteger(130, random).toString(32); 
      tx.begin(); 
      int executeUpdate = em.createQuery("UPDATE Customer c SET c.token = :token WHERE c.id = :id") 
        .setParameter("token", token) 
        .setParameter("id", fromDb.getId()) 
        .executeUpdate(); 
      tx.commit(); 
      em.close(); 

      //update previously pulled customer with the token 
      fromDb.setToken(token); 

      //return the customer 
      return fromDb; 
     } 
    } else { 
     return null; 
    } 
} 

このメソッドはによって呼び出されて消費されています:私の問題は、たび正しいログインがあるということである

public Response login (Customer customer){ 
    Customer c = customerService.validateCustomer(customer); 
    if (c != null){ 
     return Response.status(Response.Status.OK).entity(c).build(); 
     //System.out.println(c); 
    } else { 
     return Response.status(Response.Status.FORBIDDEN).entity("Incorrect username or password.").build(); 
    } 
} 

私は、ユーザー名とパスワードを検証し、セッションのためのトークンを作成している方法を以下している 提供され、私は私を戻しています

返品から;

私は私のブラウザで内部サーバーエラー500を取得しています:/ API /ユーザー/ログインをアクセスする

HTTPエラー500

問題。理由:

内部サーバーエラー桟橋を搭載

:私は、データベースから、元の顧客を返すいたときに//

しかしエラーのみocures。データベースから返された同じオブジェクトから新しいCustomerオブジェクトを構築して返しても、正常に動作しています。

Customer c = new Customer(); 
      c.setEmail(fromDb.getEmail()); 
      c.setLogin(fromDb.getLogin()); 
      c.setToken(token); 
      c.setId(fromDb.getId()); 

Dbの代わりにcを返すと問題はありません。

データベースのオブジェクトが、作成されたオブジェクトと異なる結果を返す理由はありますか?

Serverログ(エラーを取得)fromDBを返す:

INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
INFO: HHH000115: Hibernate connection pool size: 20 
INFO: HHH000006: Autocommit mode: true 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
INFO: HHH000046: Connection properties: {user=root, autocommit=true, release_mode=auto} 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
INFO: HHH000228: Running hbm2ddl schema update 
INFO: HHH000102: Fetching database metadata 
INFO: HHH000396: Updating schema 
INFO: HHH000261: Table found: test.account 
INFO: HHH000037: Columns: [balance, name, id, accnumber, sortcode] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer 
INFO: HHH000037: Columns: [password, city, street, county, name, id, login, email, token] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer_account 
INFO: HHH000037: Columns: [account_id, customer_id] 
INFO: HHH000108: Foreign keys: [fk70eacecc22b4f18d, fk70eacecc3a281067] 
INFO: HHH000126: Indexes: [fk70eacecc22b4f18d, fk70eacecc3a281067, account_id] 
INFO: HHH000261: Table found: test.hibernate_sequences 
INFO: HHH000037: Columns: [sequence_next_hi_value, sequence_name] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [] 
INFO: HHH000232: Schema update complete 
WARN: HHH000436: Entity manager factory name (Bank) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name' 
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
INFO: HHH000115: Hibernate connection pool size: 20 
INFO: HHH000006: Autocommit mode: true 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
INFO: HHH000046: Connection properties: {user=root, autocommit=true, release_mode=auto} 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
INFO: HHH000228: Running hbm2ddl schema update 
INFO: HHH000102: Fetching database metadata 
INFO: HHH000396: Updating schema 
INFO: HHH000261: Table found: test.account 
INFO: HHH000037: Columns: [balance, name, id, accnumber, sortcode] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer 
INFO: HHH000037: Columns: [password, city, street, county, name, id, login, email, token] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer_account 
INFO: HHH000037: Columns: [account_id, customer_id] 
INFO: HHH000108: Foreign keys: [fk70eacecc22b4f18d, fk70eacecc3a281067] 
INFO: HHH000126: Indexes: [fk70eacecc22b4f18d, fk70eacecc3a281067, account_id] 
INFO: HHH000261: Table found: test.hibernate_sequences 
INFO: HHH000037: Columns: [sequence_next_hi_value, sequence_name] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [] 
INFO: HHH000232: Schema update complete 
WARN: HHH000436: Entity manager factory name (Bank) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name' 
[email protected] 
Returning: [email protected] 

エラーログをC(エラーなし)すべての

INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
INFO: HHH000115: Hibernate connection pool size: 20 
INFO: HHH000006: Autocommit mode: true 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
INFO: HHH000046: Connection properties: {user=root, autocommit=true, release_mode=auto} 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
INFO: HHH000228: Running hbm2ddl schema update 
INFO: HHH000102: Fetching database metadata 
INFO: HHH000396: Updating schema 
INFO: HHH000261: Table found: test.account 
INFO: HHH000037: Columns: [balance, name, id, accnumber, sortcode] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer 
INFO: HHH000037: Columns: [password, city, street, county, name, id, login, email, token] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer_account 
INFO: HHH000037: Columns: [account_id, customer_id] 
INFO: HHH000108: Foreign keys: [fk70eacecc22b4f18d, fk70eacecc3a281067] 
INFO: HHH000126: Indexes: [fk70eacecc22b4f18d, fk70eacecc3a281067, account_id] 
INFO: HHH000261: Table found: test.hibernate_sequences 
INFO: HHH000037: Columns: [sequence_next_hi_value, sequence_name] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [] 
INFO: HHH000232: Schema update complete 
WARN: HHH000436: Entity manager factory name (Bank) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name' 
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
INFO: HHH000115: Hibernate connection pool size: 20 
INFO: HHH000006: Autocommit mode: true 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
INFO: HHH000046: Connection properties: {user=root, autocommit=true, release_mode=auto} 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
INFO: HHH000228: Running hbm2ddl schema update 
INFO: HHH000102: Fetching database metadata 
INFO: HHH000396: Updating schema 
INFO: HHH000261: Table found: test.account 
INFO: HHH000037: Columns: [balance, name, id, accnumber, sortcode] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer 
INFO: HHH000037: Columns: [password, city, street, county, name, id, login, email, token] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer_account 
INFO: HHH000037: Columns: [account_id, customer_id] 
INFO: HHH000108: Foreign keys: [fk70eacecc22b4f18d, fk70eacecc3a281067] 
INFO: HHH000126: Indexes: [fk70eacecc22b4f18d, fk70eacecc3a281067, account_id] 
INFO: HHH000261: Table found: test.hibernate_sequences 
INFO: HHH000037: Columns: [sequence_next_hi_value, sequence_name] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [] 
INFO: HHH000232: Schema update complete 
WARN: HHH000436: Entity manager factory name (Bank) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name' 
[email protected] 
Returning: [email protected] 
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
INFO: HHH000115: Hibernate connection pool size: 20 
INFO: HHH000006: Autocommit mode: true 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
INFO: HHH000046: Connection properties: {user=root, autocommit=true, release_mode=auto} 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
INFO: HHH000228: Running hbm2ddl schema update 
INFO: HHH000102: Fetching database metadata 
INFO: HHH000396: Updating schema 
INFO: HHH000261: Table found: test.account 
INFO: HHH000037: Columns: [balance, name, id, accnumber, sortcode] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer 
INFO: HHH000037: Columns: [password, city, street, county, name, id, login, email, token] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer_account 
INFO: HHH000037: Columns: [account_id, customer_id] 
INFO: HHH000108: Foreign keys: [fk70eacecc22b4f18d, fk70eacecc3a281067] 
INFO: HHH000126: Indexes: [fk70eacecc22b4f18d, fk70eacecc3a281067, account_id] 
INFO: HHH000261: Table found: test.hibernate_sequences 
INFO: HHH000037: Columns: [sequence_next_hi_value, sequence_name] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [] 
INFO: HHH000232: Schema update complete 
WARN: HHH000436: Entity manager factory name (Bank) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name' 
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
INFO: HHH000115: Hibernate connection pool size: 20 
INFO: HHH000006: Autocommit mode: true 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
INFO: HHH000046: Connection properties: {user=root, autocommit=true, release_mode=auto} 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
INFO: HHH000228: Running hbm2ddl schema update 
INFO: HHH000102: Fetching database metadata 
INFO: HHH000396: Updating schema 
INFO: HHH000261: Table found: test.account 
INFO: HHH000037: Columns: [balance, name, id, accnumber, sortcode] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer 
INFO: HHH000037: Columns: [password, city, street, county, name, id, login, email, token] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer_account 
INFO: HHH000037: Columns: [account_id, customer_id] 
INFO: HHH000108: Foreign keys: [fk70eacecc22b4f18d, fk70eacecc3a281067] 
INFO: HHH000126: Indexes: [fk70eacecc22b4f18d, fk70eacecc3a281067, account_id] 
INFO: HHH000261: Table found: test.hibernate_sequences 
INFO: HHH000037: Columns: [sequence_next_hi_value, sequence_name] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [] 
INFO: HHH000232: Schema update complete 
WARN: HHH000436: Entity manager factory name (Bank) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name' 
+0

あなたのApp Server用にサーバー側のログが有効になっていますか?そこにスタックトレースを投稿できますか? –

+0

上記の理由が、データベースから取得したオブジェクトがJSONとしてmy $ .ajaxによって認識されないということができるのであれば、私は考えています。私の理解から、顧客クラスの "@XmlRootElement"は、顧客をXMLに変換し、同じ時間JSONを処理する責任があります。データベースから受け取ったオブジェクトが同じルートを経由していないため、 "@XmlRootElement"が存在しません私のオブジェクトに適用されます。それは可能ですか、もしそうなら、新しいオブジェクトを作成したり、すべての属性を1つから別のものに適用したりせずに、これをどのようにして動作させるか考えていますか? – kazzzhc

答えて

0

ファーストを返すときに、クエリがOKではありません:あなたはできます」更新時にエイリアスを使用しないでください。試してみてくださいem.createQuery("UPDATE Customer SET token = :token WHERE id = :id")

+0

私は自分のクエリを修正しましたが、結果には影響しませんでした。しかし、あなたのフィードバックに感謝します。私はいつもより経験豊富なユーザーから何かを学ぶことができて嬉しいです。 JPA(大学プロジェクト)を使った私の最初のプロジェクトです。 – kazzzhc

+0

アプリケーションログを検索して、エラーを確認してください。 – romanvintonyak

関連する問題