Сохранить файл на сервере Sharepoint с помощью JAX-WS

Я пытаюсь сохранить файл на сервере 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. Если он больше не использует мое имя пользователя/пароль, тогда он должен теоретически терпеть неудачу при аутентификации.

Ответ 2

Ваша проблема, вероятно, в полях.

DisplayName и InternalName хотят быть "Title", а значением будет HelloWorld.txt

Кроме того, оставить идентификатор пустым, SharePoint заполнит это.

Ответ 3

Проверьте журналы SharePoint в папке C:\Program Files\Common Files\Microsoft Shared\расширениях веб-сервера\12\LOGS. Возможно, недостающая часть домена в имени пользователя вызывает проблемы?