2014-12-07 6 views
-4
protected KeyStore intializeKeyStore(ServiceChannel serviceChannel) { 
    try { 
     PrivateKey privateKey = certificateHandler 
       .parsePrivateKey(getPrivateKey(fromHttpsConfig) 
         .getDataHandler().getInputStream(), 
         getPrivateKey(fromHttpsConfig) 
           .getResourceAsPrivateKeyMetadata() 
           .getKeyPassword()); 
    } catch (Exception exception) { 
    } 
} 

getPrivateKey이 방법은 efectivly 방법 chaning 통화에서 다른 방법에 대해 귀찮게하지 말아 줘 널 포인터 예외를 처리하는 방법을 null을 반환 사전에널 포인터 예외는

덕분에 가능한 한 빨리 나에게 솔루션을 제공하십시오 가능

+0

무엇을하고 싶습니까? –

+0

글쎄, 당신은 이미 예외를 잡으려고합니다. 어떻게 처리할까요? 이 예외가 발생할 때 시스템에서 논리적으로 발생해야하는 것은 무엇입니까? 이 코드는 * 항상 * 예외를 throw하므로 모든 것을 건너 뛰고 예외 처리기에서 원하는 모든 작업을 수행 할 수 있습니다. – David

+0

catch 예외를'NullPointerException'으로 변경하여 다른 모든 것을 자동으로 무시하지 않도록 할 수 있습니다. – Im0rtality

답변

0

어쩌면 삼항 연산자 : 당신을 도울 것입니다 :

getPrivateKey(fromHttpsConfig) != null ? 
    getPrivateKey(fromHttpsConfig).getDataHandler().getInputStream() : 
    null 
2

를 처리하는 가장 효과적인 방법을 널 포인터 예외는 널 값을 참조하지 않습니다.

즉, 호출 결과를 변수에 넣고 null인지 확인하고 null이 아닌 경우에만 호출 (메소드, 액세스 필드 등) 참조하십시오.

PrivateKey privateKey = 
     certificateHandler.parsePrivateKey(
      getPrivateKey(fromHttpsConfig).getDataHandler().getInputStream(), 
      getPrivateKey(fromHttpsConfig) 
      .getResourceAsPrivateKeyMetadata().getKeyPassword()); 

해야 할 것 : 대신의

EdgeResource resource = getPrivateKey(fromHttpsConfig); 
    PrivateKey privateKey = null; 
    if (resource != null) { 
     privateKey = certificateHandler.parsePrivateKey(
      resource.getDataHandler().getInputStream(), 
      resource.getResourceAsPrivateKeyMetadata().getKeyPassword()); 
    } 

마음 당신, getDataHandler() 또는 getResourceAsPrivateKeyMetadata()뿐만 아니라 가능한 경우는 null, 당신은 호출하기 전에 그들을 위해 동일한 작업을 수행해야 할 수 있다면 그들의 방법.

+0

나는이 문장을 두 번 upvote 할 수 있으면 좋겠다. – David