最近公司准备用开发一个短信功能,用华为的包去连接短信网关。但是在一切配好后,居然报错,但是又连接上了模拟网关。这问题就“妖”了······
下面是错误信息:
[quote]
[Fatal Error] :24:26: 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:239)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
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.cmpp.CMPPConnection.getResource(CMPPConnection.java:103)
at com.huawei.insa2.comm.cmpp.CMPPConnection.<init>(CMPPConnection.java:39)
at com.huawei.smproxy.SMProxy.<init>(SMProxy.java:34)
at com.newcosoft.lsmp.communication.sms.cmpp.service.SmsCmppProxy.<init>(SmsCmppProxy.java:73)
at com.newcosoft.lsmp.communication.sms.cmpp.service.CmppSendHandler.<init>(CmppSendHandler.java:44)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.newcosoft.lsmp.communication.message.pool.PoolDispatcher.<init>(PoolDispatcher.java:62)
at com.newcosoft.lsmp.communication.sms.cmpp.CmppProxyService.<init>(CmppProxyService.java:51)
at com.newcosoft.lsmp.communication.sms.test.CmppProxyTest.testSendMsg(CmppProxyTest.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
[/quote]
这个问题我找了两天,去网上也查了资料。也知道是字符编码集的问题,但是就是没解决。最后找同事来看看,拿之前的短信项目做对比,发现原来是执行文件的编码集也要改掉。因为华为的CmppProxy是用GB2312的编译环境编译的,所以无论我怎么去改XML的编码集都不行,哎~~又长见识了·····
下面是错误信息:
[quote]
[Fatal Error] :24:26: 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:239)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
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.cmpp.CMPPConnection.getResource(CMPPConnection.java:103)
at com.huawei.insa2.comm.cmpp.CMPPConnection.<init>(CMPPConnection.java:39)
at com.huawei.smproxy.SMProxy.<init>(SMProxy.java:34)
at com.newcosoft.lsmp.communication.sms.cmpp.service.SmsCmppProxy.<init>(SmsCmppProxy.java:73)
at com.newcosoft.lsmp.communication.sms.cmpp.service.CmppSendHandler.<init>(CmppSendHandler.java:44)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.newcosoft.lsmp.communication.message.pool.PoolDispatcher.<init>(PoolDispatcher.java:62)
at com.newcosoft.lsmp.communication.sms.cmpp.CmppProxyService.<init>(CmppProxyService.java:51)
at com.newcosoft.lsmp.communication.sms.test.CmppProxyTest.testSendMsg(CmppProxyTest.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
[/quote]
这个问题我找了两天,去网上也查了资料。也知道是字符编码集的问题,但是就是没解决。最后找同事来看看,拿之前的短信项目做对比,发现原来是执行文件的编码集也要改掉。因为华为的CmppProxy是用GB2312的编译环境编译的,所以无论我怎么去改XML的编码集都不行,哎~~又长见识了·····