You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot连接IBM MQ时JMS消息转换报错求助

Spring Boot 3连接IBM MQ发送消息报错:UnknownFormatConversionException

环境信息

  • JAVA 20
  • IBM WebSphere MQ Explorer版本:7.5.0.2
  • Spring Boot 3.0.5

依赖配置

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
    <dependency>
        <groupId>com.ibm.mq</groupId>
        <artifactId>mq-jms-spring-boot-starter</artifactId>
        <version>3.0.3</version>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.4</version>
    </dependency>
    <dependency>
        <groupId>javax.jms</groupId>
        <artifactId>javax.jms-api</artifactId>
        <version>2.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jms</artifactId>
        <version>6.0.6</version>
    </dependency>
    <dependency>
        <groupId>com.ibm.mq</groupId>
        <artifactId>wmq.jmsra</artifactId>
        <version>9.0.4.0</version>
    </dependency>
</dependencies>

Controller代码

@RestController
@EnableJms
@RequestMapping("/test/")
public class IBMController {

    @Value("${ibm.mq.host}")
    private String host;
    @Value("${ibm.mq.port}")
    private Integer port;
    @Value("${ibm.mq.queueManager}")
    private String queueManager;
    @Value("${ibm.mq.channel}")
    private String channel;
    @Value("${ibm.mq.receiveTimeout}")
    private long receiveTimeout;
    @Value("${ibm.mq.username}")
    private String user;
    @Value("${ibm.mq.password}")
    private String password;

    @Autowired
    private JmsTemplate jmsTemplate;
    @RequestMapping("send")
    public String sendMsg(){
        String msg = "tst";
        try{
            jmsTemplate.convertAndSend("localQ",msg);
            return "OK";
        }catch (JmsException e ) {
            e.printStackTrace();
            return "FAIL";
        }
    }
}

配置Bean

连接工厂配置1

@Bean
public MQQueueConnectionFactory mqQueueConnectionFactory(){
    MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();
    try{
        mqQueueConnectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
        mqQueueConnectionFactory.setCCSID(1208);
        mqQueueConnectionFactory.setChannel(channel);
        mqQueueConnectionFactory.setPort(port);
        mqQueueConnectionFactory.setQueueManager(queueManager);

    }catch (Exception e){
        e.printStackTrace();
    }
    return mqQueueConnectionFactory;
}

JMS模板配置

@Bean
public JmsTemplate jmsTemplate() throws JMSException {
    JmsTemplate jmsTemplate = new JmsTemplate();
    jmsTemplate.setConnectionFactory(mqQueueConnectionFactory());
    return jmsTemplate;
}

连接工厂配置2(尝试过的另一种方案)

@Bean
public JmsConnectionFactory createConnectionFactory() throws JMSException{
    JmsFactoryFactory ff = JmsFactoryFactory.getInstance( JmsConstants.JAKARTA_WMQ_PROVIDER );
    JmsConnectionFactory factory = ff.createConnectionFactory();
    factory.setObjectProperty( WMQConstants.WMQ_CONNECTION_MODE, Integer.valueOf( WMQConstants.WMQ_CM_CLIENT ) );
    factory.setStringProperty( WMQConstants.WMQ_HOST_NAME, host );
    factory.setObjectProperty( WMQConstants.WMQ_PORT, port );
    factory.setStringProperty( WMQConstants.WMQ_QUEUE_MANAGER, queueManager );
    factory.setStringProperty( WMQConstants.WMQ_CHANNEL, channel );
    factory.setStringProperty( WMQConstants.USERID, user );
    factory.setStringProperty( WMQConstants.PASSWORD, password );
    return factory;
}

报错信息

java.util.UnknownFormatConversionException: Conversion = '-' 
    at java.base/java.util.Formatter.parse(Formatter.java:2842)
    at java.base/java.util.Formatter.format(Formatter.java:2763)
    at java.base/java.util.Formatter.format(Formatter.java:2717)
    at java.base/java.lang.String.format(String.java:4155)
    at com.ibm.mq.jmqi.system.JmqiConnectOptions.nullToSpace(JmqiConnectOptions.java:564)
    at com.ibm.mq.jmqi.system.JmqiConnectOptions.setReceiveExitsUserData(JmqiConnectOptions.java:560)
    at com.ibm.msg.client.jakarta.wmq.internal.WMQConnection.getConnectOptions(WMQConnection.java:1528)
    at com.ibm.msg.client.jakarta.wmq.internal.WMQConnection.<init>(WMQConnection.java:388)
    at com.ibm.msg.client.jakarta.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:8683)
    at com.ibm.msg.client.jakarta.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:8023)
    at com.ibm.msg.client.jakarta.jms.admin.JmsConnectionFactoryImpl._createConnection(JmsConnectionFactoryImpl.java:322)
    at com.ibm.msg.client.jakarta.jms.admin.JmsConnectionFactoryImpl.createContext(JmsConnectionFactoryImpl.java:481)

内容的提问来源于stack exchange,提问作者Moksi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:27:02