Our web-based product has two parts -- a web front end developed using JSPs, and a Java back-end process. The web front-end communicates with the back-end using Java's RMI technology.
We are now rewriting the back end (still in Java). At the same time, we would like to make our back-end technology available to other web sites via "web services". For this reason, we would like to verify the feasibility of adding a "web services" layer to our site. The web services layer will communicate with our back-end process using Java RMI, and will communicate with external sites using web services. The web services layer will run as a Java servlet and will essentially just be a pass-through mechanism to translate external calls to RMI, and translate the responses received from the back-end process via RMI into a web services response returned to the external client.
Your task will be to prototype the pass-through web services servlet. This will be a very well-defined task. You will receive a zip file containing a "stub" version of our back-end process, and a very small regression suite, having 11 RMI method calls to the back-end process. These are self-checking tests that run under junit. The "stub" back-end process just receives the calls, verifies parameters, and returns hard-coded results. The regression suite verifies that the expected results are received.
As it stands, this suite only verifies that a handful of parameter and result types works using Java RMI. Your job will be to:
- Create the web services <--> RMI conversion/passthrough layer. This must use SOAP 1.2 bindings for web services.
- Clone and modify the RMI-based regression tests (1 file, 11 method calls) to perform exactly the same calls and verifications.
So, you will create two new directories -- one for the Web Services conversion/passthrough layer (call this "WS2RMI"), and one for the Web Services regression test call this (WSTest). You will develop an "ant" [url removed, login to view] script for each; I suggest starting from the working examples Sun provides -- see metro.dev.java.net. I will provide a list of environment variables that you should use for identifying $JAXWS_HOME etc, so that we can adopt your [url removed, login to view] scripts easily.
The [url removed, login to view] for WS2RMI will generate the artifacts needed to provide the exact same functionality as the RMI interface.
The [url removed, login to view] for WSTest will generate client-side artifacts for the web service, and compile the test program into a jar file.
To demonstrate success, you will use 3 shells. You will start our back-end "stub" in one, which will listen on an RMI port. (This already works.) The second will have been used to build and deploy the WS2RMI servlet by copying its war file into the autodeploy directory. In the third shell, you will start the test program exactly as is done for our RMI test directory, except that the tests will issue their requests using the web services layer.
WS2RMI will be in Java, obviously, because it has to be for the RMI portion. WSTest will be in Java too. (We will later have C# and other client test suites, but this task is just Java.)
We use Sun's Application Server (aka Glassfish) on Linux but also do development (using the Cygwin environment) on Windows, so it is acceptable for you to work in either. You will need to install and configure Glassfish on your own machine. All testing may be done via "localhost" -- no external web server is needed for this testing.
All tools needed for this task are free, mostly from Sun, and you will download and install them for yourself on your own machine.
The methods and types passed and returned should be good candidates -- serializable and under our local control (except for [url removed, login to view] and [url removed, login to view] types such as String and List). You may modify our RMI-compatible types via annotation or otherwise, so long as their constructors and public methods continue to work. Alternatively, you may make new types for using in the web services parameters/results, with constructors to convert from the RMI-compatible types to the WS types and back.
I have attached zip files with the stub back-end process and RMI tests, so that you can see the types and methods that will have to be converted.
Please include 1-2 hours to review/explain your work using desktop sharing software (I'll provide link).
Let's start, I think, there will be no problems, especially with such detailed description. I have wide experience of working with CORBA/RMI/Web Services, App. servers ets. So, I can provide everything you asked for.