SOA / Web Services / Java

A Technology Blog

2013 in review

Posted by Vivek on January 7, 2014

The stats helper monkeys prepared a 2013 annual report for this blog.

Here’s an excerpt:

The concert hall at the Sydney Opera House holds 2,700 people. This blog was viewed about 8,400 times in 2013. If it were a concert at Sydney Opera House, it would take about 3 sold-out performances for that many people to see it.

Click here to see the complete report.

Posted in SOA | Leave a Comment »

Certifications for EAI/ SOA Professionls

Posted by Vivek on March 9, 2013

In this post, I am trying to list down all industry certifications that are applicable to those who are working on SOA, Integration Architecture, EAI or Web Services. Some of these certifications are vendor specific.


TIBCO Active Matrix BusinessWorks

TIBCO-Business Works



WebMethods  Certified Integration Developer

WebMethods  Certified BPMS Developer

B2B Vx Certified Developer

Platform certification in webMethods Fabric Vx ; WebMethods developer



PRPC System Architect Vx

Certified Senior System Architect(CSSA)


Certified Business Archtect

Pega Certified Customer Process Manager



XML 1.1 and Related Technologies

WebSphere Message Broker Vx System Administration

IBM WebSphere Integration Developer Vx Solution Development

IBM WebSphere MQ Vx Administration

IBM WMB Vx Solution Developer

IBM Websphere Process Server Vx, Integration Developer

IBM WebSphere Business Monitor Vx, Solution Developer

IBM WebSphere Integration Developer Vx Application Developmer

IBM WebSphere Transformation Extender Vx Application Developer

IBM Certified SOA Associate

IBM WebSphere MQ Vx Solution Design Certification

Websphere Commerce Vx Application Development


In addition there are some certifications that are not vendor specific:

SOA Certified Professional (SOACP) – From

LZA SOA Certification – From Zapthink

Posted in SOA | Tagged: , , , , | Leave a Comment »

Membrane SOAP Client – A beginner’s web service testing tool

Posted by Vivek on February 10, 2013

Those who are new to testing web services often complain about lack of a free tool that provides UI. Though SOAPUI has great capabilities, it requires you to have some understanding of XML. Even though XML is not a complex language to understand but it is sometimes hard for a beginner to find syntax errors or modify it. I find Membrane’s SOAP Client tool useful in such cases. All you need is to import the WSDL file and it generates a form containing text boxes for request parameters.

You can view the HTTP headers too like SOAPUI. The biggest disadvantage is that it only supports username authentication token for secutity. It is not a tool if you want support for WS-* standards. Anyways, you can edit the header details in the XML view of tool.

This tool can be downloaded from


Posted in Java/J2EE, SOA Testing, Web Services | Leave a Comment »

Using CURL to invoke web service

Posted by Vivek on February 10, 2013

CURL  is an interesting tool that provides command line option to send requests over HTTP/ HTTPS. It is a handy tool when there is a requirement to send requests in bulk or through a scheduled job using scripts.

To invoke a service using CURL, you just need to create web service request, place it in a directory and run curl command as a client. For example, to send binary data using CURL:

curl –data-binary @MySOAPRequest.xml http://<host>:<port>/MyService

There are various command line options. A comprehensive list and exit codes can be found here:

You can download CURL binaries from –

After downloading, make sure that you add CURL to the PATH environment variable.

If there is a need to execute some security functiona, download OpenSSL and place libssl32.dll file into the CURL directory.

Posted in Java/J2EE, Web Services | Leave a Comment »

3 reasons not to use REST

Posted by Vivek on January 17, 2013

Here are a few reasons why RESTful services can be avoided:

1. REST is not a good choice when the way client application use service require high degree of control.

2. It is required to use vendor based tools to generate client stubs or server skeletons.

3. There is a need for coarser granularity to reduce the number of network calls.

In addition, advanced security controls and standards cannot be used. Exposing data can be dangerous sometimes.

Posted in integration, Java/J2EE, SOA | Leave a Comment »

3 reasons to use REST

Posted by Vivek on January 17, 2013

Here are a few reasons why REST is gaining popularity:

1. Need for speed – REST can take advantage of HTTP caching and proxy to provide improved speed. Example – cacheable map tiles in Google maps  

2. Efficient parsing – It is easy to parse JSON, plain old XML (POX) than the verbose SOAP

