Thursday, November 25, 2010

Common error messages for SOAP over JMS using SOA protocol in LoadRunner 11.0

While testing SOAP over JMS using SOA protocol in LoadRunner, you may come across different error messages if you have not configured JMS parameters correctly in LoadRunner. Below are some common error that you may encounter and what could the cause of these error messages.

1: Wrong queue name

Error: Failed to send message ...SOAP details go here...to test.test.test.address.update due to the following exception : javax.naming.NameNotFoundException: Name not found: 'test.test.test.address.update'
javax.naming.NameNotFoundException: Name not found: 'test.test.test.address.update'
at com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:713)
at com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:489)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.mercury.ws.jms.SessionManagerImpl.getQueue(SessionManagerImpl.java:94)
at com.mercury.ws.jms.JMSSupportImpl.sendMessageQueue(JMSSupportImpl.java:96)
at com.mercury.ws.jms.JMSBridge.send_message_queue(JMSBridge.java:43)



2: Incorrect port number for your JNDI provider URL

Error: Failed to set property name JMS_MESSAGE_TYPE value BytesMessage due to the following exception : javax.naming.InvalidNameException: Supplied URL (xxxxx:342434) contains an invalid port number: Invalid port number
javax.naming.InvalidNameException: Supplied URL (xxxxx:342434) contains an invalid port number: Invalid port number
at com.tibco.tibjms.naming.TibjmsNamingEnvUtil._parseURL(TibjmsNamingEnvUtil.java:184)
at com.tibco.tibjms.naming.TibjmsNamingEnvUtil.parseURL(TibjmsNamingEnvUtil.java:263



3: You may get following error message incase you have entered incorrect credentials (username/&password)


Error: Failed to set property name JMS_MESSAGE_TYPE value BytesMessage due to the following exception : javax.naming.AuthenticationException: Not permitted: invalid name or password [Root exception is javax.jms.JMSSecurityException: invalid name or password]
javax.naming.AuthenticationException: Not permitted: invalid name or password [Root exception is javax.jms.JMSSecurityException: invalid name or password]
at com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:668)
at com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:489)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.mercury.ws.jms.ConnectionManagerImpl.initialize(ConnectionManagerImpl.java:99)
...5 more



4: You may get following error message incase you have setup an Incorrect JNDI URL

Error: Failed to set property name JMS_MESSAGE_TYPE value BytesMessage due to the following exception : javax.naming.ServiceUnavailableException: Failed to query JNDI: Failed to connect to the server at tcp://xxxx.xxx.xx:12345 [Root exception is javax.jms.JMSException: Failed to connect to the server at tcp://xxxx.xxx.xx:12345]
javax.naming.ServiceUnavailableException: Failed to query JNDI: Failed to connect to the server at tcp://xxxx.xxx.xx:12345 [Root exception is javax.jms.JMSException: Failed to connect to the server at tcp://xxxx.xxx.xx:12345]
at com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:669)
at com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:489)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
... 5 more



5: You may get following errors incase you haven’t set up ConnectionFactory or it is incorrect.


No ConnectionFactory
Error:Failed to set property name JMS_MESSAGE_TYPE value BytesMessage due to the following exception : java.lang.ClassCastException: com.tibco.tibjms.naming.TibjmsContext
java.lang.ClassCastException: com.tibco.tibjms.naming.TibjmsContext
at com.mercury.ws.jms.ConnectionManagerImpl.initialize(ConnectionManagerImpl.java:109)
at com.mercury.ws.jms.JMSSupportImpl.initialize(JMSSupportImpl.java:28)
at com.mercury.ws.jms.JMSBridge.init_jms(JMSBridge.java:154)


Incorrect ConnectionFactory Name
Error:Failed to set property name JMS_MESSAGE_TYPE value BytesMessage due to the following exception : javax.naming.NameNotFoundException: Name not found: 'xxxxQueueConnectionFactory'
javax.naming.NameNotFoundException: Name not found: 'xxxxQueueConnectionFactory'
at com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:713)
at com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:489)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.mercury.ws.jms.ConnectionManagerImpl.initialize(ConnectionManagerImpl.java:99)
at com.mercury.ws.jms.JMSSupportImpl.initialize(JMSSupportImpl.java:28)
at com.mercury.ws.jms.JMSBridge.init_jms(JMSBridge.java:154)



6: You may get following error message if you have Incorrect Initial Context Factory name (For example, it is expected that you use com.tibco.tibjms.naming.tibjmsinitialcontextfactory but by mistake you selected weblogic.jndi.WLinitialContextFactory from InitialContectFactory dropdown list in LR)

Error: Failed to set property name JMS_MESSAGE_TYPE value BytesMessage due to the following exception : javax.naming.NamingException: Cannot parse url: tibjmsnaming://xxxx.xxx.xx:12345 [Root exception is java.net.MalformedURLException: Not an LDAP URL: tibjmsnaming://xxxx.xxx.xx:12345]
javax.naming.NamingException: Cannot parse url: tibjmsnaming://xxxx.xxx.xx:12345 [Root exception is java.net.MalformedURLException: Not an LDAP URL: tibjmsnaming://xxxx.xxx.xx:12345]
at com.sun.jndi.ldap.LdapURL.(LdapURL.java:77)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:146)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
at javax.naming.InitialContext.init(InitialContext.java:223)
... 11 more



