我有一個java web應用程序,它需要從網絡驅動器讀取文件。當我在本地主機測試服務器上運行它時,它正常工作,因爲我使用Windows憑據登錄。它在公司服務器上部署時不起作用。當創建新的SmbFileInput時出現NullpointerException
我一直在努力實現的方式發送用戶憑據嘗試訪問該文件時一起,和我目前嘗試使用The Java CIFS Client Library
我立足於this answer代碼我嘗試,但我的代碼需要從文件讀取而不是寫入文件。我得到一個NullpointerException,我無法解釋。
代碼:
public static void main(String[] args) {
String filePath = "[myPath]";
String USER = "domain;username:password";
try {
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(USER);
SmbFile sFile = new SmbFile(filePath, auth);
if(sFile.exists()){
InputStream stream = new SmbFileInputStream(sFile); //throws exception
}
} catch (SmbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
錯誤:
Exception in thread "main" java.lang.NullPointerException
at jcifs.smb.ServerMessageBlock.writeString(ServerMessageBlock.java:213)
at jcifs.smb.ServerMessageBlock.writeString(ServerMessageBlock.java:202)
at jcifs.smb.SmbComNTCreateAndX.writeBytesWireFormat(SmbComNTCreateAndX.java:170)
at jcifs.smb.AndXServerMessageBlock.writeAndXWireFormat(AndXServerMessageBlock.java:101)
at jcifs.smb.AndXServerMessageBlock.encode(AndXServerMessageBlock.java:65)
at jcifs.smb.SmbTransport.doSend(SmbTransport.java:439)
at jcifs.util.transport.Transport.sendrecv(Transport.java:67)
at jcifs.smb.SmbTransport.send(SmbTransport.java:655)
at jcifs.smb.SmbSession.send(SmbSession.java:238)
at jcifs.smb.SmbTree.send(SmbTree.java:119)
at jcifs.smb.SmbFile.send(SmbFile.java:775)
at jcifs.smb.SmbFile.open0(SmbFile.java:989)
at jcifs.smb.SmbFile.open(SmbFile.java:1006)
at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:73)
at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:65)
at Test.main(Test.java:45)
用戶憑據被接受。我已經嘗試了有效和無效的憑證,而無效的憑證會給用戶識別錯誤。
創建輸入流時會引發異常,這通常會使我認爲參數sFile
對象將是null
或具有null
字段。我不知道這可能是哪個領域。調試顯示isExists = true
。該URL也是有效的。這裏是我的sFile對象從調試器的截圖:
我失去的是什麼?爲什麼我得到一個nullpointerexception?