Il corpo del messaggio JMS
Questo argomento contiene informazioni sulla codifica del corpo del messaggio stesso. La codifica dipende dal tipo di messaggio JMS .
- ObjectMessage
- Un ObjectMessage è un oggetto serializzato da Java Runtime nel modo normale.
- TextMessage
- Un TextMessage è una stringa codificata. Per un messaggio in uscita, la stringa è codificata nella serie di caratteri fornita dall'oggetto destinazione. Il valore predefinito è la codifica UTF8 (la codificazione UTF8 inizia con il primo carattere del messaggio; non esiste alcun campo di lunghezza all'inizio). Tuttavia, è possibile specificare qualsiasi altra serie di caratteri supportata da IBM® MQ classes for JMS. Tali serie di caratteri vengono utilizzate principalmente quando si invia un messaggio a un'applicazione nonJMS .
Se la serie di caratteri è una serie a doppio byte (incluso UTF16), la specifica di codifica del numero intero dell'oggetto di destinazione determina l'ordine dei byte.
Un messaggio in entrata viene interpretato utilizzando la serie di caratteri e la codifica specificati nel messaggio stesso. Queste specifiche si trovano nell'ultima intestazione IBM MQ (o MQMD se non ci sono intestazioni). Per i messaggi JMS , l'ultima intestazione è di solito MQRFH2.
- BytesMessage
- Un BytesMessage è, per impostazione predefinita, una sequenza di byte come definito nella specifica JMS 1.0.2 e nella documentazione Java associata.
Per un messaggio in uscita assemblato dall'applicazione stessa, la proprietà di codifica dell'oggetto di destinazione può essere utilizzata per sovrascrivere le codifiche dei campi integer e floating point contenuti nel messaggio. Ad esempio, è possibile richiedere che i valori a virgola mobile siano memorizzati in S/390 anziché in formato IEEE).
Un messaggio in entrata viene interpretato utilizzando la codifica numerica specificata nel messaggio stesso. Questa specifica si trova nell'ultima intestazione IBM MQ (o MQMD se non ci sono intestazioni). Per i messaggi JMS , l'ultima intestazione è di solito MQRFH2.
Se viene ricevuto un BytesMessage e viene inviato nuovamente senza modifiche, il relativo corpo viene trasmesso byte per byte, come è stato ricevuto. La proprietà di codifica dell'oggetto di destinazione non ha alcun effetto sul corpo. L'unica entità di tipo stringa che può essere inviata esplicitamente in un BytesMessage è una stringa UTF8 . Viene codificato in formato Java UTF8 e inizia con un campo di lunghezza di 2 byte. La proprietà della serie di caratteri dell'oggetto di destinazione non ha alcun effetto sulla codifica di un BytesMessagein uscita. Il valore della serie di caratteri in un messaggio IBM MQ in entrata non ha alcun effetto sull'interpretazione di tale messaggio come JMS BytesMessage.
Le applicazioni nonJava non sono in grado di riconoscere la codifica Java UTF8 . Pertanto, affinché un'applicazione JMS invii un BytesMessage che contiene dati di testo, l'applicazione stessa deve convertire le proprie stringhe in array di byte e scrivere tali array di byte in BytesMessage.
- MapMessage
- Un MapMessage è una stringa contenente triplette nome / tipo/valore XML codificate come:
dove<map> <elt name="elementname1" dt="datatype1">value1</elt> <elt name="elementname2" dt="datatype2">value2</elt> ... </map>datatypeè uno dei tipi di dati elencati nella Tabella 6. Il tipo di dati predefinito èstringe quindi l'attributodt=viene omesso per gli elementi stringa.string
La serie di caratteri utilizzata per codificare o interpretare la stringa XML che forma il corpo di un messaggio di associazione viene determinata in base alle regole che si applicano a un messaggio di testo.
Le versioni di IBM MQ classes for JMS precedenti a 5.3 codificano il contenuto di un messaggio di mappa nel seguente formato:<map> <elementname1 dt="datatype1">value1</elementname1> <elementname2 dt="datatype2">value2</elementname2> ... </map>IBM MQ classes for JMS 5.3 e versioni successive possono interpretare entrambi i formati, ma le versioni di IBM MQ classes for JMS precedenti a 5.3 non possono interpretare il formato corrente.
Se un'applicazione deve inviare messaggi di associazione a un'altra applicazione che utilizza una versione di IBM MQ classes for JMS precedente a 5.3, l'applicazione di invio deve chiamare il metodo di produzione connessioni
setMapNameStyle(WMQConstants.WMQ_MAP_NAME_STYLE_COMPATIBLE)per specificare che i messaggi di associazione vengono inviati nel formato precedente. Per impostazione predefinita, tutti i messaggi di associazione vengono inviati nel formato corrente. - StreamMessage
- Un StreamMessage è come un messaggio di associazione, ma senza nomi elemento:
dove<stream> <elt dt="datatype1">value1</elt> <elt dt="datatype2">value2</elt> ... </stream>datatypeè uno dei tipi di dati elencati nella Tabella 6. Il tipo di dati predefinito èstringe quindi l'attributodt=viene omesso per gli elementi stringa.string
La serie di caratteri utilizzata per codificare o interpretare la stringa XML che costituisce il corpo di StreamMessage viene determinata in base alle regole che si applicano a TextMessage.
- MQFMT_NONE
- per ObjectMessage, BytesMessage, o messaggi senza corpo.
- MQFMT_STRING
- per TextMessage, StreamMessage, o MapMessage.