Java HttpUrlConnection:如何将XML响应转换成字符串?
我正在使用Java HttpUrlConnection:如何将XML响应转换成字符串?,java,rest,gwt,Java,Rest,Gwt,我正在使用HttpURLConnection发布到RESTAPI。我仍然没有成功发布任何内容,因此我正在尝试从API获取XML响应 下面是我编写的代码片段,它给了我一些问题: // Process response - need to get XML response back. InputStream stream = connection.getInputStream(); connection.disconnect(); BufferedReader br = new BufferedR
HttpURLConnection
发布到RESTAPI。我仍然没有成功发布任何内容,因此我正在尝试从API获取XML响应
下面是我编写的代码片段,它给了我一些问题:
// Process response - need to get XML response back.
InputStream stream = connection.getInputStream();
connection.disconnect();
BufferedReader br = new BufferedReader(stream);
String result;
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
result += line;
}
br.close();
编译器对此行不满意(建议的修复方法是“将流的类型更改为读取器”):
有人对我如何正确地做到这一点有什么建议吗?
谢谢你的帮助
请在此完成代码:
package com.gwt.HelpDeskTest.server;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.gwt.HelpDeskTest.client.HelpDeskTestService;
import com.gwt.HelpDeskTest.shared.HelpDeskTestException;
@SuppressWarnings("serial")
public class HelpDeskTestImpl extends RemoteServiceServlet implements HelpDeskTestService {
@Override
public String postToRemoteServer(String serviceUrl) throws HelpDeskTestException {
try {
final String serverPath= "http://helpdesk.rmi.org/sdpapi/request/";
final String serverParameters = "OPERATION_NAME=ADD_REQUEST&TECHNICIAN_KEY=D4ADD3A3-9CD4-4307-932B-29E96BCFA5B6&INPUT_DATA=%3C?xml%20version=%25221.0%2522%20encoding=%2522utf-8%2522?%3E%3COperation%3E%3CDetails%3E%3Crequester%3EBetsy%20Leach%3C/requester%3E%3Csubject%3ETest%3C/subject%3E%3Cdescription%3ETesting%20curl%20input%20again%3C/description%3E%3C/Details%3E%3C/Operation%3E"; // Put parameters here for testing.
// trying HttpURLConnection instead of a plain URLConnection
URL url = new URL(serverPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("charset", "utf-8");
connection.setRequestProperty("Content-Length", "" + Integer.toString(serverParameters.getBytes().length));
connection.setUseCaches (false);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(serverParameters);
wr.flush();
wr.close();
// Process response - need to get XML response back.
InputStream stream = connection.getInputStream();
connection.disconnect();
// Put output stream into a String
BufferedReader br = new BufferedReader(stream);
String result;
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
result += line;
}
br.close();
System.out.println(result);
return result;
}
catch (final Exception e) {
System.out.println(e.getMessage());
throw new HelpDeskTestException();
}
}
}
-查看此方法,它来自我的工作项目 -我以
xml
的形式发送了请求,并接收xml
中的数据并将其转换为字符串。
public String postData(String url, String xmlQuery) {
final String urlStr = url;
final String xmlStr = xmlQuery;
final StringBuilder sb = new StringBuilder();
Thread t1 = new Thread(new Runnable() {
public void run() {
HttpClient httpclient = DefaultHttpClient();
HttpPost httppost = new HttpPost(urlStr);
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
1);
nameValuePairs.add(new BasicNameValuePair("xml", xmlStr));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
Log.d("Vivek", response.toString());
HttpEntity entity = response.getEntity();
InputStream i = entity.getContent();
Log.d("Vivek", i.toString());
InputStreamReader isr = new InputStreamReader(i);
BufferedReader br = new BufferedReader(isr);
String s = null;
while ((s = br.readLine()) != null) {
Log.d("YumZing", s);
sb.append(s);
}
Log.d("Check Now",sb+"");
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
t1.start();
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Getting from Post Data Method "+sb.toString());
return sb.toString();
}
publicstringpostdata(stringurl,stringxmlquery){
最后一个字符串urlStr=url;
最终字符串xmlStr=xmlQuery;
最终StringBuilder sb=新StringBuilder();
线程t1=新线程(新的可运行线程(){
公开募捐{
HttpClient HttpClient=DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(urlStr);
试一试{
List name valuepairs=new ArrayList(
1);
添加(新的BasicNameValuePair(“xml”,xmlStr));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=httpclient.execute(httppost);
Log.d(“Vivek”,response.toString());
HttpEntity=response.getEntity();
InputStream i=entity.getContent();
Log.d(“Vivek”,i.toString());
InputStreamReader isr=新的InputStreamReader(i);
BufferedReader br=新的BufferedReader(isr);
字符串s=null;
而((s=br.readLine())!=null){
Log.d(“YumZing”,s);
某人追加;
}
Log.d(“立即检查”,sb+”);
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
});
t1.start();
试一试{
t1.join();
}捕捉(中断异常e){
e、 printStackTrace();
}
System.out.println(“从Post数据方法获取”+sb.toString());
使某人返回字符串();
}
缓冲读取器不直接接受输入流,它只接受读取器对象。
将输入流包装在输入流读取器中,并将其传递给缓冲读取器
BufferedReader br=新的BufferedReader(新的InputStreamReader(流)) 我有两个观察结果
connection.disconnect()代码>在末尾,即在br.close()之后完成阅读代码>行
InputStream stream = connection.getInputStream();
InputStreamReader isReader = new InputStreamReader(stream );
//put output stream into a string
BufferedReader br = new BufferedReader(isReader );
InputStream stream = connection.getInputStream();
InputStreamReader isReader = new InputStreamReader(stream );
//put output stream into a string
BufferedReader br = new BufferedReader(isReader );