7 Replies Latest reply: Jul 4, 2013 3:13 AM by nuwan.wp wickramanayaka RSS

Spring JMS error with JBoss 7.1.1-Final

Marcio B. Newbie

Hello!

I am trying to configure a JMS Listener with Spring 3.1 in JBoss 7.1.1-Final.

But this exception is thrown:

 

21:05:20,184 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-12) MSC00001: Failed to start service jboss.deployment.unit."jms-receiver.war".PARSE: org.jboss.msc.service.StartException in service jboss.deployment.unit."jms-receiver.war".PARSE: Failed to process phase PARSE of deployment "jms-receiver.war"

          at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]

          at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]

          at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]

          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_03]

          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_03]

          at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_03]

Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011666: Could not parse file C:\jboss-as-7.1.1.Final\standalone\tmp\vfs\temp22a1673201a833b9\jms-receiver.war-1a83767da3f83ba\WEB-INF\spring-jms.xml

          at org.jboss.as.messaging.deployment.MessagingXmlParsingDeploymentUnitProcessor.deploy(MessagingXmlParsingDeploymentUnitProcessor.java:76)

          at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]

          ... 5 more

Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011666: Could not parse file C:\jboss-as-7.1.1.Final\standalone\tmp\vfs\temp22a1673201a833b9\jms-receiver.war-1a83767da3f83ba\WEB-INF\spring-jms.xml

          at org.jboss.as.messaging.deployment.MessagingXmlParsingDeploymentUnitProcessor.deploy(MessagingXmlParsingDeploymentUnitProcessor.java:73)

          ... 6 more

Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[2,1]

Message: Unexpected element '{http://www.springframework.org/schema/beans}beans'

          at org.jboss.staxmapper.XMLMapperImpl.processNested(XMLMapperImpl.java:108) [staxmapper-1.1.0.Final.jar:1.1.0.Final]

          at org.jboss.staxmapper.XMLMapperImpl.parseDocument(XMLMapperImpl.java:69) [staxmapper-1.1.0.Final.jar:1.1.0.Final]

          at org.jboss.as.messaging.deployment.MessagingXmlParsingDeploymentUnitProcessor.deploy(MessagingXmlParsingDeploymentUnitProcessor.java:67)

          ... 6 more

 

 

21:05:20,198 INFO  [org.jboss.as.server] (management-handler-thread - 2) JBAS015870: Deploy of deployment "jms-receiver.war" was rolled back with failure message {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"jms-receiver.war\".PARSE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"jms-receiver.war\".PARSE: Failed to process phase PARSE of deployment \"jms-receiver.war\""}}

21:05:20,351 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-11) JBAS015877: Stopped deployment jms-receiver.war in 153ms

21:05:20,352 INFO  [org.jboss.as.controller] (management-handler-thread - 2) JBAS014774: Service status report

JBAS014777:   Services which failed to start:      service jboss.deployment.unit."jms-receiver.war".PARSE: org.jboss.msc.service.StartException in service jboss.deployment.unit."jms-receiver.war".PARSE: Failed to process phase PARSE of deployment "jms-receiver.war"

 

 

File spring-jms.xml:

 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

 

 

    <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">

        <property name="environment">

            <props>

                <prop key="java.naming.factory.initial">org.jboss.naming.remote.client.InitialContextFactory</prop>

                <prop key="java.naming.provider.url">remote://localhost:4447</prop>

                <prop key="java.naming.security.principal">user</prop>

                <prop key="java.naming.security.credentials">pass</prop>

            </props>

        </property>

    </bean>

 

 

    <bean id="queueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">

        <property name="jndiName" value="jms/RemoteConnectionFactory"/>

        <property name="jndiTemplate" ref="jndiTemplate"/>

    </bean>

 

 

    <bean id="secureConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">

        <property name="targetConnectionFactory" ref="queueConnectionFactory"/>

        <property name="username" value="user"/>

        <property name="password" value="pass"/>

    </bean>

 

 

    <bean id="queueName" class="org.springframework.jndi.JndiObjectFactoryBean">

        <property name="jndiName" value="jms/queue/test"/>

        <property name="jndiTemplate" ref="jndiTemplate"/>

    </bean>

 

 

    <bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">

        <constructor-arg>

            <bean class="com.tecnoil.consumer.jms.JMSConsumer"/>

        </constructor-arg>

        <property name="messageConverter">

            <null/>

        </property>

    </bean>

 

 

    <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">

        <property name="connectionFactory" ref="secureConnectionFactory"/>

        <property name="destination" ref="queueName"/>

        <property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE"/>

        <property name="messageListener" ref="messageListener"/>

        <property name="receiveTimeout" value="1000"/>

    </bean>

