如何向SoapUI等端点或WSDL发出SOAP请求?

时间:2015-01-29 16:35:54

标签: java soap wsdl request bpel

我需要向WSDL描述的BPEL流程发出请求。我一直在使用SoapUI通过提供WSDL URL来测试它,一切正常。

现在我需要在Java中做同样的事情。我正在构建一个Web服务,它接收来自另一个Web服务的数据,并且需要将其传递给BPEL流程。我试图使用wsdl2java和wsimport生成存根,但这不起作用,因为我的BPEL WSDL没有服务定义(我无法添加它,因为如果我执行WSDL在我的BPEL中不起作用)。

因此,由于SoapUI能够发出请求,很明显有一些方法可以在没有服务定义的情况下调用BPEL WSDL,我认为这是解决我问题的唯一方法。

TL / DR:SoapUI如何向wsdl文件发出请求,我该怎么做呢?

3 个答案:

答案 0 :(得分:0)

查看Java Web Service框架,例如JAX-WS,Metro,CXF,Axis2,SpringWS的参考实现......所有这些框架都能够为您提供WSDL并为您提供或生成客户端存根。 / p>

答案 1 :(得分:0)

我设法通过创建一个新的WSDL来解决这个问题,该WSDL将创建符合BPEL WSDL的存根,并创建一个发送SOAP消息的客户端类,如in here所述。为了找出我需要在消息中定义的内容,我使用了SoapUI记录器来查看消息的发送内容。

答案 2 :(得分:0)

即使直接从oracle,我也一直在成功使用此代码。如果需要,您将需要安装证书,并根据需要添加更多标头。

import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
public class TestWSHTTPS {
    private static final int TIME_OUT = 10000;    
    public static void main(String[] args) throws Exception {
        final String URL = "http://localhost:8080/TestSoap";
        final String FILE = "/path/to/your/file.txt";    
        URL obj = new URL(URL);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setConnectTimeout(TIME_OUT);
        byte[] fileBytes = Files.readAllBytes(Paths.get(FILE));
        String fileContent = new String(fileBytes, "UTF-8");
        // request headers (add all headers needed)
        con.setRequestMethod("POST");
        con.setRequestProperty("Content-length", String.valueOf(fileBytes.length));
        con.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
        // Send post request
        con.setDoOutput(true);
        con.setReadTimeout(TIME_OUT);
        DataOutputStream outputStream= new DataOutputStream(con.getOutputStream());
        outputStream.write(fileContent.getBytes());
        int responseCode = con.getResponseCode();
        System.out.println("responseCode:" + responseCode);
        InputStream in = null;
        if (con.getResponseCode() >= 200 && con.getResponseCode()<= 300 ) {
            in = con.getInputStream();
        } else {
            in = con.getErrorStream();
        }
        System.out.println("\nSending 'POST' request to URL : " + URL);
        System.out.println("Response Code : " + responseCode);
        Scanner s = new Scanner(in).useDelimiter("\\A");
        String result = s.hasNext() ? s.next() : "";
        System.out.println(result);
    }
}

查看完整示例here