The message format relies on java object serialization, so there is no way you are going to reproduce it in C without writing a mini jvm. You would have to write your own message invocation layer using a java agnostic wire format. More practical would be to just write a webservice adaptor that takes soap message and reposts it to the jms server.
If you stuck to basic types or objects that had basic types you could parse the serialized object stream without having to do any class loading. The format of such a stream is supposedly described in the rmi reference, but I would guess looking at the jdk source code would actually be required.