我在Windows上运行的现有java批处理进程写入MQSeries队列。 在v7中工作正常,但使用v8.0.0.3失败。
使用这些jar文件: com.ibm.mq.allclient-8.0.0.3.jar 的javax.jms-API-2.0.1.jar 尝试使用both和allclient jar运行,但反复出现此错误:
Exception in thread "main" java.util.ServiceConfigurationError: java.nio.charset.spi.CharsetProvider: Provider com.ibm.mq.jmqi.CustomCharsetProvider not a subtype
at java.util.ServiceLoader.fail(ServiceLoader.java:239)
at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at java.nio.charset.Charset$1.getNext(Charset.java:352)
at java.nio.charset.Charset$1.hasNext(Charset.java:365)
at java.nio.charset.Charset$2.run(Charset.java:410)
at java.nio.charset.Charset$2.run(Charset.java:407)
at java.security.AccessController.doPrivileged(Native Method)
at java.nio.charset.Charset.lookupViaProviders(Charset.java:406)
at java.nio.charset.Charset.lookup2(Charset.java:477)
at java.nio.charset.Charset.lookup(Charset.java:464)
at java.nio.charset.Charset.forName(Charset.java:528)
at com.ibm.mq.jmqi.system.JmqiCodepage$JmqiCodepageFactory.initializeCodepage(JmqiCodepage.java:194)
at com.ibm.mq.jmqi.system.JmqiCodepage$JmqiCodepageFactory.getByName(JmqiCodepage.java:181)
at com.ibm.mq.jmqi.system.JmqiCodepage.getJmqiCodepage(JmqiCodepage.java:661)
at com.ibm.mq.jmqi.system.JmqiCodepage.getJmqiCodepage(JmqiCodepage.java:637)
at com.ibm.mq.jmqi.JmqiEnvironment.getJmqiCodepage(JmqiEnvironment.java:294)
at com.ibm.mq.jmqi.JmqiEnvironment.lookupDefaultCharset(JmqiEnvironment.java:361)
at com.ibm.mq.jmqi.JmqiEnvironment.<init>(JmqiEnvironment.java:262)
at com.ibm.mq.jmqi.system.JmqiSystemEnvironment.<init>(JmqiSystemEnvironment.java:76)
at com.ibm.mq.jmqi.JmqiFactory.getInstance(JmqiFactory.java:122)
at com.ibm.mq.internal.MQCommonServices.<clinit>(MQCommonServices.java:146)
at com.ibm.mq.MQSESSION.getJmqiEnv(MQSESSION.java:141)
at com.ibm.mq.MQSimpleConnectionManager.<init>(MQSimpleConnectionManager.java:95)
at com.ibm.mq.MQEnvironment.<clinit>(MQEnvironment.java:569)
我的代码调用了MQenvironment
答案 0 :(得分:0)
使用MQClient中嵌入的java版本执行。
答案 1 :(得分:0)
当存在由相同类组成的MQ罐冲突时,通常会发生这种情况。在运行应用程序之前,必须删除不必要的mq jars
答案 2 :(得分:0)
问题在于,对于您配置的CCSID(代码页),无法正确解析charset并使用了CustomCharsetProvider,但它未实现正确的接口,我认为这是IBM bug)。
您有两种方法可以修复它:
在您所在的代码中以MQConstants.CCSID_PROPERTY传递不同的CCSID(例如,放置1208,它是UTF-8) 创建作为HashMap属性传递的MQQueueManager
或在MQ服务器配置中更改CCSID(例如放置1208,它是UTF-8)