Сохраните файл на сервере Sharepoint, используя JAX-WS - PullRequest
10 голосов
/ 25 февраля 2011

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

Ответы [ 3 ]

4 голосов
/ 28 февраля 2011

URL назначения должны содержать полные пути к файлам. Я проверяю образец на странице описания метода - http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems.aspx.

2 голосов
/ 25 февраля 2011

Возможно, ваша проблема с полями.

DisplayName и InternalName хотят быть "Заголовок", а значение должно быть HelloWorld.txt

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

0 голосов
/ 03 марта 2011

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

...