当前位置: 首页 > 面试题库 >

如何在SOAP请求中设置字符编码

贝德辉
2023-03-14
问题内容

我正在从Java中的Web servlet调用SAP
SOAP服务。由于某种原因,每次我在请求的字段中使用特殊字符(例如“è”或“à”)时,SAP都会给我一个错误。SOAP
Service的WSDL在UTF-8中定义,我已经相应地设置了字符编码,如下所示。但是我不确定这是正确的方法。另外,请注意,如果我使用SOAP
UI(具有相同的信封),则请求可以正常工作,因此它一定是Java方面的东西。

URL url = new URL(SOAP_URL);
String authorization = Base64Coder.encodeString(SOAP_USERNAME + ":" + SOAP_PASSWORD);
String envelope = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:urn='urn:sap-com:document:sap:soap:functions:mc-style'><soapenv:Header/><soapenv:Body><urn:ZwsMaintainTkt><item>à</item></urn:ZwsMaintainTkt></soapenv:Body></soapenv:Envelope>";
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setReadTimeout(SOAP_TIMEOUT);
con.setRequestMethod("POST");
con.setRequestProperty("Content-type", "text/xml; charset=utf-8");
con.setRequestProperty("SOAPAction", SOAP_ACTION_ZWSMANTAINTKT);
con.setRequestProperty("Authorization", "Basic " + authorization);
con.setDoOutput(true);
con.setDoInput(true);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(con.getOutputStream());
outputStreamWriter.write(envelope);
outputStreamWriter.close();
InputStream inputStream = con.getInputStream();

问题答案:
  1. 由于soap-request是xml,因此请使用xml-header指定请求的编码:

<?xml version="1.0" encoding="UTF-8"?>

  1. new OutputStreamWriter(con.getOutputStream())使用平台默认编码,这很有可能是ISO8859的某种形式。使用new OutputStreamWriter(con.getOutputStream(),"UTF-8")替代


 类似资料:
  • 问题内容: 我的Java Web应用程序有问题。 这是index.jsp中的代码: 当我有线请求时,我的浏览器发送以下标头: Tomcat服务器返回以下信息: 但是,如果我以我的形式发送“é”(UTF-8中的%C3%A9),则会显示“é”。 我了解的是浏览器发送了一个用UTF-8(%C3%A9)编码的“é”。 但是服务器将其解释为ISO-8859-1。因此,%C3解码为Ã,%A9解码为©,然后发

  • 我使用Wiremock服务器模拟响应,并使用JSON格式模拟响应。 这不起作用,因为电子邮件中的“@”未编码。我需要传递“test_user@gmail”才能使请求正常工作。 这里只有一个地方有零钱。但对于其他模拟,请求正文有许多特殊字符**(@,%*\n\s)**。有没有办法在Wiremock中处理编码部分。 另外,有没有办法在url中编码字符串?

  • 问题内容: 我正在使用“带有CSV和SOAP / xml请求的Jmeter”。我的测试在80个数据集中运行,并且CSV中的某些字段对于测试问题必须为空。 我的JMeter构建:-ThreadGroup -CSV数据-SOAP / XML -XPathExtractor-结果 CSV,例如矩阵表,多行和多列。 SOAP / XML 我的问题:当Jmeter替换了变量时: 当某些为空时一切都很好 系统

  • 我正在编写一个Groovy脚本来使用SOAP Web服务。首先,我在SOAP中导入了我的WSDL并创建了一个项目。 那么所有的SOAP请求都会自动生成。 现在我尝试编写一个Groovy来使用生成的SOAP请求调用SOAP服务。 现在这是我的时髦脚本 我想访问在SOAPUI-CreateNote中生成的相同SOAP请求。我如何访问它? 我的实际需求是访问Groovy脚本中的所有SOAP请求——这样我

  • 我必须使用以下WSDL执行SOAP请求验证: http://www.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL 我必须在Postman中为[string]参数化以下post请求。 你能告诉我如何进行参数化吗? 邮寄请求

  • 从我的servlet中,我调用以下方法: 但在Tomcat8.5日志文件(/Tomcat/logs/localhot.yyyy-mm-dd.log)中,我获得了编码错误的文本: 有人知道如何将日志字符集设置为ISO-8859-1吗?