我需要向WSDL描述的BPEL流程发出请求。我一直在使用SoapUI通过提供WSDL URL来测试它,一切正常。
现在我需要在Java中做同样的事情。我正在构建一个Web服务,它接收来自另一个Web服务的数据,并且需要将其传递给BPEL流程。我试图使用wsdl2java和wsimport生成存根,但这不起作用,因为我的BPEL WSDL没有服务定义(我无法添加它,因为如果我执行WSDL在我的BPEL中不起作用)。
因此,由于SoapUI能够发出请求,很明显有一些方法可以在没有服务定义的情况下调用BPEL WSDL,我认为这是解决我问题的唯一方法。
TL / DR:SoapUI如何向wsdl文件发出请求,我该怎么做呢?
答案 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。