Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RestTemplate格式错误的字节序列异常3字节UTF-8序列的无效字节2_Java_Jaxb_Xerces_Resttemplate - Fatal编程技术网

Java RestTemplate格式错误的字节序列异常3字节UTF-8序列的无效字节2

Java RestTemplate格式错误的字节序列异常3字节UTF-8序列的无效字节2,java,jaxb,xerces,resttemplate,Java,Jaxb,Xerces,Resttemplate,我正在尝试使用RestTemplate从Web服务加载对象,如下所示: Menu menu = null; RestTemplate rest = new RestTemplate(); String request = "<?xml version=\"1.0\" ?><MenuSync><Header><VendorName>usablehealth</VendorName></Header></MenuSync&

我正在尝试使用RestTemplate从Web服务加载对象,如下所示:

Menu menu = null;
RestTemplate rest = new RestTemplate();
String request = "<?xml version=\"1.0\" ?><MenuSync><Header><VendorName>usablehealth</VendorName></Header></MenuSync>";
menu = rest.postForObject("http://localhost:6788/LRequest.cgi", request, Menu.class);
菜单=null;
RestTemplate rest=新建RestTemplate();
String request=“usablehealth”;
菜单=rest.postForObject(“http://localhost:6788/LRequest.cgi“、请求、菜单、类);
这将生成一个异常:

[com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3字节UTF-8序列的无效字节2.]at com.google.gwt.user.server.rpc.rpc.encodeResponseForFailure(rpc.java:389) 在 com.google.gwt.user.server.rpc.rpc.invokeAndEncodeResponse(rpc.java:579) 在 com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 在 com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) 在 com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:637) http.HttpServlet.service(HttpServlet.java:717)位于 org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 在 org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) 在 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) 在 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在 org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 位于org.mortbay.jetty.Server.handle(Server.java:324) org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 在 org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) 位于org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)位于 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)位于 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)

看起来很简单,但是从webservice加载的XML不包含UTF-8冲突。如果我使用显式JAXB来取消对象的形式化,它就可以正常工作

Menu menu = null;
RestTemplate rest = new RestTemplate();
String request = "<?xml version=\"1.0\" ?><MenuSync><Header><VendorName>usablehealth</VendorName></Header></MenuSync>";
String response = rest.postForObject("http://localhost:6788/LRequest.cgi", request, String.class);
try {
  JAXBContext context = JAXBContext.newInstance(Menu.class);
  Unmarshaller um = context.createUnmarshaller();
  um.setEventHandler(new CustomValidationEventHandler());
  menu = (Menu) um.unmarshal(new ByteArrayInputStream(response.getBytes("UTF-8")));
} catch (UnsupportedEncodingException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
} catch (JAXBException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
菜单=null;
RestTemplate rest=新建RestTemplate();
String request=“usablehealth”;
String response=rest.postForObject('http://localhost:6788/LRequest.cgi,请求,字符串。类);
试一试{
JAXBContext context=JAXBContext.newInstance(Menu.class);
Unmarshaller um=context.createUnmarshaller();
setEventHandler(新的CustomValidationEventHandler());
menu=(menu)um.unmarshal(新的ByteArrayInputStream(response.getBytes(“UTF-8”));
}捕获(不支持的编码异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(JAXBEException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
我没有在applicationContext中声明RESTTemplatebean,因为marchal/unmarchal实现应该是默认的(JAXB?)。这些解决方案之间有什么区别