I have no idea about JMS to be honest but as I understand it, SOAP is
basically XML based messages sent over the HTTP protocol (ie like
submitting form data in a web page). This means that messages can be
'decoded' on the other side by any other language, such as PHP, ASP or
whatever as they are in a format those languages understand.
RMI is about connecting directly up to another application, system or
whatever directly, using PORTs and IP addresses. The major
disadvantage that I know of for this kind of thing is that you can
only communicate with other applications written in Java (well, unless
you want to get involved in CORBA).
I am far from an authority on this subject however so you might be
best getting some advice from elsewhere...
Hope my small insight helped though...