繁体   English   中英

Java 11 上的 SOAP 客户端

[英]SOAP client on Java 11

首先,我是网络服务领域的新手,所以我真的不知道这是否是一个微不足道的问题,但如果是,请原谅我。

我需要消费一个 SOAP 服务,我在 spring 教程中看到我的用于消费和接收服务的 java 类可以使用工具或框架自动生成。

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

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

附加信息:这是合同优先,服务在网上,它是一个 ?wsdl 网址。

提前致谢

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

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

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中使用WebServiceGatewaySupport类,它对我有用。 //我生成了 SOAP 请求,响应类。

暂无
暂无

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

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