我有一个整体式的旧版应用程序,需要读取和提交数据。它使用Google Web Kit和Java Servlet。我可以访问源代码,但是我对Servlet和GWT都是新手。
我正在尝试在我的项目中封装一个REST客户端,该客户端可以与对旧服务器的GET / POST REST调用进行通信。
我已经能够使用Postman发送POST请求,然后使用Reactive Spring 5.0框架发送该请求。
当我尝试反序列化响应时,我遇到了很多错误。
我将如何反序列化此有效载荷?
7|0|7|http://localhost:8080/testproject/
|29F4EA1240F157649C12466F01F46F60|
com.test.client.GreetingService|greetServer|java.lang.String|
myInput1|myInput2|1|2|3|4|2|5|5|6|7|
我整天都在搜索,并且关注着一些像这样的博客:https : //docs.google.com/document/d/1eG0YocsYYbNAtivkLtcaiEE5IOF5u4LUol8-LL0TIKU/edit# https://blog.gdssecurity.com/labs/2009/10 /8/gwt-rpc-in-a-nutshell.html
我不确定如何在我的新服务中将它们序列化为自己的对象,在代码方面是明智的。
static WebClient webClient = WebClient.create();
public static void main(String[] args) {
Mono<String> body = Mono.just("7|0|7|http://localhost:8080/testproject/|29F4EA1240F157649C12466F01F46F60|com.test.client.GreetingService|greetServer|java.lang.String|myInput1|myInput2|1|2|3|4|2|5|5|6|7|");
Mono<String> response = webClient.post()
.uri("http://localhost:8080/testproject/")
.header("Content-Type", "text/x-gwt-rpc;charset=UTF-8")
.header("X-GWT-Module-Base", "http://localhost:8080/testproject/")
.header("X-GWT-Permutation", "29F4EA1240F157649C12466F01F46F60")
.cookie("JSESSIONID", "2BCEBF12GE2C3A0335F5012812A73638")
.body(body, String.class)
.retrieve()
.bodyToMono(String.class);
String unBlocked = response.block();
System.out.println(unBlocked);
//OK[1,1,["java.lang.Integer/3438228391"],0,2]
try {
ServerSerializationStreamReader streamReader = new ServerSerializationStreamReader(
Thread.currentThread().getContextClassLoader(), null);
streamReader.prepareToRead(unBlocked);
System.out.println(streamReader.readObject());
} catch ( Exception e) {
e.printStackTrace();
}
}
错误:com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException:该应用程序已过期,请单击浏览器上的刷新按钮。(收到格式错误或旧的RPC消息-预期版本在5到7之间)
由于格式错误的RCP消息,我尝试了GWT的每个版本。另外,我尝试将其粘贴到字符串中,我确信它本身会失败。
您正在尝试使用意味着对客户端请求进行解码的代码来对服务器响应进行解码。当前,由于历史原因,它们使用不同的格式-请注意响应如何以“ // OK”开头,但是请求的版本/标志/字符串计数以“ 7 | 0 | 7”开头。
至少在一小部分原因是,当客户端调用服务器时,它需要描述它正在说的是哪个版本,以及服务器应在哪里找到列出允许客户端序列化的类集的文件。当服务器响应时,由于客户端已经告知它可以序列化的类型,因此不需要再次告诉客户端相同的事情。
阅读com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader
该类及其文档将显示响应格式以及如何将其解码为对象。目前,我知道没有服务器端代码可以完成此工作,但是编写时可能几乎没有什么困难,只有一些持久性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句