java - 使用 JAX-WS 将文件保存到 Sharepoint Server

标签 java sharepoint jax-ws

我正在尝试使用 JAX-WS 将文件保存到 Sharepoint 服务器。 Web 服务调用报告成功,但文件未显示。

我使用此命令(从 WinXP)生成 Java 代码以进行 JAX-WS 调用:

wsimport -keep -extension -Xnocompile http://hostname/sites/teamname/_vti_bin/Copy.asmx?WSDL

我使用以下命令获得了名为 port 的 Web 服务的句柄: 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)

sourceUrldestUrlCollection 中唯一的 url 等于“hostname/sites/teamname/Tech Docs/Sub Folder”。

名为 fieldsFieldInformationCollection 对象仅包含一个 FieldInformationFieldInformation 对象将“HelloWorld.txt”作为 displayName、internalName 和 value 的值。 type 属性设置为 FieldType.FILE。 id 属性设置为 (java.util.UUID.randomUUID()).toString()

调用copyIntoItems 成功返回; copyIntoItemsResult 包含值 0 和唯一的 CopyResult 对象 在 copyResultCollection 中设置的错误代码为“SUCCESS”,错误消息为空。

当我查看 Sharepoint 上的“技术文档”库时,在“子文件夹”中没有文件。

为什么它不告诉我我做错了什么?我只是错过了一步吗?

更新(2011 年 2 月 26 日)

我已按照建议将 FieldInformation 对象的 displayName 和 internalName 属性更改为“Title”。仍然没有喜悦,但朝着正确的方向迈出了一步。

在尝试了一些 url 之后,我得到了这些结果:

有了 sourceUrl 和唯一的目标 URL 等效项,没有协议(protocol),我得到了 SUCCESS 响应,但文档库中没有实际文档出现。

如果两个 URL 相同但指定了“http://”协议(protocol),我会收到“未将对象引用设置为对象实例”的未知错误。作为消息。

当源 URL 为空字符串或 null 时,我收到一个未知错误“值不在预期范围内”。作为错误信息。

更新(2011 年 3 月 2 日)

按照 Alexei Levenkov 的建议,我使用 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          

它看起来像是一个简单的握手,直到它获得 WSDL 和 Web 服务调用的 HTTP 200。

所以我尝试不将我的用户名和密码放入 RequestContext 中,我得到了与上面对 WSDL 请求所做的类似的事情(两个 HTTP 401 和一个 HTTP 200),但是 WebService 调用只有一个 HTTP 200。如果它不再使用我的用户名/密码,那么理论上它应该无法通过身份验证。

最佳答案

目标网址应包含文件的完整路径。我在方法描述页面上查看示例 - http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems.aspx .

关于java - 使用 JAX-WS 将文件保存到 Sharepoint Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5118663/

相关文章:

java - Netbeans 我添加的库 JAR/文件夹在哪里

java - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure Software caused connection abort: recv failed

java - 表单选项未填充

javascript - 在 SharePoint CSOM 中关闭 showWaitScreenWithNoClose

java - 访问 Endpoint.publish 的网络服务器

java - 我在 ArrayList 中有 9 个 JButton。但无论如何我都无法更改按钮的标签,,,

sharepoint - 是否可以在 sharepoint 2010 中获取当前日期?

sql-server - 在哪里可以找到有关 Sharepoints 后端数据库的文档?

java - 为 JAX-RPC Web 服务生成 JAX-WS 客户端 stub ?

java - 将 HTTP header 添加到 JAX-WS 服务响应