我有一个用Java编写并部署在TomEE plus 1.7.1上的Web服务,并且存在一个与请求编码有关的问题,即我必须处理具有不同编码的请求,更具体地说是ISO-8859-1
和{ {1}}。这就是我需要识别传入请求具有哪种编码的原因。
现在,我正在追踪收到的消息:
UTF-8
从跟踪中可以看出,请求具有诸如"编码"和"内容类型"从我可以得出的结论来看,请求的编码来自web服务。
我尝试使用SOAPHandler来检测它:
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>
输出结果为:
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
}
所以我不能这样做。
问:如何检索内容类型字符集或网络服务请求的编码?
答案 0 :(得分:1)
怎么样?
Object encProp = context.getMessage().getProperty(SOAPMessage.CHARACTER_SET_ENCODING);
String encoding = encProp != null ? encProp.toString() : null;
但似乎该属性主要用于设置编码。因此,当您接收消息时,您需要尝试填充该属性。
答案 1 :(得分:0)
此问题已得到解决。解决方案在这里找到: