问题描述
我已经尝试了一个多月,已经在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 (将#修改为@)