当前位置: 代码迷 >> Java Web开发 >> 短信接口乱码有关问题,求大神指点
  详细解决方案

短信接口乱码有关问题,求大神指点

热度:101   发布时间:2016-04-16 22:16:10.0
短信接口乱码问题,求大神指点

package com.clinet.task;

import java.util.List;

import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import com.clinet.UCPClient;
import com.clinet.UCPClinetFactory;
import com.clinet.base.Constants;
import com.clinet.bean.ReveiceMessage;
import com.clinet.service.ReveiceMessageService;

public class ReveiceMessageTask {
private ReveiceMessageService reveiceMessageService;

private static final String USER_NAME = "12345UserTest";

private static final String PASSWORD = "U1s2e3r4T5est";

private static final Logger logger = Logger
.getLogger(ReveiceMessageTask.class);

/**
 * @param reveiceMessageService the reveiceMessageService to set
 */
public void setReveiceMessageService(ReveiceMessageService reveiceMessageService) {
this.reveiceMessageService = reveiceMessageService;
}

public synchronized void execute() {
logger.info("开始执行程序.");
UCPClinetFactory factory = new UCPClinetFactory();
UCPClient client = factory.getUCPClient();
receiveSMS(client);
}

private void receiveSMS(UCPClient client) {
try {
String sessionId = client.login(USER_NAME, PASSWORD);
byte[] bytes = client.receiveSMS(sessionId);
if (bytes != null) {
String message = new String(bytes, "UTF-8");
logger.info("接收到的短信 [" + message + "]");

message = filterText(message);

Document document = DocumentHelper.parseText(message);
List<Element> elements = document.getRootElement().elements(
Constants.ELEMENT_NAME_SMSMSGRECEIVE);
for (Element element : elements) {
ReveiceMessage msg = new ReveiceMessage();
msg.setMsgId(element.elementText(Constants.ELEMENT_NAME_MSGID));
msg.setDesttermId(element.elementText(Constants.ELEMENT_NAME_DESTTERMID));
msg.setSrctermId(element.elementText(Constants.ELEMENT_NAME_SRCTERMID));
msg.setMsgContent(element.elementText(Constants.ELEMENT_NAME_MSGCONTENT));
msg.setRecvTime(element.elementText(Constants.ELEMENT_NAME_RECVTIME));
msg.setReveiceId(USER_NAME);
reveiceMessageService.insertReveiceMessage(msg);
}
}
logger.info("结束执行.");
} catch (Exception e) {
e.printStackTrace();
logger.error("", e);
}
}

char [] chars = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5};

private String filterText(String message) {
for (int i = 0; i < chars.length; i++) {
message = message.replaceAll(String.valueOf(chars[i]), "");
}
return message;
}
}



抛错:
Nested exception:
org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x5) was found
 in the element content of the document.
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAX
ParseException(ErrorHandlerWrapper.java:195)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalErro
r(ErrorHandlerWrapper.java:174)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(
XMLErrorReporter.java:388)
        at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(X
MLScanner.java:1427)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2895)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(X
MLDocumentScannerImpl.java:647)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next
(XMLNSDocumentScannerImpl.java:140)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X
ML11Configuration.java:808)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X
ML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.
java:119)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Ab
stractSAXParser.java:1205)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.p
arse(SAXParserImpl.java:522)
  相关解决方案