As Duff says, Java RMI really only refers to Java-to_Java messages. In terms of ease of development these days, the degree of coding from the point of view of the service provider is pretty similar.
However, in addition to performance issues, when the gap between WebServices and RMI is quite variable (there may be a slight difference for some message sizes), there is one more aspect that should be considered: stability.
As a rule, RMI is easily configured when one client is talking to one server, and you do not mind the availability of a client connected to one server. Server down, client down, this is life.
In the case of a web service, you can easily deploy your service on a server cluster, and given that you are invoking the web service through HTTP, you can easily use all the usual network routing and atomization methods used in larger networks. No special encoding is required on the server or client.
Now you can get the same level of fault tolerance with RMI, but that requires a slightly better service delivery infrastructure, and exactly where the Java EE EJB programming model (or frameworks like Spring) are used. EJB uses RMI over IIOP, a protocol that allows failover access to server instances, transparently handling server failures. [It does a lot more, like secutiry and transactions, but then it could be Web Services. Interesting, but not part of this discussion.]
Bottom line: to ensure the quality of quality service, I usually start by creating a service facility. I use Java EE EJB 3, other people use Spring. You can open this service object as a web service or as an RMI / IIOP with a very simple configuration / annotation. It is very little effort to choose one or both. My world happens to be major on interop, so I tend to show web services. If you only have Java, this can lead to some performance improvements for using RMI / IIOP, but this is not guaranteed, you will need to measure performance to be sure.