Почему JCIFS-NG выбрасывает SMBException на mkdir версии 2.1.9 - PullRequest
0 голосов
/ 20 сентября 2019

Мне пришлось перейти на JCIFS-NG для поддержки протокола SMB2.При этом код mkdir перестает работать из старого оригинального JCIFS с использованием SMB1.Теперь я получаю сообщение «Не удалось подключиться», если папка не существует, но подключается, но не работает, если указана только корневая папка общего доступа.Я видел множество сообщений на эту тему, но я не вижу ничего, что могло бы решить эту проблему.Код кажется довольно простым.Я не знаю, понимаю, что отсутствует или неправильно.

Если я использую значения в строке для Smbfile и создаю строку cmd:

net use \ myservername \ RootShareName

Я установил успешное соединение.Поскольку SubFolderName еще не создано, это, очевидно, не сработает, если я включу эту часть.

Журнал показывает:

SEVERE: jcifs.smb.SmbException: Не удалось подключиться: /в jcifs.smb.SmbTransportImpl.ensureConnected (SmbTransportImpl.java:685) в jcifs.smb.SMBTransportPoolImpl.getSmbTransport (SmbTransportPoolImpl.java:214) в jcifs.smb.jmbol.SmbTreeConnection.connectHost (SmbTreeConnection.java:562) в jcifs.smb.SmbTreeConnection.connectHost (SmbTreeConnection.java:486) в jcifs.smb.SmbTreeConnection.connect (SmbTreeConnection.java:46Connection.javaTectionConnection.jsConnection.java!.java: 42) в jcifs.smb.SmbFile.ensureTreeConnected (SmbFile.java:551) в jcifs.smb.SmbFile.exists (SmbFile.java:838) в jcifs.smb.SmbFile.isDirectory (SmbFile.java:1056)

Я также удалил вложенное имя из SmbURL. Я получаю другую ошибку:

SEVERE: jcifs.smbSmbИсключение: недопустимая операция для рабочих групп, серверов или общих папок.

Следующий код слишком жирный, поэтому могут быть некоторые ошибки, которых не было бы при копировании и вставке ...

String smbUrl = String.format("smb://" + ServerName + "/" + RootShareName + "/" + newSubFolderName + "/";
Properties = prop - new Properties();
prop.put("jcifs.smb.client.enableSMB2", "true");
prop.put("jcifs.smb.client.disableSMB1", "true");
prop.put("jcifs.traceResources", "true");
Configuration config = new PropertyConfiguration(prop);
CIFSContext baseContext = new BaseContext(config);
CIFSContext contextWithCred = baseContext.withCredentials(new HtlmPasswordAuthentication(baseContext, "test-domain", "Admin", "password"));
SmbFile dir = new SmbFile(smbUrl,contextWithCred);

if (!dir.isDirectory()) {
    try {
         dir.mkdir();
        } catch (Exception e) {
          logException.severe("Failed to create directory", e, 1);
        }
    } else {
      LOGGER.info("Directory already exists");
 }
 dir.close();
...