</beans>

 

What is the solution?

  • 1. Re: Spring JMS error with JBoss 7.1.1-Final
    Maqsood Shahzad Newbie

    Hi,

     

    I am facing the same problem on AS 7.1.1. Any help would be greatly appreciated.

  • 2. Re: Spring JMS error with JBoss 7.1.1-Final
    Marcio B. Newbie

    Unfortunately I didn't get to resolve it with XML configuration. It was necessary to configure the JMS via programmatic configuration instead of XML configuration.

  • 3. Re: Spring JMS error with JBoss 7.1.1-Final
    Maqsood Shahzad Newbie

    Would appreciate if you could share your solution.

     

    Thanks

  • 4. Re: Spring JMS error with JBoss 7.1.1-Final
    Marcio B. Newbie

    Sorry, but I don't have the source with me.

     

    Look here some examples, but unfortunately nat are about JMS:

    http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-java-instantiating-container-register

    http://mballem.wordpress.com/2012/11/01/spring-framework-3-100-livre-de-configuracao-por-xml/

     

    You will need to follow this model of configuration, however it of course, for configuring JMS. Use the classes of jms beans from your XML to create your beans programmatically.

     

    Sorry by my english, I am still learning .

  • 5. Re: Spring JMS error with JBoss 7.1.1-Final
    Alain Brazeau Newbie

    This is a simple problem to resolve.  Just rename the problematic Spring XML file so that it doesn't end with "-jms.xml".

     

    I examined some of the JBoss source code and noticed that it attempts to parse any "*-jms.xml" file.

  • 6. Re: Spring JMS error with JBoss 7.1.1-Final
    Marcio B. Newbie

    When I had problems, I tried to do that and not resolved. The problem seems to be in the XML tags.

  • 7. Re: Spring JMS error with JBoss 7.1.1-Final
    nuwan.wp wickramanayaka Newbie

    message-queue-config.spring.xml

    -------------------------------

     

     

    <!-- Jndi properies for accessing Jboss 7.1 Hornet Queue -->

     

     

              <bean id="jnditemplate" class="org.springframework.jndi.JndiTemplate">

                        <property name="environment">

                                  <props>

                                            <prop key="java.naming.factory.initial">org.jboss.naming.remote.client.InitialContextFactory

                                            </prop>

                                            <prop key="java.naming.provider.url">remote://${sampleweb.server.ip}:4447</prop>

                                            <prop key="java.naming.security.principal">uanmcts</prop>

                                            <prop key="java.naming.security.credentials">password</prop>

                                  </props>

                        </property>

              </bean>

     

     

              <!-- Jms connection configurations -->

     

     

              <bean id="connectionfactory" class="org.springframework.jndi.JndiObjectFactoryBean">

                        <property name="jndiTemplate" ref="jnditemplate" />

                        <property name="jndiName" value="jms/RemoteConnectionFactory" />

              </bean>

     

     

              <!-- Jms queue configurations -->

     

     

              <bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">

                        <property name="jndiTemplate" ref="jnditemplate" />

                        <property name="jndiName" value="jms/queue/mail" />

              </bean>

     

     

              <!-- Credentials for accessing jboss queue -->

     

     

              <bean id="credentialsconnectionfactory"

                        class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">

                        <property name="targetConnectionFactory" ref="connectionfactory" />

                        <property name="username" value="uanmcts" />

                        <property name="password" value="password" />

              </bean>

     

     

              <bean id="cachingConnectionFactory"

                        class="org.springframework.jms.connection.CachingConnectionFactory">

                        <property name="targetConnectionFactory" ref="connectionfactory" />

                        <property name="sessionCacheSize" value="1" />

              </bean>

     

     

              <!-- Jms template configurations -->

     

     

              <bean id="jmstemplate" class="org.springframework.jms.core.JmsTemplate">

                        <property name="connectionFactory" ref="cachingConnectionFactory" />

                        <property name="defaultDestination" ref="destination" />

              </bean>

     

              <bean id="messageService"

                        class="com.jkcs.uanmcts.core.messaging.service.impl.EmailMessageServiceImpl">

                        <property name="jmsTemplate" ref="jmstemplate" />

              </bean>

     

     

              <!-- Jms message Listner configurations -->

     

     

              <bean

                        class="org.springframework.jms.listener.DefaultMessageListenerContainer">

                        <property name="connectionFactory" ref="credentialsconnectionfactory" />

                        <property name="destination" ref="destination" />

                        <property name="messageListener" ref="messageService" />

                        <property name="autoStartup" value="true" />

                        <property name="concurrentConsumers" value="5" />

                        <property name="maxConcurrentConsumers" value="10" />

              </bean>

     

     

    Refer bean 'messageService'

    ----------------------------

     

     

    @InternalService

    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)

    public class EmailMessageServiceImpl implements EmailMessageService {

     

     

              private static final Log LOG = LogFactory

                                  .getLog(EmailMessageServiceImpl.class);

     

     

              @Autowired

              private JmsTemplate jmsTemplate;

     

              @Autowired

              JKCSMailSender emailSender;

     

              @Override

              public Boolean sendEmailToQueue(final TemplatedEmailDTO messageDto)

                                  throws FrameworkServiceException {

     

                        Boolean isEmailSent = false;

                        LOG.info("Trying to send email message on queue.");

     

                        try {

     

                                  getJmsTemplate().send(new MessageCreator() {

                                            public Message createMessage(Session session) throws JMSException {

     

                                                      ObjectMessage objectMessage = session.createObjectMessage(messageDto);

                                                      objectMessage.setJMSRedelivered(false);

                                                      objectMessage.setJMSExpiration(0); /*Value of 0 indicates that a message will never expire*/

                                                      return objectMessage;

                                            }

                                  });

                                  isEmailSent = true;

                        LOG.info("Email message has been successfully sent to the queue.");

     

     

                        } catch (Exception e) {

                                  isEmailSent = false;

                                  LOG.info("Email message failed while sending to the queue.");

                        }

     

                        return isEmailSent;

     

              }

              @Override

              public void onMessage(Message message) {

     

                        LOG.info("Email message received from queue [" + message +"]"); 

                        try {

     

                                  if(message!=null)

                                  {

                                            message.acknowledge();

     

                                            if (message instanceof ObjectMessage) {

     

                                                      ObjectMessage objectMessage = (ObjectMessage) message;

                                                      TemplatedEmailDTO emailDto = (TemplatedEmailDTO) objectMessage.getObject();

                                                      emailSender.send(emailDto);

                                                      LOG.info("Email message has been successfully sent."); 

                                            }

                                  }

                                  else

                                  {

                                            LOG.info("Null email message received.");

                                  }

                        } catch (JMSException jmsEx_p) {

                                   String errMsg = "An error occurred extracting message"; 

                                   LOG.error(errMsg, jmsEx_p); 

                                  throw new FrameworkServiceException();

                        }

     

              }

     

     

              public JmsTemplate getJmsTemplate() {

                        return jmsTemplate;

              }

     

     

              public void setJmsTemplate(JmsTemplate jmsTemplate) {

                        this.jmsTemplate = jmsTemplate;

              }

     

     

    }