0

Я получаю исключение с нулевой точкой и исключение целевой цели со следующим компонентом. Программа состоит в том, чтобы проверить сдачу депозита и снятия средств на баланс, а также включить идентификатор транзакции. Я получаю эти исключения в клиентском коде.Java Bean null point exception & invocation target exception

import BankBeanRemotePkg.BankBeanRemote; 
import javax.ejb.Stateful; 
import java.math.BigDecimal; 
import java.util.Random; 
import javax.ejb.Remote; 
import javax.interceptor.Interceptors; 

/** 
* 
* @author Aneel 
*/ 
@Stateful 
@Remote(BankBeanRemotePkg.BankBeanRemote.class) 
@Interceptors(BankBeanPkg.BankCallBacks.class) 

public class BankBean implements BankBeanRemote { 

    private BigDecimal balance; 
    @Override 
    public BigDecimal initial() { 
     BigDecimal initialbal = new BigDecimal("0.00"); 
     return initialbal.setScale(2, BigDecimal.ROUND_UP); 
    } 

    @Override 
    public BigDecimal Current() { 
     return balance.setScale(2, BigDecimal.ROUND_UP); 
    } 

    @Override 
    public int Deposit(BigDecimal amt) { 
     BigDecimal updatedBal = amt.add(balance); 
     balance = updatedBal; 
     Random randomGenerator = new Random(); 
     int randomID = randomGenerator.nextInt(1000); 
     return randomID; 
    } 

    @Override 
    public int Withdraw(BigDecimal amt) { 
     BigDecimal updatedBal = balance.subtract(amt); 
     balance = updatedBal; 
     Random randomGenerator = new Random(); 
     int randomID = randomGenerator.nextInt(1000); 
     return randomID; 
    } 
} 

Клиентский код, который просто проверить простой банковский сделки является:

import BankBeanRemotePkg.BankBeanRemote; 
import java.math.BigDecimal; 


public class BankClient { 

    private static BankBeanRemote bankBean; 
    public BankClient (String[] args) { 
    } 

    public static void main(String[] args) { 
     BankClient client = new BankClient(args); 
     client.test(); 
    } 

    public void test(){ 
     try { 
      BigDecimal initial = bankBean.initial(); 
      System.out.println("Initial Balance:" + initial); 
      BigDecimal deposit = new BigDecimal("5.00"); 
      int transactionid = bankBean.Deposit(deposit); 
      System.out.println("Deposit amt:" + deposit + "Transaction ID:" + transactionid); 
      BigDecimal balance = bankBean.Current(); 
      System.out.println("Current Balance:" + balance); 
      BigDecimal withdraw = new BigDecimal("3.00"); 
      int transactionid2 = bankBean.Withdraw(withdraw); 
      System.out.println("Withdraw amt:" + withdraw + "Transaction ID:" + transactionid2); 
      System.out.println("Current Balance:" + balance); 
     } catch (Exception ex) { 
      System.err.println("Caught an unexpected exception!"); 
     } 

    } 
} 

Каждый знает, как я могу исправить мой код?

Благодаря

+1

Вы должны добавить трассировку стека для вашего NPE. Я предполагаю, что это происходит от 'bankBean'. Почему «bankBean» не был пустым в этом исполнении? – mkobit

ответ

0

Вы не правильно создать экземпляр bankBean до вызова метода initial(). Вы должны сделать что-то вроде этого:

// Obtain InitialContext (ctx) object 
BankBeanRemote bankBean = ctx.lookup("BankBean"); 
.... 
BigDecimal initial = bankBean.initial(); 

Это должно избавиться от вашего NPE.

+1

Спасибо, что он работал с вашими изменениями –