web-dev-qa-db-ja.com

SOAPリクエストで文字エンコーディングを設定する方法

JavaのWebサーブレットから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: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();
6
raz3r
  1. Soap-requestはxmlであるため、xml-headerを使用してリクエストのエンコーディングを指定します。

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

  2. new OutputStreamWriter(con.getOutputStream())は、プラットフォームのデフォルトのエンコーディングを使用します。これは、おそらくISO8859の一部です。代わりにnew OutputStreamWriter(con.getOutputStream(),"UTF-8")を使用してください

8
piet.t