我正在尝试使用 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)
sourceUrl
和 destUrlCollection
中唯一的 url 等于“hostname/sites/teamname/Tech Docs/Sub Folder”。
名为 fields
的 FieldInformationCollection
对象仅包含一个 FieldInformation
。
FieldInformation
对象将“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/