-2

XML over HTTPをサーバーに送信し、応答としてXMLを受信するアプリケーションを作成しています。XMLをサーバーに送信できますが、応答を受信できません。

これは私のクライアントコードです:

public void sendXMLToServer(){
    System.out.println("sendXMLToServer");
    String strURL = "http://localhost:9080/MockServerMachine/sendXMLPost";
    // Get file to be posted
    String strXMLFilename = "output.xml";
    File input = new File(strXMLFilename);
    // Prepare HTTP post
    System.out.println("junaud url "+ strURL);
    PostMethod post = new PostMethod(strURL);


 // Request content will be retrieved directly
    // from the input stream
    // Per default, the request content needs to be buffered
    // in order to determine its length.
    // Request body buffering can be avoided when
    // content length is explicitly specified
    try {
        post.setRequestHeader("Content-type","application/xml");
        post.setRequestHeader("Accept","application/xml");

        post.setRequestEntity(new InputStreamRequestEntity(
                new FileInputStream(input), input.length()));
        HttpClient httpclient = new HttpClient();
        int result = httpclient.executeMethod(post);
        String xmlResponse = post.getResponseBodyAsString();
        // Display status code
        System.out.println("Response status code jun: " + result);

        // Display response
        System.out.println("Response body: ");
        System.out.println(post.getResponseBodyAsString());
        post.releaseConnection();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (HttpException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

これはサーバー側です:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    //InputStream in = request.getInputStream();
        //URL xmlUrl = new URL(request.getRequestURL().toString());
    //InputStream in = xmlUrl.openStream();

    response.setContentLength(100);
//      PostMethod po = new PostMethod(request.getRequestURL().toString());
//      System.out.println("kikmk = "+po.getRequestEntity());

    try {
        // read this file into InputStream
        //InputStream inputStream = new FileInputStream("c:\\file.xml");
        InputStream inputStream = request.getInputStream();
        // write the inputStream to a FileOutputStream
        OutputStream out = new FileOutputStream(new File("c:\\junaidAhmedJameel.xml"));

        int read = 0;
        byte[] bytes = new byte[1024];

        while ((read = inputStream.read(bytes)) != -1) {
            System.out.println(new String (bytes));
            System.out.println(read);
            out.write(bytes, 0, read);
        }

        inputStream.close();
        out.flush();
        out.close();

        System.out.println("New file created!");
        } catch (IOException e) {
        System.out.println(e.getMessage());
        }

      }

誰かがここで私を助けることができますか?HTTP経由でXMLを送信するためのクライアント/サーバーのサンプル例はどれも素晴らしいでしょう。

4

2 に答える 2

2

ああ、それを見つけた。ここを見て:

OutputStream out = new FileOutputStream(new File("c:\\junaidAhmedJameel.xml"));

これは、ローカルディスクに書き込むだけです。応答ストリームにコンテンツを書き込んでいません。応答ストリームに何を書き込みたいかは明確ではありませんが、response.getWriter()またはへの呼び出しが目立って存在しませんresponse.getOutputStream()

コンテンツの長さを100に設定していますが、実際にはコンテンツを送信していません。とにかく、content-lengthをハードコーディングすることはほぼ間違いなく間違っていることに注意してください...しかし、コンテンツを送信していないときに行うことは間違いなく間違っています...

于 2013-01-01T09:43:22.810 に答える
0

サーバーコードで応答コンテンツを生成することはありません。長さを100に設定するだけです。

于 2013-01-01T09:43:14.523 に答える