Java 11 上的 SOAP 客户端

SOAP client on Java 11

我需要使用 SOAP 服务,我在 spring 教程中看到我的 java 类 用于使用和接收服务,可以使用工具或框架。

问题是大多数教程都依赖于 JDK 中的 wsimport 工具...经过大量尝试,我发现 Java 11 已弃用该工具。 在此之后,我发现 this ,this, and 正在谈论这个问题的一些解决方法。我尝试了所有这些,但是我的 gradle.build 开始围绕这个库产生依赖性问题。我试图排除有问题的库,但它并没有解决问题。

所以我想知道如何以不那么修补的方式生成我的 SOAP 客户端 类?

附加信息:这是合同优先的方法,该服务在网络上并且是一个 ?wsdl url。

最后,我只是按照 this 教程进行操作,该教程非常简单,允许我使用 SOAP Web 服务,然后构建一个 XML 文件来处理检索到的信息。希望 Java 11 在不久的将来能为此类服务提供更好的支持,但同时我解决了我的问题,也许这个 post 对执行类似任务的人有用。

当然我可以分享 :) 我的编码:

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class GusGetCompanyRawXml {

  public String getCompanyRawXmlData(String sessionKey, String polishVatId) {
    String outputString = "";
    try {
      URL url = new URL("https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc");
      URLConnection connection = url.openConnection();
      HttpURLConnection httpConn = (HttpURLConnection) connection;
      ByteArrayOutputStream bout = new ByteArrayOutputStream();
      String xmlInput =
          "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\"\n"
              + "xmlns:ns=\"http://CIS/BIR/PUBL/2014/07\" xmlns:dat=\"http://CIS/BIR/PUBL/2014/07/DataContract\">\n"
              + "<soap:Header xmlns:wsa=\"http://www.w3.org/2005/08/addressing\">\n"
              + "<wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>\n"
              + "<wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/DaneSzukajPodmioty</wsa:Action>\n"
              + "</soap:Header>\n"
              + "<soap:Body>\n"
              + "<ns:DaneSzukajPodmioty>\n"
              + "<ns:pParametryWyszukiwania>\n"
              + "<dat:Nip>"+polishVatId+"</dat:Nip>\n"
              + "</ns:pParametryWyszukiwania>\n"
              + "</ns:DaneSzukajPodmioty>\n"
              + "</soap:Body>\n"
              + "</soap:Envelope>";

      byte[] buffer;
      buffer = xmlInput.getBytes();
      bout.write(buffer);
      byte[] b = bout.toByteArray();
      String SOAPAction = "http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj";

      httpConn.setRequestProperty("Content-Length", String.valueOf(b.length));
      httpConn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
      httpConn.setRequestProperty("SOAPAction", SOAPAction);
      httpConn.setRequestProperty("sid", sessionKey);
      httpConn.setRequestMethod("POST");
      httpConn.setDoOutput(true);
      httpConn.setDoInput(true);
      OutputStream out = httpConn.getOutputStream();
//Write the content of the request to the outputstream of the HTTP Connection.
      out.write(b);
      out.close();
//Ready with sending the request.

//Read the response.
      InputStreamReader inputStreamReader = new InputStreamReader(httpConn.getInputStream(), "UTF-8");
      BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//
      String responseString = "";

//Write the SOAP message response to a String.
      while ((responseString = bufferedReader.readLine()) != null) {
        if (StringUtils.contains(responseString, "&lt;")) {
          String unescapedString = StringEscapeUtils.unescapeXml(responseString);
          String remove = StringUtils.remove(unescapedString, "\r");
          outputString = outputString + remove;
        }
      }
    } catch (IOException e){
      log.error("Get customer data from gus failed",e.getStackTrace());
    }
    return outputString;
  }
}
public BlnInitBookData initTrans(String ccode, String license) {
BlnInitBookData initBookData = null;
try {

    BlnInitBook request = new BlnInitBook();

    request.setLicenseType(license);
    request.setStrCinemaCode(ccode);

    initBookData = ((BlnInitBookResponse) getWebServiceTemplate().marshalSendAndReceive(hosted_server_URL, request,
            new SoapActionCallback("URL_of_SOAP_api"))).getServiceResponse1()
        .getBlnInitBookData();

} catch (final Exception e) {
    logger.error(this.getClass().getName() + e.getMessage);
}
return initBookData;}

在Java中,使用WebServiceGatewaySupportclass,它对我有用。我生成了 SOAP 请求,响应 classes.