我试图使用JAX-WS将文件保存到Sharepoint服务器。 Web服务调用报告成功,但文件不显示。保存文件到Sharepoint服务器使用JAX-WS
我用这个命令(从WinXP中)来生成Java代码,以使JAX-WS电话:
wsimport -keep -extension -Xnocompile http://hostname/sites/teamname/_vti_bin/Copy.asmx?WSDL
我得到了Web服务的手柄,我使用以下称为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!");
}
我使用以下称为Web服务:
port.copyIntoItems(sourceUrl, destUrlCollection, fields ,
"Contents of the file".getBytes(),
copyIntoItemsResult, copyResultCollection)
的sourceUrl
和destUrlCollection
唯一的网址与 “主机名/网站/ teamname /技术文档/子文件”。
FieldInformationCollection
对象名为fields
仅包含一个FieldInformation
。 FieldInformation
对象具有“HelloWorld.txt”作为displayName,internalName和value的值。 类型属性设置为FieldType.FILE
。 id属性设置为(java.util.UUID.randomUUID()).toString()
。
呼叫copyIntoItems
成功返回; copyIntoItemsResult
包含值0,且在copyResultCollection
中设置的唯一CopyResult
对象 的错误代码为“SUCCESS”,并且为空错误消息。
当我查看Sharepoint上的“Tech Docs”库时,在“Sub Folder”中没有文件。
为什么不告诉我我做错了什么?我只是错过了一步?
更新(2011年2月26日)
我已经改变了我FieldInformation对象的显示名称和INTERNALNAME性质是“标题”的建议。仍然没有喜乐,但朝着正确的方向迈出了一步。
与网址有点玩弄后,我得到了这些结果:
同时与sourceUrl和唯一的目标网址等同,不带任何协议,我得到了成功响应,但没有实际的文件出现在文档库。
对于这两个URL等同,但指定了“http://”协议,我得到一个UNKNOWN错误,其中“对象引用未设置为对象实例”。作为消息。
源URL为空字符串或null
,我得到一个UNKNOWN错误,其中“值不在预期范围内”。作为错误信息。
更新(2011年3月2日)
正如阿列克谢Levenkov建议,我用小提琴手,看看发生了什么事情,发现这个:
# 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。如果它不再使用我的用户名/密码,那么理论上应该验证失败。
+1为错误消息:) – 2011-02-25 15:49:54