There are several JMS message types:
- BytesMessage: can be read by anybody
- TextMessage: ditto
- StreamMessage: can be read by anybody who can read network-ordered primitive types
- ObjectMessage: these are serialized objects and can only be read by Java
- MapMessage: these are essentially maps; ditto
JMS itself isn't a message broker, just an API to an existing broker.
If your Java code and the non-Java code can agree on a byte- or text-based message format, you can interchange message between them.