2011-02-25 52 views
10

我试图使用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) 

sourceUrldestUrlCollection唯一的网址与 “主机名/网站/ teamname /技术文档/子文件”。

FieldInformationCollection对象名为fields仅包含一个FieldInformationFieldInformation对象具有“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。如果它不再使用我的用户名/密码,那么理论上应该验证失败。

+2

+1为错误消息:) – 2011-02-25 15:49:54

回答

4

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

+0

当我对源和目的使用完整路径(即包含http://部分)时,我得到“未将对象引用设置为对象的实例。”作为错误消息。当我仅将完整路径用于仅目的地并将源保留为空字符串时,我会得到“值不在预期范围内”。 – 2011-02-28 03:19:12

+2

为我工作(C#...但只要你设法调用WS它应该不重要你使用什么语言)与:文件名的源,绝对网址(与文件部分)的目的地,空字段集合。尝试收集Fiddler(或其他HTTP观察者)跟踪,看看是否有可疑的东西。您还可以在使用SharePoint的“复制”功能与您的功能进行比较时看到跟踪。 – 2011-03-01 00:15:44

+0

基本上,我的Java安装是在我的机器的用户名/密码中发送的,而不是我设置的那个。我不知道如何强制它发送我想要的用户名/密码。抱歉,接受答案的延迟。 – 2011-04-10 23:58:21

2

您的问题可能是字段。

显示名称和INTERNALNAME想成为“标题”,和值HelloWorld.txt

而且,留下ID为空,SharePoint将填充这一点。

+0

我试过了,但没有运气。这可能是源URL和目标URL在它们前面没有http://或https://? – 2011-02-25 19:20:01

+0

也许吧。如果您从某个不是共享点的位置上传文件,我认为源URL可以为空,或者至少为空字符串。 – 2011-02-25 20:55:37

0

检查C:\ Program Files \ Common Files \ Microsoft Shared \ web server extensions \ 12 \ LOGS中的SharePoint日志。也许在用户名中缺少域名部分导致问题?

+0

我想我无法避免的SharePoint管理员了。我注意到,Fiddler报告的“Auth”报告了我登录到我的开发机器的用户和域,而不是用于Sharepoint的用户名,这在我的Java代码中使用我的Sharepoint凭证后似乎很奇怪。 – 2011-03-03 03:19:28

相关问题