2011-07-05 4 views
9

Użyłem następującego kodu Java do POST xml danych do zdalnego adresu URL i uzyskać odpowiedź. Tutaj używam pliku xml jako danych wejściowych. Potrzebuję przekazać xml jako ciąg, a nie plik ... czy mogę to zrobić? Czy ktoś może mi pomóc? Wielkie dzięki!POST xml danych przy użyciu java

kod 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(); 
    } 
} 

    } 

UPDATE: trzeba przekazać XML jako ciąg znaków i usunąć plik xml z udziałem ...

Odpowiedz

8

Metoda setRequestEntity na org.apache.commons.httpclient.methods.PostMethod ma przeładowaną wersję, która przyjmuje jako argument StringRequestEntity. Powinieneś użyć tego, jeśli chcesz przekazać dane jako ciąg (w przeciwieństwie do strumienia wejściowego). Twój kod będzie wyglądał mniej więcej tak:

String xml = "whatever.your.xml.is.here"; 
PostMethod post = new PostMethod(strURL);  
try { 
    StringRequestEntity requestEntity = new StringRequestEntity(xml); 
    post.setRequestEntity(requestEntity); 
.... 

Nadzieję, że pomaga.

+0

Wielkie dzięki, myślę, że to rozwiązuje mój problem ... :) –

+0

to działa dla mnie. proszę o pomoc w tym pytaniu http://stackoverflow.com/questions/32884587/how-to-sent-xml-file-endpoint-url-in-restful-web-service/32884767#32884767 –

+0

Jak mogę elegancko utworzyć wartość klucza XML pary zamiast używać czystych ciągów znaków? – therealprashant

0

zdobycia zawartość pliku XML jako użytku String (dodać catch-block dla 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(); 

Lepszym sposobem jest użycie Java Web Services JAX-WS lub Java Restous Web Services JAX-RS.

+0

Cześć, Wielkie dzięki za odpowiedź, nie muszę w ogóle angażować pliku xml, zamiast tego muszę przekazać xml jako ciąg ... czy jest jakiś sposób na zrobienie tego? –

1

można konwertować XML na łańcuch z tej metody

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; 
} 

Dodaj was może przekazać ten ciąg jako parametr na PostMethod takiego.

PostMethod post = new PostMethod(strURL); 
post.addParamter("paramName", convertXMLFileToString(strXMLFilename)); 

Cały XML będą przesyłane do klienta w queryString.

+0

Cześć, Wielkie dzięki za odpowiedź, nie muszę w ogóle angażować pliku xml, zamiast tego muszę przekazać xml jako ciąg ... czy jest jakiś sposób na zrobienie tego? –