POST xml-данные с использованием java
я использовал следующий код java для публикации xml-данных на удаленный url-адрес и получения ответа. Здесь я использую XML-файл в качестве входных данных. Мне нужно передать XML как строку, а не файл... я могу это сделать? Кто-нибудь может мне помочь? Большое спасибо!
Java-код
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
public class xmlToString {
public static void main(String[] args) {
String strURL = "https://simulator.expediaquickconnect.com/connect/ar";
String strXMLFilename = "xmlfile.xml";
File input = new File(strXMLFilename);
PostMethod post = new PostMethod(strURL);
try {
post.setRequestEntity(new InputStreamRequestEntity(
new FileInputStream(input), input.length()));
post.setRequestHeader("Content-type",
"text/xml; charset=ISO-8859-1");
HttpClient httpclient = new HttpClient();
int result = httpclient.executeMethod(post);
System.out.println("Response status code: " + result);
System.out.println("Response body: ");
System.out.println(post.getResponseBodyAsString());
} catch (IOException e) {
e.printStackTrace();
} finally {
post.releaseConnection();
}
}
}
обновление: мне нужно передать XML как строку и удалить XML-файл...
3 ответов
метод setRequestEntity в организации.апаш.палата общин.с помощью HttpClient.методы.PostMethod имеет перегруженную версию, которая принимает StringRequestEntity в качестве аргумента. Вы должны использовать это, если хотите передать свои данные в виде строки (в отличие от входного потока). Так что ваш код будет выглядеть примерно так:
String xml = "whatever.your.xml.is.here";
PostMethod post = new PostMethod(strURL);
try {
StringRequestEntity requestEntity = new StringRequestEntity(xml);
post.setRequestEntity(requestEntity);
....
надеюсь, что это поможет.
вы можете преобразовать XML в строку из этого метода
public String convertXMLFileToString(String fileName)
{
try{
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
InputStream inputStream = new FileInputStream(new File(fileName));
org.w3c.dom.Document doc = documentBuilderFactory.newDocumentBuilder().parse(inputStream);
StringWriter stw = new StringWriter();
Transformer serializer = TransformerFactory.newInstance().newTransformer();
serializer.transform(new DOMSource(doc), new StreamResult(stw));
return stw.toString();
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
Add вы можете передать эту строку в качестве параметра на PostMethod
такой.
PostMethod post = new PostMethod(strURL);
post.addParamter("paramName", convertXMLFileToString(strXMLFilename ) );
весь XML будет передан клиенту в queryString
.
чтобы получить содержимое XML-файла в виде строки, используйте (добавьте catch-block для IOException)
StringBuilder bld = new StringBuilder();
FileReader fileReader = new FileReader(input);
BufferedReader reader = new BufferedReader(fileReader);
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
bld.append(line);
}
String xml = bld.toString();
лучший способ-использовать Java Web Services JAX-WS или Java Restful Web Services JAX-RS.