使用HttpsUrlConnection的Soap调用使用java提供500

使用HttpsUrlConnection的Soap调用使用java提供500,java,soap,https,soap-client,httpsurlconnection,Java,Soap,Https,Soap Client,Httpsurlconnection,我已经尝试了一个多月,已经阅读了stackoverflow上提供给我的所有内容,但我仍然无法解决这个问题,我需要调用soap Web服务并获得包含url的响应。根据我的不同测试,我得到了一个错误500/400。任何帮助都将不胜感激(1): 客户端代码如下所示: URL oURL = null; HttpsURLConnection con = null; try { // Create SOAP Connection oURL = new

我已经尝试了一个多月,已经阅读了stackoverflow上提供给我的所有内容,但我仍然无法解决这个问题,我需要调用soap Web服务并获得包含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。提供服务的团队无法获取错误日志。他们用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>
静态的。呼叫所有汽车人。我是擎天柱,我向所有在星空中避难的汽车人发送这个信息。我们到了。我们正在等待-擎天柱静态

任何帮助都将不胜感激。请让我知道,如果你需要任何额外的信息,如果我错过了添加一些东西

一些参考资料:

您是否尝试将应用程序发送的序列化消息打印到WS?如果它使用request.xml与SoapUI一起工作,那么发现问题的最佳方法是将request.xml与您通过应用程序发送的内容进行比较。两者完全相同,由java生成的请求是我在soap ui@ImaguestWhat中测试时使用的,服务器端的异常是什么?这必然是发送的两个请求之间的差异。由于您无法从服务器获取日志,在您的情况下,我将尝试嗅探通信(使用Wireshark或您最喜欢的网络嗅探器)并比较它们(SoapUI与Java应用程序)。您将能够看到这两个事务并不相同,并可能找到原因(可能是头、编码等)
MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
SOAPMessage soapMessage = messageFactory.createMessage();