将cURL转换为Java以进行SOAP调用

时间:2018-06-07 16:00:46

标签: java spring spring-boot curl soap

我实现了一个SOAP Web服务,它正在使用cURL调用。我实施了以下this tutorial。该服务正在使用以下命令:

curl --header "content-type: text/xml" -d @request.xml http://localhost:8080/ws

但是当然这个动作必须从命令提示符中解放出来并且能够在必要时被调用,所以我想在调用一个方法时将这个服务与一个动作联系起来。

到目前为止,我从互联网上找到了

        String url = "http://localhost:8080/ws";
        URL obj = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
        conn.setRequestProperty("Content-Type", "text/xml");
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");

我认为它应该是一个POST方法但是如何添加“request.xml”和“--header”?什么命令将完成cURL调用?或者我这样做是完全错误的还有很长的路要走,还有一种更简单的方法吗?

PS:我已经运行了一个Web服务,我正在使用Eclipse Oxygen。

2 个答案:

答案 0 :(得分:1)

虽然HttpURLConnection可以用于此目的,但SOAPConnection是针对没有WSDL的情况而设计的。

下面的代码更简单:

SOAPConnection conn = SOAPConnectionFactory.newInstance().createConnection();

SOAPMessage msg =
        MessageFactory.newInstance()
            .createMessage(null, Files.newInputStream(Paths.get("request.xml")));

SOAPMessage resp = conn.call(msg, "http://localhost:8080/ws");

resp.writeTo(System.out);

答案 1 :(得分:0)

最后在代码中添加以下行,它将执行JOB。

OutputStream wr = new DataOutputStream(conn.getOutputStream());


    BufferedReader br = new BufferedReader(new FileReader(new File("request.xml")));

    //reading file and writing to URL
    System.out.println("Request:-");
    String st;
    while ((st = br.readLine()) != null) {
        System.out.print(st);
        wr.write(st.getBytes());
    }

    //Flush&close the writing to URL.
    wr.flush();
    wr.close();

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String output;

    StringBuffer response = new StringBuffer();
    while ((output = in.readLine()) != null) {
        response.append(output);
    }

    in.close();


    // printing result from response
    System.out.println("Response:-" + response.toString());