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.