可执行Jar:JMSCC0091:无法加载连接类型'com.ibm.msg.client.wmq'的提供程序工厂 [英] Executable Jar: JMSCC0091: The provider factory for connection type 'com.ibm.msg.client.wmq' could not be loaded

查看:100
本文介绍了可执行Jar:JMSCC0091:无法加载连接类型'com.ibm.msg.client.wmq'的提供程序工厂的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在使用JMSTemplate连接到IBM Websphere MQ时遇到了这个非常奇怪的问题.代码在Eclipse中运行得很好,但是当我使用阴影插件将项目和所有依赖项打包到Uber jar中时,执行jar文件时出现此错误:

I encountered this very weird problem while working on using JMSTemplate to connect to IBM Websphere MQ. The code runs perfectly fine in Eclipse, but when I use shade plugin to package the project and all the dependencies into an Uber jar, I got this error while executing the jar file:

com.ibm.msg.client.jms.DetailedJMSException: JMSCC0091: The provider factory for  connection type 'com.ibm.msg.client.wmq' could not be loaded.
        at sun.reflect.GeneratedConstructorAccessor4.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:57)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:437)
        at com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:319)
        at com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:233)
        at com.ibm.msg.client.jms.internal.JmsErrorUtils.createException(JmsErrorUtils.java:109)
        at com.ibm.msg.client.jms.internal.JmsFactoryFactoryImpl.getInstance(JmsFactoryFactoryImpl.java:172)
        at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.setProviderFactory(JmsConnectionFactoryImpl.java:167)
        at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:254)
        at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6215)
        at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:120)

这是与我有关的Java代码,以InputStream读取密钥库和信任库文件,并且在调用方法 createQueueConnection 时发生了错误.

Here is my relevant Java code to read the keystore and truststore file as InputStream and the error happened when the method createQueueConnection was called.

InputStream keystoreInput = Thread.currentThread().getContextClassLoader().getResourceAsStream(keystoreFile);
InputStream truststoreInput = Thread.currentThread().getContextClassLoader().getResourceAsStream(trustStoreFile);
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
char[] keyPassword = keystorePassword.toCharArray();
keyStore.load(keystoreInput, keyPassword);

KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyFactory.init(keyStore, keyPassword);

KeyManager[] keyManagers = keyFactory.getKeyManagers();
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());

char[] trustPassword = trustStorePassword.toCharArray();
trustStore.load(truststoreInput, trustPassword);

TrustManagerFactory trustFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustFactory.init(trustStore);

TrustManager[] trustManagers = trustFactory.getTrustManagers();
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(keyManagers, trustManagers, null);
SSLContext.setDefault(sslContext);

MQQueueConnectionFactory cf = ctx.getBean("mqIdsConnectionFactory", MQQueueConnectionFactory.class);
cf.setSSLSocketFactory((SSLSocketFactory) SSLSocketFactory.getDefault());
MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();

我检查了我的xml文件,并且正确包含了所有IBM MQ依赖关系,我也可以在uber jar中找到类文件.过去几天一直困扰着我,如果有人知道如何解决它,我将非常感谢您的投入和建议.

I checked my xml file and all the IBM MQ dependencies are included correctly, and I can find the class files in the uber jar as well. It has been bothering me in the past few days and if anybody knows how to fix it, I would really appreciate your input and suggestions.

<dependency>
<groupId>com.ibm</groupId>
    <artifactId>com.ibm.mq</artifactId>
    <version>7.5.0</version>
</dependency>
<dependency>
    <groupId>com.ibm</groupId>
    <artifactId>com.ibm.mqjms</artifactId>
    <version>7.5.0</version>
</dependency>
<dependency>
    <groupId>com.ibm</groupId>
    <artifactId>com.ibm.mq.headers</artifactId>
    <version>7.5.0</version>
</dependency>
<dependency>
    <groupId>com.ibm</groupId>
    <artifactId>com.ibm.mq.jmqi</artifactId>
    <version>7.5.0</version>
</dependency>        
<dependency>
    <groupId>com.ibm</groupId>
    <artifactId>dhbcore</artifactId>
    <version>7.5.0</version>
</dependency>
<dependency>
    <groupId>com.ibm.jsse2</groupId>
    <artifactId>ibmjsseprovider2</artifactId>
    <version>7.5.0</version>
</dependency>
<dependency>
    <groupId>com.ibm.security</groupId>
    <artifactId>ibmjcefw</artifactId>
    <version>7.5.0</version>
</dependency>
<dependency>
    <groupId>com.ibm.crypto</groupId>
    <artifactId>ibmjceprovider</artifactId>
    <version>7.5.0</version>
</dependency>
<dependency>
    <groupId>com.ibm.security</groupId>
    <artifactId>ibmcertpathprovider</artifactId>
    <version>7.5.0</version>
</dependency>
<dependency>
    <groupId>com.ibm.security</groupId>
    <artifactId>ibmpkcs</artifactId>
    <version>7.5.0</version>
</dependency>
<dependency>
    <groupId>com.ibm</groupId>
    <artifactId>connector</artifactId>
    <version>7.5.0</version>
</dependency>

推荐答案

请确保不要将jar中的依赖项提取出来,而应按照注释中的说明进行添加.如果从eclipse中导出,则有一个单选选项可供选择.

Make sure to not extract the dependencies inside the jar but just include them as stated in the comments. If you export from within eclipse, there is a radio option to choose from.

这篇关于可执行Jar:JMSCC0091:无法加载连接类型'com.ibm.msg.client.wmq'的提供程序工厂的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