gpt4 book ai didi

java - 使用 Java 从 SharePoint 列表中删除文件

转载 作者:行者123 更新时间:2023-12-01 14:45:55 25 4
gpt4 key购买 nike

我正在尝试从 Java 中的 Sharepoint 列表中删除文件,但遇到了一些问题。我正在使用 here 描述的批处理元素

我能够发出请求,但返回的结果为空,并且文件未删除(我没有收到任何错误)。

这是我正在使用的 UpdateListItems.Update 的代码:

    UpdateListItems.Updates updates = new UpdateListItems.Updates();
updates.getContent().add(this.generateXmlNode(
"<Batch PreCalc='True' OnError='Continue' ListVersion='1' ListName='" + spMoveRequest.getListName() + "'>" +
"<Method ID='1' Cmd='Delete'>" +
"<Field Name='ID'>5</Field>" +//this must be where we specify the file
"</Method>" +
"</Batch>"
));

然后我对 listSoap 对象进行方法调用,如下所示:

    UpdateListItemsResult updateResult = listSoap.updateListItems("<my list name here>", updates);

我还尝试了许多变体,例如使用 GUID 而不是实际列表名称以及使用

    <Field Name='FileRef'><my file url here></Field>

来识别文件。

似乎没有任何效果,而且我也没有得到任何有用的反馈。

我正在使用的generateXmlNode方法如下所示:

        protected Node generateXmlNode(String sXML) throws ParserConfigurationException, SAXException, IOException {

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
DocumentBuilder builder = factory.newDocumentBuilder();
Document documentOptions = builder.parse(new InputSource(new StringReader(sXML)));
Node elementOptions = documentOptions.getDocumentElement();
return elementOptions;

}

但我过去在检索共享点列表时使用过它,没有出现任何问题。

我在这里缺少什么?

最佳答案

另一种解决方案是使用HTTP DELETE方法通过NTLMv2身份验证将文件直接删除到Sharepoint

为此,您可以使用Apache HTTP 客户端:

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.3</version>
</dependency>

要允许 NTLMv2 身份验证,您需要 JCIF 库。

<dependency>
<groupId>jcifs</groupId>
<artifactId>jcifs</artifactId>
<version>1.3.17</version>
</dependency>

首先,我们需要编写一个包装器以允许 Apache HTTP 客户端使用 JCIF 来支持 NTLMv2:

public final class JCIFSEngine implements NTLMEngine {

private static final int TYPE_1_FLAGS =
NtlmFlags.NTLMSSP_NEGOTIATE_56
| NtlmFlags.NTLMSSP_NEGOTIATE_128
| NtlmFlags.NTLMSSP_NEGOTIATE_NTLM2
| NtlmFlags.NTLMSSP_NEGOTIATE_ALWAYS_SIGN
| NtlmFlags.NTLMSSP_REQUEST_TARGET;

@Override
public String generateType1Msg(final String domain, final String workstation)
throws NTLMEngineException {
final Type1Message type1Message = new Type1Message(TYPE_1_FLAGS, domain, workstation);
return Base64.encode(type1Message.toByteArray());
}

@Override
public String generateType3Msg(final String username, final String password,
final String domain, final String workstation, final String challenge)
throws NTLMEngineException {
Type2Message type2Message;
try {
type2Message = new Type2Message(Base64.decode(challenge));
} catch (final IOException exception) {
throw new NTLMEngineException("Invalid NTLM type 2 message", exception);
}
final int type2Flags = type2Message.getFlags();
final int type3Flags = type2Flags
& (0xffffffff ^ (NtlmFlags.NTLMSSP_TARGET_TYPE_DOMAIN | NtlmFlags.NTLMSSP_TARGET_TYPE_SERVER));
final Type3Message type3Message = new Type3Message(type2Message, password, domain,
username, workstation, type3Flags);
return Base64.encode(type3Message.toByteArray());
}
}

Reference

执行带有身份验证的HTTP DELETE的主要代码:

    try {

HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
DefaultHttpClient httpclient = new DefaultHttpClient(params);

//Register JCIF NTLMv2 to manage ntlm auth.
httpclient.getAuthSchemes().register("ntlm", new AuthSchemeFactory() {
@Override
public AuthScheme newInstance(HttpParams hp) {
return new NTLMScheme(new JCIFSEngine());
}
});

//Provide login/password
httpclient.getCredentialsProvider().setCredentials(
AuthScope.ANY,
new NTCredentials([LOGIN], [PASSWORD], "", [DOMAIN]));
//Create HTTP PUT Request

HttpPut request = new HttpDelete("http://[server]/[site]/[folder]/[fileName]");
return httpclient.execute(request);

} catch (IOException ex) {
//...
}

将文件上传到 Sharepoint 的链接问题:How do I upload a document to SharePoint with Java?

关于java - 使用 Java 从 SharePoint 列表中删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15439534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com