OPENFIRE 지원 EMOJI(OPENFIRE 3.8.1 버전)

2327 단어 openfire

오픈파이어로 XMPP 서버를 구축할 때 클라이언트가 이모티콘 문자를 보내면 연결이 끊깁니다. 오류 로그 부분은 다음과 같습니다.
 
2013.05.21 12:57:44 org.jivesoftware.openfire.nio.ConnectionHandler – Closing connection due to error while 
 
processing message: 여기는
 
이모티콘
java.lang.NumberFormatException: For input string: “?” at 
 
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt
 
(Integer.java:481) at org.jivesoftware.openfire.net.MXParser.more(MXParser.java:384) at 
 
org.jivesoftware.openfire.net.MXParser.nextImpl(MXParser.java:85) at org.xmlpull.mxp1.MXParser.nextToken
 
(MXParser.java:1100) at org.dom4j.io.XMPPPacketReader.parseDocument(XMPPPacketReader.java:317) at 
 
org.dom4j.io.XMPPPacketReader.read(XMPPPacketReader.java:154) at 
 
org.jivesoftware.openfire.net.StanzaHandler.process(StanzaHandler.java:159)
 
볼 수 있습니다. MXParser에 있습니다.자바의 384줄에 문제가 생겼습니다. 여기는 XML의 합법성 검증 코드입니다. 이모티콘 문자의 인코딩은 합법적인 XML 문자 범위에 있지 않기 때문에 여기를 고치면 정상적으로 이모티콘을 받을 수 있습니다.java의 more 함수는 다음과 같이 변경됩니다.
 
@Override
	protected char more() throws IOException, XmlPullParserException {
		final char codePoint = super.more(); // note – this does NOT return a
												// codepoint now, but simply a
												// (single byte) character!
		if ((codePoint == 0x0)
				|| // 0×0 is not allowed, but flash clients insist on sending
					// this as the very first character of a stream. We should
					// stop allowing this codepoint after the first byte has
					// been parsed.
				(codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD)
				|| ((codePoint >= 0x20) && (codePoint <= 0xFFFD))
				|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
				|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF))) {
			return codePoint;
		}
		throw new XmlPullParserException("Illegal XML character: "
				+ Integer.parseInt(codePoint + "", 16));
	}

 
 
 
openfire를 다시 컴파일합니다.jar, 서버의openfire를 교체합니다.jar, 오픈파이어 서비스 다시 시작하면 OK.

좋은 웹페이지 즐겨찾기