3. Reduce network traffic – SOAP messages generally require compression when passed over network. Passing lighter JSON, POX messages will consume less bandwidth.

REST is the backbone of web 2.0. It is now supported by all major vendors like IBM, Oracle and Microsoft. With cloud, adoption of REST has also increased. REST retains advantages of XML such as platform and language independence. Languages like Perl, python and javascript also support REST. Deployment of a REST based service is easy. Also, RESTful services are scalable.

Posted in integration, Java/J2EE, SOA | 1 Comment »

Why Contract First Approach?

Posted by Vivek on January 13, 2013

I have been asked a lot of questions in the past about why we should use the contract-first or WSDL first approach of developing web services. This article very well answers the question:

Posted in Java/J2EE, SOA, Web Services | Tagged: , , | 1 Comment »

SOA testing tools – A comparitive study

Posted by Vivek on January 5, 2013

This is my attempt to compare the various SOA testing tools in the market. Please feel free to provide your suggestions or comments.

Sr No

Features Crosscheck Networks SOAPSonar 3.0.5 iTKO LISA 3.6e Mindreef SOAPscope (Progress Actional) Parasoft SOAtest 5.1 Rational Service Tester Greenhat (Rational Test Workbench) SOAP UI Pro


 Learning curve Medium Medium Simple Medium Simple Medium Simple


Simple Navigation Y Y Y Y Y Y Y


Dynamic Data Population Y Y Y Y Y Supported in GH Performance (Rational Performance Test Server) Y


Project Save, Merge, Import, and Export (allows Team Project Sharing) Y Y Y Y Y Y Y


WSDL Merge (services, operations, XSD schema) Y X X X X X X


Clone Test Suites, Test Groups, Test Cases, Test Settings Y Y Y Y Y Y Y


Run Test Suites from HP Quality Center Y Y X Y X Y X


WSDL Operation Response/Request Chaining Y Y Y Y Y Y Y


WS-Security and Identity Management Digital Signature, Encryption, Username, X509, SAML, Kerberos Y Y Y Y Y Y


SOAP with Attachments (DIME and MIME) Y Y   Y Y   Y


WS-Addressing Y Y X Y Y Y Y


XSL Transformation Y X   X X X X


Design Time WSI-BP 1.1 Compliance Y Y Y Y X Y Y


Report generation PDF, XML, CSV formats PDF, HTML, CSV, Excel PDF Y CSV, HTML, RTF Y PDF, HTML, RTF, Word, Excel


Data Source Support CSV, Excel, SQL Server 2000/2005, Oracle SQL, ODBC, JDBC, Excel, Raw file SQL Server
Apache Derby
CSV, Excel, relational databases X via JDBC via JDBC


Regression Testing Suite Y Y Y Y Y Y Y


Record and Playback X Y Y X Y Y Records HTTP traffic


Extensible Y Java support Limited Y Y Y Supports Groovy and JavaScript


Performance Testing Support Y Y Y Y Using Rational Performance Tester Y Y


MQ Support Y Y X Y Y Tibco EMS, IBM MQ, Sonic MQ X


REST Service Support Y Y Y Y X Y Y


JMS Support Y Y Y Y Y Y Y


Stub Generation Y Y Y Y Y Y Y


SMTP Support Y     Y X Y  


SOAP 1.2 Support Y Y Y NA NA NA Y


OS Platforms Windows. SOAPSonar can be run on MAC and UNIX based systems through the use of a Virtual Machine running a Windows OS Windows (XP/Vista/Me/2000), Linux, Unix, Solaris, Mac OSX Microsoft Windows
Red Hat Linux,
Enterprise Linux,
Solaris (including
the x86 series)
SUSE Linux
Windows, Linux, Solaris, Mac windows and linux AIX, Linux, Solaris, Windows Windows, Linux, Mac


UDDI Support   Y X Y Y Y X


Policy Enforcement Y Y Y Y Y WS-Policy X


Mock Service Y Y Y Y Y Y Y


Asynchronous Service Testing   Y   Y asynchronous using WS-Notification Y X


UI Support Y Y Y Y X Y X


Industry Specific Data Formats X Out of the box support X X X HL7, MLLP, SWIFT, FIX, IATA, AMQP X


ESB Support IBM, Tibco, Oracle IBM, TIBCO , Software AG / webMethods, Oracle , Progress, Cordys, SAP, Microsoft Oracle, IBM, Jboss, SAP NA NA IBM, Tibco, Software AG, Oracle, SAP NetWeaver NA