Let me know if you encounter other error messages using LoadRunner or any other tool for SOAP over JMS.

4 comments:

koder said...

Hello

A well described blog, excellent work - am getting one of the error you have indicated

Action.c(29): Error: Failed to set property name JMS_MESSAGE_TYPE value TextMessage due to the following exception : javax.naming.ServiceUnavailableException: Failed to query JNDI: Failed to connect to the server at tcp://lu201a001v.au.oceania.intranet:4222 [Root exception is javax.jms.JMSException: Failed to connect to the server at tcp://lu201a001v.au.oceania.intranet:4222]
javax.naming.ServiceUnavailableException: Failed to query JNDI: Failed to connect to the server at tcp://lu201a001v.au.oceania.intranet:4222 [Root exception is javax.jms.JMSException: Failed to connect to the server at tcp://lu201a001v.au.oceania.intranet:4222]
at com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:669)
at com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:489)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.mercury.ws.jms.ConnectionManagerImpl.initialize(ConnectionManagerImpl.java:99)
at com.mercury.ws.jms.JMSSupportImpl.initialize(JMSSupportImpl.java:28)
at com.mercury.ws.jms.JMSBridge.init_jms(JMSBridge.java:154)
Caused by: javax.jms.JMSException: Failed to connect to the server at tcp://lu201a001v.au.oceania.intranet:4222
at com.tibco.tibjms.TibjmsxLinkTcp._createSocket(TibjmsxLinkTcp.java:817)
at com.tibco.tibjms.TibjmsxLinkTcp.connect(TibjmsxLinkTcp.java:913)
at com.tibco.tibjms.TibjmsConnection._create(TibjmsConnection.java:1002)
at com.tibco.tibjms.TibjmsConnection.(TibjmsConnection.java:2707)
at com.tibco.tibjms.TibjmsQueueConnection.(TibjmsQueueConnection.java:36)
at com.tibco.tibjms.TibjmsxCFImpl._createImpl(TibjmsxCFImpl.java:186)
at com.tibco.tibjms.TibjmsxCFImpl._createConnection(TibjmsxCFImpl.java:239)
at com.tibco.tibjms.TibjmsQueueConnectionFactory.createQueueConnection(TibjmsQueueConnectionFactory.java:87)
at com.tibco.tibjms.naming.TibjmsContext$Messenger.request(TibjmsContext.java:325)
at com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:655)
... 5 more
Action.c(29): Error: JMS call execution failed - my e-mail is jyothismj@gmail.com

If you have a resolution to the above kindly let me know

Thanks
Jyothis

Harinder Seera said...

Answer to your question is in your comment(look at the stack trace).

koder said...

Hello Harinder

That piece of script was working fine and we were able to send messages to JMS successfully.How ever since i had to use CONTROLLER and LG in another subnet we mooved the script to another machine which is on another net work .The firewall and port is opened to acces the server and my telnet is success

How ever in the run time settings if i give the tcp://myserver:portnm it will fail WITH following exception : javax.naming.ServiceUnavailableException: Failed to query JNDI: Failed to connect to the server at tcp://myserver:portnm[Root exception is javax.jms.JMSException: Failed to connect to the server at tcp://myserver:portnm]

if i provide the FQDN url like tcp://FQDN:portnm the JNDI query step will be successfull .How ever it will fail again at a step javax.jms.JMSException: Failed to connect to the server at tcp://myserver:portnm .which means from some were it is taking just server name but not FQDN .My question is is there a way to force the server to use the FQDN through our script.If not is there a setting at server side we need to look at to solve this , i would assume it would be in connection factory setting but dev is very reluctant on that

koder said...

Am trying to performance test a TIBOC based Message queue sitting on an EMS server using load runner(9.5) performance test tool set

i was able to create client test this successfully from the same subnet machine (the subnet The server which host the EMS / Queues are sitting in an another environment ) , how ever since our LG/Controllers are in different net work we had to get it working on a machine in that network , we had set up the script in that net work and fire wall is opened and telnet and ping does work well


If i use tcp://hostname:4222 it throws below error

Failed to set property name JMS_MESSAGE_TYPE value TextMessage due to the following exception : javax.naming.ServiceUnavailableException: Failed to query JNDI: Failed to connect to the server at tcp://hostname:4222 [Root exception is javax.jms.JMSException:
Failed to connect to the server at tcp://hostname:4222]

If i use a FQDN tcp://hostname.FQDN :4222 it passes through the above step
but i get
following exception : javax.jms.JMSException: Failed to connect to the server at tcp://hostname.FQDN :4222
javax.jms.JMSException: Failed to connect to the server at tcp://hostname.FQDN :4222

I also observed that regardless of what ever whether it is FQDN or hostname i set up in run time setings the JMS is taking the tcp://hostname:4222 and i assume it is due to the fact that it would have hard coded in connection factory settings

My question is is there a way to by pass that above said connection factory settings to force the JMS to use the FQDN ?

Thank You
Jyothis