Я пытаюсь сохранить файл на сервере Sharepoint, используя JAX-WS. Вызов веб-службы сообщает об успехе, но файл не отображается.
Я использовал эту команду (из WinXP), чтобы сгенерировать код Java для вызова JAX-WS:
wsimport -keep -extension -Xnocompile http://hostname/sites/teamname/_vti_bin/Copy.asmx?WSDL
Я получаю дескриптор веб-службы, которую я назвал port
, используя следующее:
CopySoap port = 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
равен "имя хоста / сайты / имя команды / технические документы / подпапка".
Объект 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, в «Подкаталоге» там нет файла.
Почему бы мне не сказать, что я сделал не так? Я только что пропустил шаг?
Обновление (26 февраля 2011 г.)
Я изменил свойства displayName и internalName моего объекта FieldInformation на «Заголовок», как было предложено. Все еще нет радости, но шаг в правильном направлении.
Поработав с URL-адресами, я получил следующие результаты:
При использовании как sourceUrl, так и единственного целевого URL-адреса, без протокола, я получаю ответ SUCCESS, но фактический документ не отображается в библиотеке документов.
Поскольку оба URL-адреса эквивалентны, но с указанным протоколом http://", я получаю НЕИЗВЕСТНУЮ ошибку с сообщением "Ссылка на объект не установлена на экземпляр объекта." В качестве сообщения.
При исходном URL-адресе в виде пустой строки или null
я получаю НЕИЗВЕСТНУЮ ошибку с «Значение не попадает в ожидаемый диапазон». как сообщение об ошибке.
Обновление (2 марта 2011 г.)
Как подсказал Алексей Левенков, я использовал Fiddler, чтобы посмотреть, что происходит, и нашел это:
# 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. Если он больше не использует мое имя пользователя / пароль, поэтому теоретически он не должен проходить аутентификацию.