0

다음 빈에 대해 널 포인트 예외 및 호출 대상 예외가 발생합니다. 이 프로그램은 기본적으로 입금 및 출금을 잔액에서 테스트하고 거래 ID를 포함합니다. 클라이언트 코드에서 예외가 발생합니다. 단지 간단한 은행 거래를 테스트자바 빈 널 포인트 예외 및 호출 대상 예외

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'이 null이되지 않는 이유는 무엇입니까? – mkobit

답변

0

당신은 제대로 bankBean 이전 initial() 메소드를 호출에 인스턴스화하지 않았다. 다음과 같이해야합니다.

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

NPE를 제거해야합니다.

+1

변경 사항을 적용 해 주셔서 감사합니다. –