2016-06-30 12 views
2

私は、開発された以前のWebアプリケーションを使用してXMLを特定のスキーマで検証しようとしているこのコードを持っています。ウェブサイト上でそれはカールコマンドを与え、私は役に立たないでjavaでそれを実行しようとすることについていくつかの研究を行った。私はhttpclientというAPIを見つけましたが、POSTのために何も見つかりませんでした。変数を持つJavaのCurl POSTリクエスト

質問の後半。これが正しい形式であれば、curlコマンドでxml変数をどのように提示するかでなければなりません。

@POST 
@Path("/Validate") 
//Uncomment when testing with real xml 
//@Produces("application/xml") 
public String validate(@FormParam("xml") String xml) 
{ 
    System.out.println(xml); 
    System.out.println("validate"); 
    try { 
     Process process = Runtime.getRuntime().exec("curl -X POST --data- urlencode 'xml=<hml>xml</hml>' http://miring.b12x.org/validator/ValidateMiring/ "); 
     BufferedReader input = new BufferedReader(new  InputStreamReader(process.getInputStream())); 
     String cmdXML=""; 
     String line=null; 
     while((line=input.readLine())!=null) 
     { 
      cmdXML+=line; 
     } 
    } catch (IOException e) { 
     logger.error("Something went wrong in validating "+ e); 
     System.out.println("Error in validation"); 
    } 
    return "stuff"; 
} 

答えて

0

まず、runtime.exec(...)は、あなたのコマンドは複数の要素を持っているときString[]が必要です。

のJava APIのランタイム:http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#exec(java.lang.String[])

第二に、あなたはあなたの側でそのコマンドの動作を確認する必要があります。

curl -X POST --data-urlencode 'xml=<hml>xml</hml>' http://miring.b12x.org/validator/ValidateMiring/

最後に、あなたはコマンドcurlのフルパスを指定する必要があります。

例: Unix上/usr/bin/curlC:/Program Files/Curl/curl次のコードで

ように注意してください

Windows上では、コマンドの実際のパスでcurl

<PATH_TO_CURL>を交換することができますあなたはこのコードを試しますか?

コード

@POST 
@Path("/Validate") 
//Uncomment when testing with real xml 
//@Produces("application/xml") 
public String validate(@FormParam("xml") String xml) 
{ 
    System.out.println(xml); 
    System.out.println("validate"); 
    try { 
     Runtime runtime = Runtime.getRuntime(); 
     String[] command = {"<PATH_TO_CURL>/curl", "-X", "POST", "--data-urlencode", "'xml=<hml>xml</hml>'", " http://miring.b12x.org/validator/ValidateMiring/"} 
     Process process = runtime.exec(command); 
     BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream())); 
     String cmdXML=""; 
     String line=null; 
     while((line=input.readLine())!=null) 
     { 
      cmdXML+=line; 
     } 
    } catch (IOException e) { 
     logger.error("Something went wrong in validating "+ e); 
     System.out.println("Error in validation"); 
    } 
    return "stuff"; 
} 
+0

は、残念ながら、これは私のために働いていません。しかし、私はまた、curlコマンドをファイル名の方がずっと少ない端末で動作させるという問題を抱えているように思われるので、最初のスタートになると思います。 – Georgrio

+0

ファイルのcurl postの例を以下に示します。 'curl -X POST -d @ file.xml http:// localhost:8080/url'です。ファイル名が変数の場合、 'file.xml'を' $ {FILENAME} 'に置き換える必要があります(あなたがUnixマシン上にいると仮定します) –

関連する問題