Variants Personal Edition, Standard Edition, Automation Edition, Platinum Edition. (Personal Edition lacks features such as WS-Security validation, performance testing, and vulnerability testing) NA NA NA Rational Service Tester, Rational Performance Tester GH tester, GH Performance, GH VIE SOAPUI, SOAPUI Pro


License Commercial (Free – Personal Edition) Commercial Commercial Commercial Commercial Commercial Commercial (Free – SOAPUi)

Posted in SOA, SOA Testing, Web Services | 2 Comments »

2012 in review

Posted by Vivek on January 5, 2013

The stats helper monkeys prepared a 2012 annual report for this blog.

Here’s an excerpt:

4,329 films were submitted to the 2012 Cannes Film Festival. This blog had 38,000 views in 2012. If each view were a film, this blog would power 9 Film Festivals

Click here to see the complete report.

Posted in Miscellaneous | 1 Comment »

Improving performance – IBM Websphere Message Broker/ Message Queue

Posted by Vivek on December 29, 2012

For those building SOA using IBM’s Websphere Message Broker, this article will provide collection of some of the important tips and tricks that will enhance the performance of their solution:

1. Use RouteToLabel node to reduce the cost of processing where multiple paths are desired.

2. Choose your parser carefully. Use compact parsers for discarding white spaces and comments. For example, use XMLNSC for XML parsing but note that MRM XML can provide validation while XMLNSC does not.

3. Parsing only as far as is needed. Use Opaque parser if you do not want to reference the sub tree in message flow processing. However, validation is disabled if you choose Opaque parsing.

4. You can selectively parse headers like MQMD, MQRFH2 or JMS Properties and it might save parsing the whole body where only routing is important.

5. Use XPath carefully. By default an XPath expression will search for all instances of an element in the message. This happens at the expense of a full parse.

6. Use reference variables/pointers in ESQL and Java.

7. Keep the number of tree copy occurance to a minimum. Use minimum number of compute and Java Compute Nodes.

8. Copy data to Environment and refer data from environment, whereever applicable. It reduces the number of times a message tree is copied. If using message body, copy data to be used at the highest level i.e., keep navigation to as high as possible.

9. Use non-persistent messages where reliability is high.

10. Subflows sometimes adds additional processing overhead. Avoid usage of subflows where reusability is not desired.

11. Reduce the number of commits performed by the message flow by choosing Batchsize and Batchint sensibly. Default batchsize is 50.

12. Each additional execution group will need a minimum of 150MB. So ensure enough memory is allocated.

13. Use shared variables to access common data if multiple message flows are running in a single execution group.

14. Review log buffer settings if using persistent messages. Choose circular and linear logging based on your requirement. Linear logging guarantees recovery but at the expense of additional disk space. Automate archiving/ deleting of linear logs. Remember Every MQPUT, MQGET, MQCMIT of a persistent message causes a log record to be created for recovery purposes. Keep the log files on fast disks.

15. Where possible keep the applications and broker as close as possible in order to reduce the overall overhead.

16. MQCONN is expensive. Use carefully. MQOPEN is also expensive as compared to MQPUT/MQGET.

17. Use MQSIRELOAD to bounce (stop and start) execution groups at times.

18. Try to cache queue handles if more than one messages are to be processed. Use MQPUT1 if processing only 1 message.

19. Use Fastpath binding to remove IPC (Inter-Process Communication) component. Fastpath binding means that application is trusted. To define a broker as a trusted application, use the -t flag on the mqsicreatebroker command

20. Try to keep message size below 100 MB when using shared queues.

21. Disable trace. To disable the product trace, use the mqsichangetrace command with a level of none.

22. Use multiple channels to increase performance. For example, there can be a separate channel for large messages or messages that of high priority.

23. Using a separate ReplyToQ for each client will affect performance. Try to use a shared ReplyToQ and segregate message using MsgId or correlationId, if applicable.

24. Use Compute node (ESQL) over JCN.

25. When an exception occurs in MQOutput node with the fail terminal not wired, memory allocated to the message and LocalEnvironment is never reclaimed.

26. When you SET or CREATE a FIELD in the Environment/LocalEnvironment remember to DELETE it, and not only DETACH it, before the end of the flow.

Posted in IBM Websphere Message Broker, IBM Websphere MQ | 1 Comment »


Get every new post delivered to your Inbox.