如何在SOAP请求中设置字符编码 [英] How to set character encoding in SOAP request

查看:1588
本文介绍了如何在SOAP请求中设置字符编码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从Java中的Web servlet调用SAP SOAP服务。由于某种原因,SAP每次在我的请求的字段中使用特殊字符(如è或à)时都会给我一个错误。 SOAP服务的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:功能: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标头来指定您的请求的编码:



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


  2. new OutputStreamWriter(con.getOutputStream / code>使用平台默认编码,这很可能是ISO8859的一些风味。 使用 new OutputStreamWriter(con.getOutputStream(),UTF-8)

    I am calling a SAP SOAP Service from a web servlet in Java. For some reason SAP is giving me an error every time I use special characters in the fields of my request such as 'è' or 'à'. The WSDL of the SOAP Service is defined in UTF-8 and I have set my character encoding accordingly as you can see below. However I am not sure this is the correct way. Also, notice that if I use SOAP UI (with the same envelope) the request works correctly so it must be something on Java side.

    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. Since a soap-request is xml use the xml-header to specify the encoding of your request:

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

    2. new OutputStreamWriter(con.getOutputStream()) uses the platform-default encoding which most probably is some flavour of ISO8859. Use new OutputStreamWriter(con.getOutputStream(),"UTF-8") instead

    这篇关于如何在SOAP请求中设置字符编码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