2011-07-05 22 views
9

Aşağıdaki java kodunu bir uzak url'ye POST xml verisine kullandım ve yanıtı aldım. Burada, giriş olarak bir xml dosyası kullanıyorum. İhtiyacım olan şey, bir dosyayı değil, bir xml olarak iletmektir ... bunu yapabilir miyim? Birisi bana yardım edebilir mi? Çok teşekkürler!java kullanarak POST xml verileri

Java kodu

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

    } 

GÜNCELLEME: Ben

cevap

8

org.apache.commons.httpclient.methods.PostMethod'daki setRequestEntity yönteminin, argüman olarak StringRequestEntity kabul eden aşırı yüklenmiş bir sürümü vardır. Verilerinizi bir dize olarak (giriş akışının tersine) geçmek istiyorsanız bunu kullanmalısınız. Bu nedenle kodunuz şunun gibi görünecektir:

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

Bu yardımcı olur umarım.

+0

Çok teşekkürler, bence bu benim problemimi çözüyor ... :) –

+0

Bu dint benim için çalışıyor. lütfen bu soruya yardım edin http://stackoverflow.com/questions/32884587/how-to-sent-xml-file-endpoint-url-in-restful-web-service/32884767#32884767 –

+0

XML anahtar değerini nasıl zarif bir şekilde oluşturabilirim? saf dizeleri kullanmak yerine çiftler? – therealprashant

0

(Dize kullanma gibi XML dosyası içeriğini almak için ... bir dize olarak XML geçmek ve xml dosyası içeren kaldırmak gerekir IOException için catch-blok ekleyin)

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

Daha iyi bir yol Java Web Services kullanmaktır JAX-WS veya Java Restful Web Servisleri JAX-RS.

+0

Merhaba, Cevabınız için çok teşekkürler, bir xml dosyası içermem gerekmiyor, bunun yerine xml'yi bir dizge olarak geçirmem gerekiyor ... bunu yapmanın bir yolu var mı? –

1

Böyle PostMethod bir parametre olarak bu dizeyi iletebilirsiniz sizi Ekle Bu yöntemde

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

String türüne XML dönüştürebilirsiniz.

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

bütün XML

bir queryString müşteriye iletilir.

+0

Merhaba, Cevabınız için çok teşekkürler, bir xml dosyası içermem gerekiyor, bunun yerine xml'yi bir dizge olarak geçirmem gerekiyor ... bunu yapmanın bir yolu var mı? –

İlgili konular