华为短信开发包报错处理-linux

  1. An invalid XML character (Unicode: 0xd863) was found in the element content of the document.错误解决方案

    错误代码如下:

    [Fatal Error] :24:28: An invalid XML character (Unicode: 0xd863) was found in the element content of the document.
    org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0xd863) was found in the element content of the document.
    	at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:249)
    	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
    	at com.huawei.insa2.util.Cfg.load(Cfg.java:666)
    	at com.huawei.insa2.util.Cfg.<init>(Cfg.java:70)
    	at com.huawei.insa2.util.Resource.init(Resource.java:53)
    	at com.huawei.insa2.util.Resource.<init>(Resource.java:41)
    	at com.huawei.insa2.comm.sgip.SGIPConnection.getResource(SGIPConnection.java:157)
    	at com.huawei.insa2.comm.sgip.SGIPConnection.<init>(SGIPConnection.java:58)
    	at com.huawei.smproxy.SGIPSMProxy.connect(SGIPSMProxy.java:61)
    	at net.zoneland.message.sms.ZoneSGIPMTtoSMProxy.SendMessage(ZoneSGIPMTtoSMProxy.java:54)
    	at net.zoneland.message.task.ShortMessageMTTask.run(ShortMessageMTTask.java:35)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    	at java.lang.Thread.run(Thread.java:662)

    在使用华为短信开发包的过程中,总是报上述错误,但是连接发送这些仍然正常,刚开始怀疑是自己的配置文件编码不对,在网上也看到类似的说法,多方设置仍然报错,最后只能通过反编译方式,查到是Resource在加载resource_zh.xml文件的时候报上述错误,经过包里默认的resource_zh.xml文件使用的是gb2312编码,解包,找到com.huawei.insa2.comm.sgip.SGIPConnection(实际代码报错路径)路径下resource_zh.xm文件全部改成utf-8并存为utf-8编码格式,打包更新,重新运行,错误没有了。

    重新上传
    jar包,部署,运行。又报错如下:
    org.xml.sax.SAXParseException: Content is not allowed in prolog
    ============================分割线=================================

  2. org.xml.sax.SAXParseException: Content is not allowed in prolog    错误解决方案
    原因及其解决办法:

    1.xml编码错误

    xmlUTF-8编码的,如果该文件通过UltraEdit编辑后,会在无BOM头的UTF-8文件中加入BOM,但是DOM4j不认这个BOM(dom4j1.3),解决的办法可以通过升级dom4j1.6解决www.dom4j.org 

    什么是BOMhttp://www.unicode.org/faq/utf_bom.html#22Unicode规范中有一个BOM的概念。BOM——Byte Order Mark,就是字节序标记。在这里找到一段关于BOM的说明: 

    UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFEUCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM 

    UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。 

    Windows就是使用BOM来标记文本文件的编码方式的。 

    2.xml文件存在非法字符 

    xml 动手敲一遍,删除不该有的间隔符:比如空格,制表符(TAB)等。 

    异常提示是Content is not allowed in prolog.意思就是说文件开头的时候有问题。 

    怎么去掉BOM 

    首先windows自带的记事本会在保存UTF-8编码的文件时不管是否含有BOM一律加上BOM,所以千万别用记事本。比较新版本的UltraEdit(以下简称UE,大家都是这么叫的)都对BOM支持比较好,所以推荐使用新版本的UE来解决这个问题。我用的版本是UltraEdit-32 11.00a+中文版。首先打开UE,选择菜单栏“高级”-“配置”,出现一个选项卡窗口,在“常规”选项卡中找到“保存时对所有UTF-8文件头标记(BOM)”和“对在UltraEdit里创建的新文件写入UTF-8文件头标记(如上面)”,把它们的复选框都取消不选,然后确定。这个时候UE默认情况下就不会对没有BOM的文件加入BOM,注意如果不执行上述操作UE默认也是会加的!那已经含有BOM的文件如何清除BOM呢?下面演示给大家。首先打开文件,选择菜单栏“文件”-“格式转换”-“UTF-8 ASCII”,这样文件会被转为ASCII编码,BOM就不会存在了,因为上面说过BOM是在UCS编码的头部的,然后再选择菜单栏“文件”-“格式转换”-“ASCII UTF-8Unicode编辑)”,这个时候文件会被转回为UTF-8编码,因为我们上面选了不自动加BOM,所以这个时候的文件是不带BOM的,然后保存文件。整个操作过程就完毕了。  

    参考:

    sax错误:org.xml.sax.SAXParseException: Content is not allowed in prolog解决

    http://blog.sina.com.cn/s/blog_6d5d8b580100txon.html 

    华为短信开发包报错处理一例

    http://blueheart2008.iteye.com/blog/1139142

你可能感兴趣的:(华为短信开发包报错处理-linux)