Archive for August, 2012

Async JAX-WS web service for BPEL

I have just completed a portable asynchronous JAX-WS web service that works with BPEL and WS-Addressing in Oracle Fusion Middleware 11g. I thought that it would be easy, but in fact it took several days to get it right; hence this blog entry.

First I got the web service up and running and working when invoked from SoapUI. That was not too bad. The main difficulty was how to get at the WS-Addressing headers in a portable way. The callback is invoked by another thread, possibly days after the original call and possibly from another physical machine, so I had to find and store the reply address and the message id. I used a SOAPHandler, as described in Asynchronous web services with WS-Addressing.

Unfortunately BPEL did not want to play. Luckily I found an excellent guide: Create an Asynchronous JAX-WS Web Service and call it from Oracle BPEL 11g. It noted that BPEL expects the WSDL of an asynchronous web service to be structured in a specific way:

  1. The asynchronous request operation and the callback operation must be on different ports in the same service.
  2. A parterLinkType section is required to associate the request and callback roles.
  3. The asynchronous operation must not have a return type (or it will be interpreted as a synchronous service).
  4. The callback operation should contain a single input that represents the value returned by the callback.
  5. The asynchronous method operation must specify a value for the soapAction attribute.

After that there were no problems. Along the way I found the following post, which was also quite interesting: Dynamic WSDL location with JAX-WS.

Categories: Java, SOA Suite