Как вызвать NetDocuments SOAP API с помощью Java? - PullRequest
1 голос
/ 14 ноября 2011

Я могу вызвать NetDocuments SOAP API с помощью C # следующим образом:

// Authenticate to the NetDocuments directory service
ndDir.Directory ndDirectory = new ndDir.Directory();
ndDirectory.CookieContainer = new System.Net.CookieContainer(); // enable cookie handling
ndDirectory.Login( username, password );

// Connect to the NetDocuments storage service
ndStor.storage ndStorage = new ndStor.storage();
ndStorage.CookieContainer = ndDirectory.CookieContainer;        // share cookies with the directory service
XmlNode searchRes = ndStorage.Search( criteria, attrList );

Однако, когда я вызываю NetDocuments SOAP API через java с Axis 1.4, я получаю сообщение об ошибке: «Нет сеанса аутентификации. Сеанс аутентификации истек или не был установлен до этого вызова».

DirectorySoapStub stubDir = new DirectorySoapStub(new URL("https://vault.netvoyage.com/ndApi/directory.asmx"), new DirectoryLocator());
StorageSoapStub stubSto = new StorageSoapStub(new URL("https://vault.netvoyage.com/ndApi/storage.asmx"), new StorageLocator());
stubSto.setMaintainSession(true);
stubDir.login(username, password);

javax.xml.soap.MimeHeaders mhds = stubDir._getCall().getMessageContext().getCurrentMessage().getMimeHeaders();
java.util.Iterator iterator = mhds.getAllHeaders();
while (iterator.hasNext()) {
    javax.xml.soap.MimeHeader mhd = (javax.xml.soap.MimeHeader)iterator.next();
    if ("set-cookie".indexOf(mhd.getName()) >= 0) {
        stubSto._setProperty(mhd.getName(), mhd.getValue());
    }
}

stubSto.search(criteria, attrList);

Есть ли похожая вещь CookieContainer в Java? Как я могу вызвать NetDocuments SOAP API через Java с помощью Axis 1.4?

1 Ответ

0 голосов
/ 28 марта 2013

Я понимаю, что этот вопрос был опубликован некоторое время назад, но я смог заставить его работать в прошлом, используя плагин JAX-RPC, который поставляется с NetBeans.Версия NetBeans, которую я использовал, была v6.8 (я думаю, что плагин JAX-RPC не включен в более новые версии NetBeans, поскольку JAX-RPC больше не используется).Я помню, как пытался заставить что-то работать, когда пытался использовать Axis, хотя это было более чем вероятно из-за того, что я не был достаточно знаком с ним.

Я не могу вспомнить все необходимые шаги, но вы можете указатьплагин JAX-RPC в WSDL для NetDocuments и все классы, необходимые для вызова API, затем настраиваются для вас.

Для правильной обработки аутентификации необходимо было установить SESSION_MAINTAIN_PROPERTY для классов DirectorySoap_Stub и StorageSoap_Stubв true - это дает им указание поддерживать сеанс после того, как вы вошли в систему. См., например, http://docs.oracle.com/cd/E19575-01/821-0177/fxybb/index.html для получения информации о SESSION_MAINTAIN_PROPERTY

Кроме того, при входе через объект DirectorySoap, если вы затем хотите использоватьметоды StorageSoap, которые вы должны сообщить объекту StorageSoap cookie, который вы используете в сеансе DirectorySoap.

Для этого я реализовал javax.xml.rpc.handler.Handler, который хранит CookieJar изDirectorySoap сессия (свойство "com".sun.xml.rpc.client.http.CookieJar "по запросу MessageContext) и задает этот CookieJar для того же свойства запросов сеанса StorageSoap.

Надеемся, что это полезно для всех, у кого аналогичные проблемы с SOAP ...

Приветствия

...