我使用ServiceClient对象(无客户端代码生成)从Java Axis 2客户端调用SharePoint 2010 Web服务。
我需要使用xPath查询结果,以便在未来的开发中获得结果代码和其他数据。
我无法使用AXIOMXPath获得结果...
以下是网络服务电话的结果:
<CopyIntoItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<CopyIntoItemsResult>0</CopyIntoItemsResult>
<Results>
<CopyResult ErrorCode="Success" DestinationUrl="http://mss2010-vm1/siteBdL/GED/obligations/obli_interne.pdf">
</CopyResult>
</Results>
</CopyIntoItemsResponse>
我的代码:
OMElement result = client.sendReceive(copyService);
if (result != null) {
AXIOMXPath xpathExpression = new AXIOMXPath("/CopyIntoItemsResponse/Results/CopyResult/@ErrorCode");
xpathExpression.addNamespace("", "http://schemas.microsoft.com/sharepoint/soap/");
Object node = xpathExpression.selectNodes(result);
if (node != null) {
OMAttribute attribute = (OMAttribute) node;
if (attribute.getAttributeValue().equals("Success")) {
succeeded = true;
}
}
}
请问好吗?
答案 0 :(得分:0)
我看到两件可能导致问题的事情:
@ErrorCode
部分可能存在问题。它应该匹配没有命名空间的ErrorCode
属性,但我认为@ErrorCode
实际上意味着具有本地名称ErrorCode
和命名空间http://schemas.microsoft.com/sharepoint/soap/
的属性(我不是100%肯定在这里;我将不得不参考XPath规范。/
与包含上下文节点的树的根节点(即传递给selectNodes
的节点)相匹配。对于sendReceive
的结果,这可能是包含整个SOAP消息的文档节点。要避免该问题,请创建新的OMDocument
并将sendReceive
的结果添加到该文档中,或使用self::CopyIntoItemsResponse/...
作为XPath表达式。