2011-07-05 27 views
9

He utilizado el siguiente código java para PUBLICAR datos xml en una url remota y obtener la respuesta. Aquí, estoy usando un archivo xml como entrada. Lo que necesito es pasar el xml como una cadena, no como un archivo ... ¿de todos modos puedo hacer esto? ¿Alguien me puede ayudar? ¡Muchas gracias!POST xml data using java

código 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(); 
    } 
} 

    } 

ACTUALIZACIÓN: Necesito pasar XML como una cadena y eliminar la participación archivo XML ...

Respuesta

8

El método setRequestEntity en org.apache.commons.httpclient.methods.PostMethod tiene una versión sobrecargada que acepta StringRequestEntity como argumento. Debe usar esto si desea pasar sus datos como una cadena (en lugar de una secuencia de entrada). Por lo que su código sería algo como esto:

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

Espero que ayude.

+0

Muchas gracias, creo que esto resuelve mi problema ... :) –

+0

esto no funciona para mí. por favor, ayuda con esta pregunta http://stackoverflow.com/questions/32884587/how-to-sent-xml-file-endpoint-url-in-restful-web-service/32884767#32884767 –

+0

¿Cómo puedo crear elegantemente el valor clave de XML? pares en lugar de usar cadenas puras? – therealprashant

0

para obtener su contenido del archivo XML como el uso de cuerdas (agregar catch-block para 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(); 

La mejor manera es utilizar Java Web Services JAX-WS o Java Restful Web Services JAX-RS.

+0

Hola, muchas gracias por su respuesta, no necesito involucrar ningún archivo xml en absoluto, necesito pasar xml como una cadena ... ¿hay alguna manera de hacerlo? –

1

Puede convertir el XML a String desde este método

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

Añadir que puede pasar esta cadena como un parámetro en PostMethod como este.

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

Todo el XML se transmitirá al cliente en un queryString.

+0

Hola, muchas gracias por tu respuesta, no necesito involucrar ningún archivo xml en absoluto, necesito pasar xml como una cadena ... ¿hay alguna manera de hacerlo? –