-4

我是 Java 新手,应该将 XML 文件发送到 HTTP 服务器。应首先将 XML 文件转换为字符串:

我从服务器收到错误:

[stdout] (http--127.0.0.1-8080-1) failed in postjava.lang.NullPointerException

[stdout] (http--127.0.0.1-8080-1) received post request :

似乎我没有向服务器发送任何内容。

这是代码

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Scanner;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.w3c.dom.Document;


public class try_post {

    public static void main(String[] args) {

        try{
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));


            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();

            Document doc = builder.parse("D:\\n.xml");
            StringWriter stringWriter = new StringWriter(); 

            Transformer transformer =TransformerFactory.newInstance().newTransformer(); 

            transformer.transform(new DOMSource(doc), new StreamResult(stringWriter)); 
            String strFileContent = stringWriter.toString();  
            System.out.println(strFileContent);
            System.out.println( strFileContent.getClass().getName());
            System.out.println("xml file converted to string"); 

            String param="param1=" + URLEncoder.encode(strFileContent ,"UTF-8");

            URL url = new URL("http://localhost:8080/");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            connection.setDoOutput(true);
            //      connection.setInstanceFollowRedirects(false);
            connection.setRequestMethod("POST");

            connection.setFixedLengthStreamingMode(param.getBytes().length);
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());

            writer.write(param);
            writer.flush();

            String line;
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            writer.close();
            reader.close();

            String response= "";


            StreamSource source = new StreamSource(fileReader);
            StreamResult result = new StreamResult(os);
            transformer.transform(source, result);*/



            DataOutputStream fos = new DataOutputStream(connection.getOutputStream ());

            System.out.println("Response code: " + connection.getResponseCode());
            connection.disconnect();}
        catch (MalformedURLException ex) {
            System.out.print("MalformedURLException");

        } catch (Exception ex) {
            System.out.print(" Exception: "+ex.getMessage());

        }

    }

}
4

4 回答 4

3

没有人可以根据您发布的内容提供帮助。堆栈跟踪必须有更多。

您的代码有很多问题:

  1. 打印堆栈跟踪,而不仅仅是消息。它会有更多的信息。
  2. 您使用连接对象而不首先检查它是否为空。可能就是这样。
  3. 与该 Document 对象相同。您如何知道 XML 已被读取?

看起来您正在尝试从文件中读取 XML 并将其发布到在您的本地主机上侦听的 servlet。您只需检查响应代码。我错过了什么?

你的防御力还不够我的口味。难怪你有问题。

打印堆栈跟踪,如下所示:

    catch (MalformedURLException ex) {
        ex.printStackTrace();
    } catch (Exception ex) {
        ex.printStackTrace();
    }

另一个明智的尝试是在 IntelliJ 之类的 IDE 中运行,并使用调试器单步执行您的代码。你会明白为什么你得到 NPE 的时间比你在这里等待答案的时间短。

于 2013-01-24T00:02:16.837 回答
2

我懂了。只需使用 Ruby。

require "net/http"; require "uri"
params = { param1: File.read("D:\\n.xml") }
uri = URI.parse("http://localhost:8080/")
resp = Net::HTTP.post_form(uri, params)
puts "Response code: #{resp.code}"

对不起,我不得不这样做。*反对投票的大括号*

于 2013-01-24T00:28:19.410 回答
1

异常发生在服务器端,而不是在您的代码中。异常堆栈跟踪是否记录在服务器上?您可能需要查看服务器端代码来调试它。

于 2013-01-24T00:48:42.197 回答
0

据我所知,你做事很艰难。尝试使用 HTTPClient 库。这应该会大大简化您的代码。

对于 maven 依赖项,请参见: http ://search.maven.org/#artifactdetails%7Ccommons-httpclient%7Ccommons-httpclient%7C3.1%7Cjar

有关工作代码示例,请参阅:请参阅:http ://www.kodejava.org/browse/47.html

于 2013-01-24T00:08:19.807 回答