繁体   English   中英

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

[英]How to make a SOAP Request to an Endpoint or WSDL like SoapUI?

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

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

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

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

看看Java Web Service框架,例如JAX-WS,Metro,CXF,Axis2,SpringWS的参考实现,...它们全都可以使用您的WSDL并为您提供或生成客户端存根。

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

我一直在成功地使用此代码,即使直接从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);
    }
}

在这里查看完整示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM