hprose / hprose-java

Hprose is a cross-language RPC. This project is Hprose 2.0 for Java
MIT License
550 stars 187 forks source link

服务器使用PHP语言开发的,然后我用Java语言请求,明明有响应数据,但是一直抛异常 #50

Closed CAirshine closed 5 years ago

CAirshine commented 5 years ago

不知道为什么这里一直是REJECTED状态 switch (promise.getState()) { case FULFILLED: return result; case REJECTED: throw new ExecutionException(promise.getReason()); }

异常如下: Exception in thread "main" java.util.concurrent.ExecutionException: hprose.common.HproseException: Wrong Response: Rm3{s6"status"i200;s3"ret"0s4"data"a{}}Aa1{m3{s4"name"s2"小兰"s5"ep_id"1s6"status"1}}z{"status":200,"ret":0,"data":[]} at hprose.util.concurrent.PromiseFuture.get(PromiseFuture.java:82) at hprose.client.HproseClient.invoke(HproseClient.java:740) at hprose.client.HproseClient.invoke(HproseClient.java:704) at test.Test.test2(Test.java:60) at test.Test.main(Test.java:47) Caused by: hprose.common.HproseException: Wrong Response: Rm3{s6"status"i200;s3"ret"0s4"data"a{}}Aa1{m3{s4"name"s2"小兰"s5"ep_id"1s6"status"1}}z{"status":200,"ret":0,"data":[]} at hprose.client.HproseClient.decode(HproseClient.java:478) at hprose.client.HproseClient.access$300(HproseClient.java:65) at hprose.client.HproseClient$7.call(HproseClient.java:551) at hprose.client.HproseClient$7.call(HproseClient.java:547) at hprose.util.concurrent.Promise.call(Promise.java:739) at hprose.util.concurrent.Promise.resolve(Promise.java:753) at hprose.util.concurrent.Promise._resolve(Promise.java:775) at hprose.util.concurrent.Promise.resolve(Promise.java:789) at hprose.util.concurrent.Promise.call(Promise.java:739) at hprose.util.concurrent.Promise.resolve(Promise.java:753) at hprose.util.concurrent.Promise._resolve(Promise.java:775) at hprose.util.concurrent.Promise.resolve(Promise.java:789) at hprose.util.concurrent.Promise.call(Promise.java:739) at hprose.util.concurrent.Promise.resolve(Promise.java:753) at hprose.util.concurrent.Promise._resolve(Promise.java:775) at hprose.util.concurrent.Promise.resolve(Promise.java:789) at hprose.util.concurrent.Promise.call(Promise.java:739) at hprose.util.concurrent.Promise.resolve(Promise.java:753) at hprose.util.concurrent.Promise._resolve(Promise.java:775) at hprose.util.concurrent.Promise.resolve(Promise.java:789) at hprose.util.concurrent.Promise.call(Promise.java:739) at hprose.util.concurrent.Promise.resolve(Promise.java:753) at hprose.util.concurrent.Promise._resolve(Promise.java:775) at hprose.util.concurrent.Promise.resolve(Promise.java:789) at hprose.util.concurrent.Promise.resolve(Promise.java:756) at hprose.util.concurrent.Promise._resolve(Promise.java:775) at hprose.util.concurrent.Promise.resolve(Promise.java:789) at hprose.client.HproseHttpClient$2.run(HproseHttpClient.java:321) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)

CAirshine commented 5 years ago

我就是一个菜鸟,就照着示例里面的代码写的 public static void test2() throws Throwable { HproseHttpClient client = (HproseHttpClient) HproseClient.create("http://esapi-stg.myhll.cn/index.php?_g=index&_m=ep&_a=service_entry"); InvokeSettings settings = new InvokeSettings(); settings.setByref(true); Map<String, Object> map = new HashMap<String, Object>(); map.put("ep_id", 1); map.put("status", 1); map.put("name", "小兰"); Object[] arguments = new Object[] {map}; client.invoke("getInfo", arguments, settings); System.out.println(map); System.out.println(arguments[0]); }

andot commented 5 years ago

你的 PHP 服务器有问题。在 Hprose 输出后面还多了:

{"status":200,"ret":0,"data":[]}

这个内容,你看看你服务器这个多余的内容是哪儿来的。