0

サーバー側からxmlファイルをアップロードする必要があります。ファイルの内容は文字列です。このファイルのコンテンツをサーバーにアップロード(基本的に保存)するにはどうすればよいですか?

これは私が試していることであり、正常に機能します。ファイルを直接に渡す場合、ファイルFileBodyコンテンツをマルチパートリクエストとして別のサーブレットに送信するようにトリックする方法はありますか?

private def createConfiguration(def sessiontoken)
{
    def xmlString=""
    HttpClient httpclient = new DefaultHttpClient();
    try {

        HttpPost httppost = new HttpPost(fileParams.create);

        //FileBody bin = new FileBody(new File("C:\\Simon\\myxml.xml"));
        StringBody st = new StringBody(sessiontoken);
        StringBody cfgname = new StringBody(reqParams.c_Cfgname[0]);
        StringBody cfgdesc = new StringBody(reqParams.c_Cfgdesc[0]);
        StringBody cfgtype = new StringBody(reqParams.c_Cfgtype[0]);
        StringBody cfgfile = new StringBody(reqParams.CFGFILE[0]);

        MultipartEntity reqEntity = new MultipartEntity();
        reqEntity.addPart("sessiontoken", st);
        reqEntity.addPart("cfgname", cfgname);
        reqEntity.addPart("cfgdesc", cfgdesc);
        reqEntity.addPart("cfgenv", cfgtype);
        //reqEntity.addPart("cfgfile", bin);
        reqEntity.addPart("cfgfile", cfgfile);

        httppost.setEntity(reqEntity);

        System.out.println("executing request " + httppost.getRequestLine());
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity resEntity = response.getEntity();

        System.out.println("----------------------------------------");
        //System.out.println(response.getStatusLine());
        if (resEntity != null) {
            //System.out.println("Response content length: " + resEntity.getContentLength());
            xmlString=resEntity.getContent().getText()
        }
        EntityUtils.consume(resEntity);
    } finally {
        try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) {}
    }
    xmlString
}

上記のコードを使用すると、以下の例外が発生します

----------------------------------------



Exception while processing your Request.
No result defined for action com.abc.dc.actions.CreateConfiguration and
 result input

アップデート

だから今、Tomcatログと他のサーバー側のコードをチェックした後、私はそれが内部的にそれをdc取得cfgfileして設定していることを知りました

public void setCfgfile(File cfgfile)
{
    this.cfgfile = cfgfile
}

それは私に

java.lang.NoSuchMethodException: com.abc.dc.actions.CreateConfiguration.setCfgfile([Ljava.lang.String;)

setCfgfileでは、ここでメソッドをオーバーロードしてオブジェクトpublic void setCfgfile(String cfgfile)に変換するにはどうすればよいですか?cfgfileFile

またはさらに良い、

cfgfileこの文字列変数をFileBodyオブジェクトに変換するにはどうすればよいですか?

4

1 に答える 1

0

Finally here is how I made it to work :)

private def sendRequest(def sessiontoken,def sendUrl)
{
    logger.debug("Inside sendRequest to: "+sendUrl)
    def xmlString=""
    HttpClient httpclient = new DefaultHttpClient();
    try {

        HttpPost httppost = new HttpPost(sendUrl);

        def filename=reqParams.filename
        logger.debug("Filename: "+filename)
        FileBody bin = new FileBody(writeToFile(filename,reqParams.cfgfile));
        StringBody st = new StringBody(sessiontoken);
        StringBody cfgid=new StringBody("")
        if(reqParams.containsKey('cfgfile')&&reqParams.cfgid!=null)
        {
            cfgid= new StringBody(reqParams.cfgid);
        }

        StringBody cfgname = new StringBody(reqParams.cfgname);
        StringBody cfgdesc = new StringBody(reqParams.cfgdesc);
        StringBody cfgenv = new StringBody(reqParams.cfgenv);

        logger.debug("attaching multipart")
        MultipartEntity reqEntity = new MultipartEntity();
        reqEntity.addPart("sessiontoken", st);
        reqEntity.addPart("cfgid", cfgid);
        reqEntity.addPart("cfgname", cfgname);
        reqEntity.addPart("cfgdesc", cfgdesc);
        reqEntity.addPart("cfgenv", cfgenv);
        reqEntity.addPart("cfgfile", bin);

        httppost.setEntity(reqEntity);

        HttpResponse response = httpclient.execute(httppost);
        HttpEntity resEntity = response.getEntity();

        if (resEntity != null) {
            xmlString=resEntity.getContent().getText()
        }
        EntityUtils.consume(resEntity);
    } finally {
        try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) {}
    }
    xmlString
}
于 2012-06-21T09:52:56.897 に答える