如何通过XWikiXmlRpcClient进行confluence2调用?

时间:2015-11-10 12:08:09

标签: xml-rpc confluence xwiki

使用此代码的版本。 (代码被修改为使用与我的汇合设置相关的页面,除此之外它与此相同):

page=rpc.getPage("demo code.Update Page");

取自http://extensions.xwiki.org/xwiki/bin/view/Extension/XML-RPC+Integration+Java+Examples

当它尝试从Confluence中检索该页面时:

   org.apache.xmlrpc.XmlRpcException: java.lang.Exception:   com.atlassian.confluence.rpc.RemoteException: You must supply a valid number as the page ID.

使用上面的代码时出现此错误:

page = rpc.getPage("39201714");

然后,如果我从页面获取页面ID,并使用:

org.apache.xmlrpc.XmlRpcException: java.lang.Exception:   com.atlassian.confluence.rpc.RemoteException: Unsupported operation: Wiki formatted content can no longer be retrieved from this API. Please use the version 2 API. The version 2 WSDL is available at: http://confluence:8080/rpc/soap-axis/confluenceservice-v2?wsdl. XML-RPC requests should prefixed with "confluence2.".

我得到了这个例外:

{{1}}

我是否更改了confluence URL以访问confluence2 api?不知道如何更改XWikiXmlRpcClient使用的内容..

2 个答案:

答案 0 :(得分:0)

该页面的原始版本似乎是wiki格式。你能把它删除为空吗?

我认为错误是因为您试图以不受支持的格式获取页面。

还要确保你有confluence2的正确wsdl(因为你之前使用的是版本1)

答案 1 :(得分:0)

如果查看XWikiXmlRpcClient的源代码,构造函数会显示它正在使用confluence1:

    /**
 * Constructor.
 * 
 * @param endpoint The endpoint for the XMLRPC servlet.
 * @throws MalformedURLException
 */
public XWikiXmlRpcClient(String endpoint) throws MalformedURLException
{
    this(endpoint, "confluence1");
}

这使用'confluence1'作为RPC处理程序调用内部构造函数。

该类有两个构造函数,因此应该可以直接从类外部调用相同的东西:

 XWikiXmlRpcClient rpc = new XWikiXmlRpcClient(CONFLUENCE_URI, "confluence2");

稍后当它调用rpc时,confluence2(this.rpcHandler)会被添加到字符串中:

    private synchronized Object invokeRpc(String methodName, Object... args) throws XmlRpcException
{
    return this.xmlRpcClient.execute(String.format("%s.%s", this.rpcHandler, methodName), args);
}

您需要同时使用对象的confluence1和confluence2版本来更新页面:

 XWikiXmlRpcClient rpcConfluence1 = new    XWikiXmlRpcClient(CONFLUENCE_URI);
    XWikiXmlRpcClient rpcConfluence2 = new XWikiXmlRpcClient(CONFLUENCE_URI, "confluence2");
    try {
        rpcConfluence1.login(USER_NAME, PASSWORD);
        rpcConfluence2.login(USER_NAME, PASSWORD);
        Page page = new Page();     
        page = rpcConfluence2.getPage(PAGEID);

        List<String> lines = Files.readAllLines(Paths.get("summary.markup"), Charset.defaultCharset());
        StringBuilder b = new StringBuilder();
        for(int i=0; i < lines.size(); i++) {
                b.append(String.format("%s%s", lines.get(i), "\r\n"));
        }              
        page.setContent(b.toString());

        rpcConfluence1.storePage(page);
        } catch (XmlRpcException e) {
            e.printStackTrace();
        }



}