MQSeries错误com.ibm.mq.jmqi.CustomCharsetProvider不是子类型

时间:2017-05-23 15:24:42

标签: ibm-mq

我在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

3 个答案:

答案 0 :(得分:0)

使用MQClient中嵌入的java版本执行。

答案 1 :(得分:0)

当存在由相同类组成的MQ罐冲突时,通常会发生这种情况。在运行应用程序之前,必须删除不必要的mq jars

答案 2 :(得分:0)

问题在于,对于您配置的CCSID(代码页),无法正确解析charset并使用了CustomCharsetProvider,但它未实现正确的接口,我认为这是IBM bug)。

您有两种方法可以修复它:

  1. 在您所在的代码中以MQConstants.CCSID_PROPERTY传递不同的CCSID(例如,放置1208,它是UTF-8) 创建作为HashMap属性传递的MQQueueManager

  2. 或在MQ服务器配置中更改CCSID(例如放置1208,它是UTF-8)