2015-03-17 16 views
6

In IBM MQ, ho un requisito in cui è possibile ottenere molti tipi di xml dalla coda. I messaggi xml saranno conformi a xsd già specificato (ci sono, 5 xsd - il che significa che posso ottenere 5 xml diversi). Quando ricevo il messaggio dalla coda, mi piacerebbe sapere il tipo di xml (se xsd1 o xsd2 o così via)Per identificare il xsd del messaggio xml ricevuto da MQ

Il motivo per cui vorrei sapere è che sto usando un'interfaccia JaxB con implementazione SAX , per cui ho bisogno di dare l'oggetto java corrispondente al parametro xml. Quindi devo sapere quale xsd è l'input ed è e assegnare il parametro in modo corrispondente.

Le opzioni che ho sono di impostare una proprietà nell'intestazione del messaggio, ma la parte che sta lasciando cadere il messaggio in MQ non è pronta.

Quali altre opzioni ho? Posso ottenere il nome del file (di xml) dal mq e trovare il xsd in base al nome del file? Oppure devo fare il sass a parsing e identificare il tag root e derivare il tipo xsd? Qualche altra opzione migliore che qualcuno ha in mente?

risposta

1

Penso che si possa fare:

Fa il messaggio in arrivo ha il nome del file all'inizio del corpo del messaggio? In tal caso, dopo aver ricevuto il messaggio, l'applicazione può leggere i primi pochi byte per ottenere il nome del file. In base al nome del file, l'applicazione può utilizzare Xsd appropriato e passare l'intero corpo del messaggio.

2

Pensa a MQ come l'ufficio postale. Quando ricevi una lettera, l'ufficio postale non fa casino con niente all'interno (il carico utile) e se cambia l'esterno, cambia solo le informazioni di routing. Se si desidera ordinare la posta in arrivo a diversi destinatari, chi sta inviando deve mettere i dati su cui operano i criteri di ordinamento all'esterno della busta. Se ciò non funziona, devi aprire la busta e cercare il nome del destinatario, il dipartimento o qualsiasi altra cosa sui documenti all'interno.

Il messaggio MQ è quella busta. I criteri di ordinamento possono essere nomi di code diversi, una proprietà del messaggio, una proprietà dell'intestazione del messaggio o qualcosa nel payload. Ma se il mittente non imposta esplicitamente il nome della coda di destinazione in base ai criteri di selezione o imposta il messaggio o la proprietà dell'intestazione, l'unica opzione è ispezionare il carico utile e scoprirlo.

Se si deve ispezionare il carico utile, questo è uno scenario perfetto per IBM Integration Broker. Ma puoi anche scrivere un'applicazione per eseguire questa funzione. Molto spesso questo viene eseguito da un'app di Dispatch che riceve il messaggio, capisce dove va, quindi lo mette su un'altra coda e COMMIT s le operazioni GET e PUT. Ma se l'app di spedizione deve analizzare il codice XML per determinare la coda corretta, il messaggio deve essere analizzato due volte - una volta dal dispatcher, una volta dall'app di ricezione.

Problemi correlati