2015-07-15 1 views
0

У меня есть веб-служба, написанная на Java и развернутая на TomEE plus 1.7.1, и есть проблема с кодировкой запросов, которая заключается в том, что мне приходится обрабатывать запросы с разными кодировками, а точнее ISO-8859-1 и UTF-8. Вот почему мне нужно узнать, какая кодировка имеет входящий запрос. Теперь я трассировку входящее сообщение:Как получить контент-тип и кодирование запроса SOAP программно (в TomEE)?

ID: 1 
Address: http://localhost:8006/services/soaprequest 
Encoding: UTF-8 
Http-Method: POST 
Content-Type: text/xml;charset=UTF-8 
Headers: {accept-encoding=[gzip,deflate], connection=[Keep-Alive], Content-Length=[12915], content-type=[text/xml;charset=UTF-8], host=[localhost:8006], SOAPAction=["http://tempuri.org/soaprequest/soaprequest"], user-agent=[Apache-HttpClient/4.1.1 (java 1.5)]} 
Payload: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://tempuri.org/soaprequest"> 

...XML message goes here... 

</soapenv:Envelope> 

Как видно из следа запроса имеет такие маркеры, как «Кодирование» и «Content-Type» от того, что я могу сделать вывод, в котором кодирующая запрос приходит веб-сервис.

Я попытался SOAPHandler обнаружить его:

public boolean handleMessage(SOAPMessageContext context) { 
    if (!(boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)) { 
     String[] mimeHeader = context.getMessage().getSOAPPart().getMimeHeader("Content-Type"); 
     for (int i = 0; i < mimeHeader.length; i++) 
      System.out.println("mimeHeader " + (i + 1) + ":" + mimeHeader[i]); 
    } 
    return true; //indicates to the context to proceed with (normal)message processing 
} 

Выход был:

mimeHeader 1:text/xml 

Так что, как я не могу это сделать.

В: Как получить кодировку содержимого или кодировку запроса веб-сервиса?

+1

не эти HTTP заголовки, а не SOAP заголовки? –

ответ

1

насчет

Object encProp = context.getMessage().getProperty(SOAPMessage.CHARACTER_SET_ENCODING); 
String encoding = encProp != null ? encProp.toString() : null; 

но мне кажется, что свойство используется в основном для установки кодирования. Поэтому вам нужно попробовать, если свойство заполнено, когда вы получите сообщение.