我有一个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?