gpt4 book ai didi

java - Java 调用 apache 的 xml-rpc 客户端后获取 XML 和 JSON 结果时出错 - 意外的非空白字符数据

转载 作者:行者123 更新时间:2023-11-29 08:48:50 24 4
gpt4 key购买 nike

我在尝试使用 Apache 的 Xml-Rpc 库在 Java 中进行方法调用时遇到一个奇怪的错误。这是设置:

XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
URL url = null;
try {
url = new URL(Config.getInstance().getProperty("foo.host"));
} catch (MalformedURLException e) {
e.printStackTrace();
}
config.setServerURL(url);

client = new XmlRpcClient();
client.setConfig(config);

//Generate Token for all admin calls
try {
token = (String) client.execute("confluence2.login",
new Object[]{ADMIN_USER, ADMIN_PASS});
} catch (XmlRpcException e) {
log.error("There was a problem getting the rpc token", e);
}

多个其他方法使用的辅助方法,适用于所有其他方法,除了有问题的方法:

private <T> T executeWikiMethod(String method, Object[] params) throws WikiException {
try {
Object[] args = new Object[params.length + 1];
args[0] = token;
System.arraycopy(params, 0, args, 1, args.length - 1);

long startTime = System.currentTimeMillis();
T t = (T) client.execute(method, args);
log.debug(String.format("Wiki RPC call to method: %s and params: %s. Request completed in %dms", method, Arrays.toString(args), System.currentTimeMillis() - startTime));

return t;
} catch (XmlRpcException e) {
throw new WikiException(e.getMessage());
} catch (Exception e) {
log.error(e.getMessage());
throw new WikiException("An unexpected error occurred.");
}
}

最后,这里是使用错误消息“无法解析服务器响应:意外的非空白字符数据”中断的方法:

public Object getWikiUpdates(String wikiSpaceKey) throws WikiException {
Object result;

result = executeWikiMethod("recentupdate.getRecentUpdate", new Object[]{wikiSpaceKey, "10"});

return result;
}

和堆栈跟踪:

Failed to parse servers response: Unexpected non-whitespace character data
at org.junit.Assert.fail(Assert.java:93)
at miniWikiTest.updatesTest(miniWikiTest.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at play.test.PlayJUnitRunner$StartPlay$2$1.evaluate(PlayJUnitRunner.java:114)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at play.test.PlayJUnitRunner.run(PlayJUnitRunner.java:58)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:24)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
at org.junit.runner.JUnitCore.run(JUnitCore.java:136)
at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
at play.test.TestEngine.run(TestEngine.java:112)
at controllers.TestRunner$1.doJobWithResult(TestRunner.java:71)
at controllers.TestRunner$1.doJobWithResult(TestRunner.java:1)
at play.jobs.Job.call(Job.java:146)
at play.jobs.Job$1.call(Job.java:66)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:695)

应该有来自服务器的 xml 响应,使用 RPC 库将其解析为 JSON 对象。 getWikiUpdates() 方法应该返回一个 JSON block ,表示维基页面的几种不同类型的更新(例如新评论等),其格式目前未知,因为调用返回错误而没有 xml 响应或任何的JSON。我正在使用 Object,希望能够捕获从方法调用返回的内容,并能够从那里格式化结果。这一切都在 Play 中完成!框架。如果我需要进一步澄清,请告诉我,谢谢。

编辑 - 服务器响应是“意外的非空白字符数据”,没有别的

最佳答案

两件事 - 方法参数应该以 confluence2 开头,例如 confluence2.getRecentUpdate。但这导致了第二个问题......

“recentupdate.getRecentUpdate”不是一个有效的方法。我在这里的任何地方都没有看到它或类似的东西:https://developer.atlassian.com/confdev/confluence-rest-api/confluence-xml-rpc-and-soap-apis/remote-confluence-methods

查看您的代码,我认为您想要的可能是一种搜索方法,例如 Vector search(String token, String query, Map parameters, int maxResults),您可以在其中指定空间和限制等。

您可以使用“confluence2.search”的方法名称来调用它

关于java - Java 调用 apache 的 xml-rpc 客户端后获取 XML 和 JSON 结果时出错 - 意外的非空白字符数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23745889/

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