使用HttpsUrlConnection进行的Soap调用使用Java提供了500

问题描述

我已经尝试了一个多月,已经在stackoverflow上阅读了所有可用的内容,但仍然无法解决此问题,我需要调用soap webservice并获取包含URL的响应。根据不同的测试,我得到了500/400错误。任何帮助将不胜感激(1):

客户端代码如下:

URL oURL = null;
    HttpsURLConnection con = null;
    
    try {
        // Create SOAP Connection
        oURL = new URL(soapEndpointUrl);
        con = (HttpsURLConnection) oURL.openConnection();
        
        con.setRequestMethod("POST");
        con.setRequestProperty("Content-type","application/soap+xml; charset=utf-8");
        con.setDoOutput(true);
        con.setUseCaches (false);
        // Send SOAP Message to SOAP Server
        
        SOAPMessage message = createSOAPRequest(oppBean,context,soapEndpointUrl,soapAction);
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        message.writeto(bout);
        String strMsg = new String(bout.toByteArray());
        
        OutputStream out = con.getoutputStream();
        out.write(reproducerUrlEncodedString((strMsg)).getBytes());
        out.close();
        
        int responseCode = con.getResponseCode();
        
        Reader streamReader = null;
        
        if (responseCode > 299) {
            streamReader = new InputStreamReader(con.getErrorStream());
        } else {
            streamReader = new InputStreamReader(con.getInputStream());
        }
        
        try (BufferedReader in = new BufferedReader(
                streamReader)) {

            String line;
            StringBuilder response = new StringBuilder();

            while ((line = in.readLine()) != null) {
                response.append(line);
            }
           
           if(responseCode == 200) {
              logger.debug(response.toString());
           }
        }
        
    } catch (Exception e) {
        logger.error(e.getMessage());
    }

如果我按原样使用请求,我总是得到500。如果我对双引号进行编码,则会出现错误400。提供服务的团队无法获取错误500的日志。他们使用C#构建了该日志。

他们希望我发送的请求xml如下:

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:hen="example.com"
xmlns:hen1="http://schemas.xyz.org/2004/07/xyz.WcfServices.xyz.IO.Initialize"
xmlns:hen2="example.com">
<soap:Header
    xmlns="http://www.w3.org/2005/08/addressing">
    <To>https://service.xyz.fr/Company/ABC/ABC.svc</To>
</soap:Header>
<soap:Body>
    <hen:XyzMethod>
        <hen:entree>
            <hen1:AdresseLigne1Souscripteur>35</hen1:AdresseLigne1Souscripteur>
            <hen1:AdresseLigne2Souscripteur>avenue de la Republique</hen1:AdresseLigne2Souscripteur>
            <hen1:AdresseLigne3Souscripteur>Paris 13th</hen1:AdresseLigne3Souscripteur>
            <hen1:AdresseMailEquipeCommercialConnecte>bch@xyz.com</hen1:AdresseMailEquipeCommercialConnecte>
            <hen1:AdresseServiceCommercialLigne1>AdresseServiceCommercialLigne1</hen1:AdresseServiceCommercialLigne1>
            <hen1:AdresseServiceCommercialLigne3>AdresseServiceCommercialLigne3</hen1:AdresseServiceCommercialLigne3>
            <hen1:CanalVente>7</hen1:CanalVente>
            <hen1:CodexyzCiviliteSouscripteur>01</hen1:CodexyzCiviliteSouscripteur>
            <hen1:CodexyzRegime>0001</hen1:CodexyzRegime>
            <hen1:CodexyzSexeSouscripteur>FE</hen1:CodexyzSexeSouscripteur>
            <hen1:CodexyzTypeSouscripteur>EXCLIENT</hen1:CodexyzTypeSouscripteur>
            <hen1:CodeIsoPaysSouscripteur>FR</hen1:CodeIsoPaysSouscripteur>
            <hen1:CodeMotifOpportunite>NRENS</hen1:CodeMotifOpportunite>
            <hen1:CodePostalServiceCommercial>59650</hen1:CodePostalServiceCommercial>
            <hen1:CodePostalSouscripteur>59650</hen1:CodePostalSouscripteur>
            <hen1:CodeProduitxyz>66</hen1:CodeProduitxyz>
            <hen1:CodeServiceCommercial>20</hen1:CodeServiceCommercial>
            <hen1:DateEffetContrat>01/01/2021</hen1:DateEffetContrat>
            <hen1:DateNaissanceSouscripteur>07/07/1972</hen1:DateNaissanceSouscripteur>
            <hen1:EmailSouscripteur>alexeyevitch@test.com</hen1:EmailSouscripteur>
            <hen1:LibelleServiceCommercial>xyz - Département Individuels</hen1:LibelleServiceCommercial>
            <hen1:NomBeneficiaire>VILLANI</hen1:NomBeneficiaire>
            <hen1:NomCommercial>Test BCH</hen1:NomCommercial>
            <hen1:NumeroOpportunite>2020/06/0009</hen1:NumeroOpportunite>
            <hen1:NumeroOpportuniteCrm>1122159</hen1:NumeroOpportuniteCrm>
            <hen1:OpportuniteADupliquer>1122158</hen1:OpportuniteADupliquer>
            <hen1:PrenomBeneficiaire>MILAN</hen1:PrenomBeneficiaire>
            <hen1:PrenomCommercial>BCH Test</hen1:PrenomCommercial>
            <hen1:TelephoneFixeSouscripteur/>
            <hen1:TelephonePortableSouscripteur>+33 6 63 44 21 84</hen1:TelephonePortableSouscripteur>
            <hen1:TelephoneserviceCommercial>03 28 76 37 00</hen1:TelephoneserviceCommercial>
            <hen1:VilleServiceCommercial>VILLENEUVE D’ASCQ</hen1:VilleServiceCommercial>
            <hen1:VilleSouscripteur>VILLENEUVE D'ASCQ</hen1:VilleSouscripteur>
        </hen:entree>
    </hen:XyzMethod>
</soap:Body>

:信封>

我曾考虑过使用wsimport技术生成客户端,但是我遇到了一些错误,即这些方法不遵守SOAP 1.2绑定,因此我无法继续使用该技术。

好消息是,请求xml与soapui一起正常工作,我得到了一个满意的答复。但是同一请求通过Java失败。

有关MessageFactory等的一些信息:

MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.soAP_1_2_PROTOCOL);
SOAPMessage soapMessage = messageFactory.createMessage();

静态。呼叫所有汽车人。我是擎天柱,我将此消息发送给所有避难所中的自动驾驶汽车。我们在这儿。我们在等-Optimus Prime Static

任何帮助将不胜感激(2)。如果您需要添加其他信息,请让我知道,以防万一我错过添加内容的情况。

一些参考: Soap calls using Java

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)