Я пытаюсь сохранить файл на сервере Sharepoint с помощью JAX-WS. Вызов веб-службы сообщает об успехе, но файл не отображается.
Я использовал эту команду (из WinXP) для генерации кода Java для вызова JAX-WS:
wsimport -keep -extension -Xnocompile http://hostname/sites/teamname/_vti_bin/Copy.asmx?WSDL
Я получаю дескриптор веб-сервиса, который я назвал port
, используя следующее:
Порт CopySoap = null;
if (userName != null && password != null) {
Copy service = new Copy();
port = service.getCopySoap();
((BindingProvider) port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, userName);
((BindingProvider) port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
} else {
throw new Exception("Holy Frijolé! Null userName and/or password!");
}
Я позвонил в веб-службу, используя следующее:
port.copyIntoItems(sourceUrl, destUrlCollection, fields ,
"Contents of the file".getBytes(),
copyIntoItemsResult, copyResultCollection)
sourceUrl
и единственный url в destUrlCollection
равен "hostname/sites/teamname/Tech Docs/Sub Folder".
Объект FieldInformationCollection
с именем fields
содержит только один FieldInformation
.
Объект FieldInformation
имеет значение "HelloWorld.txt" как значение для displayName, internalName и value.
Свойство type имеет значение FieldType.FILE
. Свойству id установлено значение (java.util.UUID.randomUUID()).toString()
.
Призыв к copyIntoItems
возвращает успех; copyIntoItemsResult
содержит значение 0 и единственный объект CopyResult
установленный в copyResultCollection
, имеет код ошибки "SUCCESS" с сообщением об ошибке.
Когда я смотрю в библиотеку "Tech Docs" на Sharepoint, в "Sub Folder" там нет файла.
Почему бы мне не сказать, что я сделал не так? Я просто пропустил шаг?
Обновление (26 февраля 2011 г.)
Я изменил свойства displayIname объекта FieldInformation и innerName как "Заголовок", как было предложено. Еще нет радости, но шаг в правильном направлении.
Поиграв немного с URL-адресами, я получил следующие результаты:
И с эквивалентом sourceUrl, и с единственным целевым URL-адресом, без протокола, я получаю ответ SUCCESS, но фактический документ не появляется в библиотеке документов.
С обоими эквивалентами URL, но с указанным протоколом "http://", я получаю ошибку UNKNOWN с "ссылкой на объект, не установленной в экземпляр объекта". как сообщение.
С исходным URL-адресом пустая строка или null
, я получаю ошибку UNKNOWN с "Значение не входит в ожидаемый диапазон". как сообщение об ошибке.
Обновление (2 марта 2011 г.)
Как предложил Алексей Левенков, я использовал Фиддлера, чтобы посмотреть, что происходит, и нашел это:
# Result Protocol Host URL Body Caching Content-Type Process Comments Custom
34 401 HTTP hostname /sites/teamname/_vti_bin/Copy.asmx?WSDL 1,656 text/html javaw:5304
35 401 HTTP hostname /sites/teamname/_vti_bin/Copy.asmx?WSDL 1,539 text/html javaw:5304
36 200 HTTP hostname /sites/teamname/_vti_bin/Copy.asmx?WSDL 10,887 private text/xml; charset=utf-8 javaw:5304
37 401 HTTP hostname /sites/teamname/_vti_bin/Copy.asmx 1,656 text/html javaw:5304
38 401 HTTP hostname /sites/teamname/_vti_bin/Copy.asmx 1,539 text/html javaw:5304
39 200 HTTP hostname /sites/teamname/_vti_bin/Copy.asmx 611 private, max-age=0 text/xml; charset=utf-8 javaw:5304
Похоже на простое рукопожатие, пока он не получит HTTP 200 для WSDL и вызова веб-службы.
Поэтому я не пытался помещать свое имя пользователя и пароль в RequestContext, и я получаю аналогичную вещь, как я делаю выше, для запроса WSDL (два HTTP 401 и один HTTP 200), но вызов WebService имеет только один HTTP 200. Если он больше не использует мое имя пользователя/пароль, тогда он должен теоретически терпеть неудачу при аутентификации.