2011-07-05 15 views
9

私は以下のjavaコードを使用してxmlデータをリモートurlにPOSTし、レスポンスを取得しました。ここでは、xmlファイルを入力として使用しています。私が必要とするのは、xmlをファイルではなく文字列として渡すことです...とにかく私はこれを行うことができますか?誰か助けてくれますか?どうもありがとう!POST xml data using java

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:私は文字列としてXMLを渡すとxmlファイルを含む削除する必要があります...

答えて

8

org.apache.commons.httpclient.methods.PostMethodのsetRequestEntityメソッドには、引数としてStringRequestEntityを受け入れるオーバーロードされたバージョンがあります。入力ストリームとは対照的に、データを文字列として渡す場合は、これを使用する必要があります。したがって、コードは次のようになります。

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

+0

ありがとう、これは私の問題を解決すると思う... :) –

+0

私のためのこのdint仕事。この質問を助けてくださいhttp://stackoverflow.com/questions/32884587/how-to-sent-xml-file-endpoint-url-in-restful-web-service/32884767#32884767 –

+0

どのように私はエレガントにXMLのキー値を作成することができます純粋な文字列を使用する代わりにペア? – therealprashant

0

文字列の使用など、あなたのXMLファイルの内容を取得するには(より良い方法は、Java Webサービスを使用することです

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

)にIOException用のcatchブロックを追加JAX-WSまたはJava Restful WebサービスJAX-RS。

+0

こんにちは、お返事ありがとうございます。代わりにxmlファイルを含める必要はありません。代わりにxmlを文字列として渡す必要があります。これを行う方法はありますか? –

1

あなたはこのようなPostMethod上のパラメータとして、この文字列を渡すことができますを追加します。この方法

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

から文字列へのXMLを変換することができます。

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

XML全体がqueryStringでクライアントに送信されます。

+0

こんにちは、お返事ありがとうございます、私はすべてのXMLファイルに関与する必要はありません代わりに、私は文字列としてxmlを渡す必要があります...それを行う方法はありますか? –

関連する問題