Creazione dell'esempio Host servizio Web
Se non si vogliono eseguire questi passi, con questo esempio vengono forniti un progetto serie di messaggi ed un progetto flusso di messaggi completati.
Per creare l'esempio Host servizio Web:
- Creare una serie di messaggi. Questa verrà utilizzata sia dal messaggio in formato servizio Web (XML) che in formato legacy (CWF).
- Avviare il Message Brokers Toolkit.
- Assicurarsi di essere nella vista Broker Application Development.
- Fare clic su File > Nuovo > Progetto della serie di messaggi.
- Impostare il Nome progetto su WSHOST_MSP1, quindi fare clic su Avanti.
- Impostare Nome per la serie di messaggi su WSHOST_MS1.
- Selezionare Utilizza spazi dei nomi, quindi fare clic su Avanti.
- Selezionare Nome Custom Wire Format e Nome XML Wire Format, quindi fare clic su Fine.
- Chiudere messageset.mset, salvandone il contenuto.
- Importare un file di intestazione C. Questo corrisponde al messaggio di input e di output dell'applicazione legacy.
- Fare clic su File > Importa > File System > Avanti.
- Utilizzare il pulsante Sfoglia per selezionare legacyservice.h dal progetto WSHOST_LEGACY.
- Impostare Nella cartella su WSHOST_MSP1, quindi fare clic su Fine
- Creare un file di definizione dei messaggi Broker dal file di intestazione C:
- Nel Navigator risorse, fare clic con il tasto destro del mouse su legacyservice.h, quindi fare clic su Nuovo > File di definizione dei messaggi.
- Il pallino relativo al file di intestazione C dovrebbe essere preselezionato. In caso contrario, selezionarlo e fare clic su Avanti
- Nel progetto WSHOST_MSP1, legacyservice.h dovrebbe essere preselezionato.
In caso contrario, selezionarlo e fare clic su Avanti.
- Nel pannello Serie di messaggi, espandere WSHOST_MSP1 e selezionare WSHOST_MS1.
- Selezionare Utilizza spazio nomi di destinazione ed immettere http://www.brokersamplewshost.ibm.com come URL, quindi fare clic su Avanti.
- Nel pannello relativo alle strutture di origine, fare clic su tagIA81CONF, fare clic sul pulsante >, quindi fare clic su Seleziona tutto > Fine.
- Chiudere legacyservice.mxsd, salvandone il contenuto.
- Creare una definizione di messaggi SOAP.
- Nel Navigator risorse, fare clic con il tasto destro del mouse sulla serie di messaggi WSHOST_MS1 quindi fare clic su Nuovo > File di definizione dei messaggi.
- Fare clic sul pallino Messaggio fornito da IBM, quindi fare clic su Avanti.
- Nel pannello Messaggi forniti IBM, selezionare il messaggio ibm\soap\envelope\soapenv11.xsd, quindi fare clic su Avanti.
- Espandere WSHOST_MSP1 e selezionare WSHOST_MS1, quindi fare clic su Avanti.
- In Selezionare gli elementi globali da cui creare i messaggi, assicurarsi che non sia selezionato alcun elemento, quindi fare clic su Fine.
- Chiudere soapenv11.mxsd, salvandone il contenuto
- Si noti che Envelope viene creato automaticamente come messaggio.
Vengono riportate un certo numero di avvertenze nella vista Problemi del Message Brokers Toolkit.
Queste sono causate principalmente dal fatto che un CWF è definito per una definizione dei messaggi SOAP e possono essere ignorate.
- Creare una categoria per i messaggi (un prerequisito alla creazione di WSDL).
In WSDL, tutti i nomi di operazioni devono essere univoci entro un tipo di porta di inclusione.
Quindi i messaggi di richiesta e di riposta definiti in una categoria di messaggi devono essere differenti.
Al fine di chiarire questo punto, due nuovi messaggi verranno definiti nella serie dei messaggi,
uno per l'input dei servizi Web, uno per l'output dei servizi Web.
Tali messaggi devono essere creati nel file mxsd popolato dal file di intestazione C.
- Aprire legacyservice.mxsd.
- Nella vista Profilo, fare clic col tasto destro del mouse su Messaggi e fare clic su Aggiungi messaggio.
- Modificare il nome del messaggio in IA81CONFIN e premere Invio.
- Nell'Editor di definizione dei messaggi, fare clic su IA81CONFIN, quindi fare clic sulla scheda Proprietà.
- Nella pagina Proprietà, fare clic su Passa alla dichiarazione.
- Dall'elenco Tipo, fare clic su (Ulteriori informazioni...), selezionare tagIA81CONF e fare clic su OK.
- Nella scheda Profilo, fare clic con il tasto destro del mouse su Messaggi e fare clic su Aggiungi messaggio.
- Modificare il nome del messaggio in IA81CONFOUT e premere Invio.
- Nell'editor principale, fare clic su Passa alla dichiarazione.
- Dall'elenco Tipo, fare clic su (Ulteriori informazioni...), selezionare tagIA81CONF e fare clic su OK.
- Chiudere legacyservice.mxsd, salvandone il contenuto.
- Fare clic su File > Nuovo > File di categoria di messaggi.
- Impostare Tipo di categoria su wsdl.
- Impostare Utilizzo della categoria su wsdl:requestresponse, quindi fare clic su Avanti.
- Selezionare la serie di messaggi WSHOST_MS1 nel progetto serie di messaggi WSHOST_MSP1.
- Nel campo Nome file, immettere cat1 quindi fare clic su Avanti.
- Selezionare IA81CONFIN e IA81CONFOUT, quindi fare clic su Fine.
- Selezionare IA81CONFIN nel pannello Gerarchia proprietà.
- Impostare Nome ruolo su IA81CONFIN e Tipo ruolo su wsdl:input.
- Selezionare IA81CONFOUT nel pannello Gerarchia proprietà.
- Impostare Nome ruolo su IA81CONFOUT e Tipo ruolo su wsdl:output.
- Chiudere cat1.category, salvandone il contenuto
- Generare WSDL.
- Fare clic su File > Nuovo > Definizione WSDL > Avanti.
- Selezionare la serie di messaggi WSHOST_MS1 nel progetto serie di messaggi WSHOST_MSP1, quindi fare clic su Avanti.
- Selezionare WSHOST_MSP1, quindi fare clic su Crea nuova cartella.
- Immettere wsdl come nome cartella, quindi fare clic su OK.
- Verificare che il pallino Singolo sia selezionato, quindi fare clic su Avanti.
- Nel pannello "Specifica i dettagli WSDL", assicurarsi che Stile sia impostato su document, quindi fare clic su Avanti.
- Nel pannello "Seleziona categorie", fare clic su Seleziona tutto > Avanti.
- Nel pannello Binding, fare clic su SOAP/HTTP > Avanti.
- Nel pannello "Proprietà del servizio", impostare Indirizzo porta
su http://localhost:7080/samplebrokerwshost, quindi fare clic su Fine.
- Creare un flusso di messaggi. Il flusso prende una richiesta HTTP, richiama l'applicazione legacy utilizzando MQ e instrada le informazioni
ricavate dalla risposta dell'applicazione legacy al requestor HTTP.
- Fare clic su File > Nuovo > Progetto del flusso messaggi.
- Impostare il Nome progetto su WSHOST_MFP1, quindi fare clic su Avanti.
- Nel pannello "Progetti con riferimenti", selezionare WSHOST_MSP1 quindi fare clic su Fine.
- Nel Navigator risorse, fare clic con il tasto destro del mouse su WSHOST_MFP1, quindi fare clic su Nuovo > Flusso di messaggi.
- Impostare Schema su WSHOST_MFP1.
- Impostare Nome su WSHOST_WSHOST1, quindi fare clic su Fine.
- Visualizzare la tavolozza (se nascosta), quindi inserire i seguenti nodi nei riquadri del Flusso di messaggi:
- 1 nodo HTTPInput
- 3 nodi Compute
- 2 nodi MQOutput
- 1 nodo MQGet
- 1 nodo MQInput
- 1 nodo HTTPReply
- Fare clic su Connessione nella tavolozza, quindi connettere i seguenti nodi e terminali:
- HTTPInput (out) - Compute (in)
- Compute (out) - MQOutput (in)
- MQOutput (out) - Compute1 (in)
- Compute1 (out) - MQOutput1 (in)
- MQInput (out) - MQGet (in)
- MQGet (out) - Compute2 (in)
- Compute2 (out) - HTTPReply (in)
- Potrebbe essere utile per la comprensione ridenominare alcuni dei nodi. Per ridenominare un nodo, fare clic con il tasto destro del mouse sul nodo, quindi fare clic su Rinomina.
I nomi consigliati sono:
- MQOutput -> MQOutput to legacy
- MQOutput1 -> MQOutput store HTTP state
- MQInput -> MQInput from legacy
- MQGet -> MQGet stored HTTP state
- Personalizzare il nodo HTTPInput:
- Fare clic sul nodo HTTPInput e quindi su Proprietà.
- Selezionare Base ed impostare Selettore URL su /samplebrokerwshost.
- Selezionare Valore predefinito:
- Per Dominio messaggi, selezionare MRM dall'elenco a discesa.
- Per Serie di messaggi, selezionare WSHOST_MS1 dall'elenco a discesa.
- Per Tipo messaggio, immettere Envelope.
- Per Formato messaggio, selezionare XML1 dall'elenco a discesa.
- Fare clic su OK.
- Personalizzare il nodo Compute:
- Fare clic con il tasto destro del mouse sul nodo Compute e fare clic su Apri ESQL.
- Codificare il seguente ESQL compreso tra le istruzioni BEGIN e END per questo modulo. Utilizzare content assist (Ctrl + spazio) per selezionare
le parole chiave. Dovrebbero essere generate istruzioni DECLARE NAMESPACE simili a quelle commentate nelle prime due righe quando
si utilizza content assist per la prima volta per selezionare l'elemento Body di SOAP e qualsiasi elemento IA81CONFIN. Se si sta
copiando e incollando questo codice, assicurarsi di eliminare il commento dalle istruzioni DECLARE NAMESPACE.
--DECLARE tns NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/';
--DECLARE ns NAMESPACE 'http://www.brokersamplewshost.ibm.com';
CALL CopyMessageHeaders();
-- L'output è MQ, quindi rimuovere le intestazioni HTTP
SET OutputRoot.HTTPInputHeader = null;
-- L'output è legacy, quindi impostare wire format e nome messaggio
SET OutputRoot.Properties.MessageType = 'msg_tagIA81CONF';
SET OutputRoot.Properties.MessageFormat = 'CWF1';
-- Aggiungere un MQMD
CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
-- Creare un messaggio da inviare a legacy
SET OutputRoot.MRM.MessageId
= InputBody.tns:Body.ns:IA81CONFIN.MessageId;
SET OutputRoot.MRM.OrderNumber
= InputBody.tns:Body.ns:IA81CONFIN.OrderNumber;
SET OutputRoot.MRM.ItemReference
= InputBody.tns:Body.ns:IA81CONFIN.ItemReference;
SET OutputRoot.MRM.ItemQuantity
= InputBody.tns:Body.ns:IA81CONFIN.ItemQuantity;
SET OutputRoot.MRM.CustomerNumber
= InputBody.tns:Body.ns:IA81CONFIN.CustomerNumber;
SET OutputRoot.MRM.DeliveryRef = ' ';
SET OutputRoot.MRM.Confirm = ' ';
SET OutputRoot.MRM.filler1 = ' ';
RETURN TRUE;
- Personalizzare il nodo MQOutput (MQOutput to legacy):
- Fare clic sul nodo MQOutput e quindi su Proprietà.
- Se si ha intenzione di eseguire l'applicazione legacy su un gestore code WebSphere MQ differente
nel Broker, selezionare Base ed
impostare Nome gestore code sul nome del gestore code della propria applicazione
legacy. Altrimenti, lasciare il campo vuoto.
- Impostare Nome coda su WSHOST1_OUT1.
- Selezionare Avanzate ed impostare Modalità transazione su Sì.
- Impostare Contesto messaggio su Valore predefinito.
- Selezionare Richiesta e selezionare la casella di spunta per Richiesta.
- Impostare Coda di risposta a su WSHOST1_IN1, quindi fare clic su OK.
- Personalizzare il nodo Compute1:
- Fare clic con il tasto destro del mouse sul nodo Compute1 e fare clic su Apri ESQL.
- Codificare il seguente ESQL compreso tra le istruzioni BEGIN e END per questo modulo. Utilizzare content assist (Ctrl + spazio) per selezionare
le parole chiave. Dovrebbe essere generata un'istruzione DECLARE NAMESPACE simile a quella commentata nella prima riga quando
si utilizza content assist per la prima volta per selezionare l'elemento Body di SOAP.
--DECLARE tns NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/';
--DECLARE ns NAMESPACE 'http://www.brokersamplewshost.ibm.com';
-- Il messaggio di output creato in questo nodo memorizza il contesto HTTP.
-- Potrebbe essere idoneo qualsiasi formato, ma si sta utilizzando un
-- campo a definizione automatica in un'Intestazione SOAP per farlo
-- Quindi il wire format è XML
-- Creare le proprietà della serie di messaggi di destinazione
SET OutputRoot.Properties.MessageSet = InputRoot.Properties.MessageSet;
SET OutputRoot.Properties.MessageType = 'Envelope';
SET OutputRoot.Properties.MessageFormat = 'XML1';
-- Creare l'MQMD ed impostare il CorrelId
-- Il CorrelId deve essere impostato sul MsgId del messaggio inviato
-- all'applicazione legacy. Quando si riceve la risposta dalla
-- applicazione legacy, si avrà MQGet dalla coda di
-- memorizzazione con correlid uguale al correlid della risposta legacy
SET OutputRoot.MQMD.CorrelId
= InputLocalEnvironment.WrittenDestination.MQ.DestinationData.msgId;
-- Creare il messaggio per memorizzare il contesto HTTP
SET OutputRoot.MRM.tns:Header.HTTP.RequestIdentifier
= InputLocalEnvironment.Destination.HTTP.RequestIdentifier;
RETURN TRUE;
- Personalizzare il nodo MQOutput1 (MQOutput store HTTP state):
- Fare clic sul nodo MQOutput1 e quindi su Proprietà.
- Selezionare Base ed
impostare Nome coda su WSHOST1_STATE1.
- Selezionare Avanzate ed impostare Modalità transazione su Sì.
- Impostare Contesto messaggio su Valore predefinito.
- Fare clic su OK.
- Personalizzare il nodo MQInput (MQInput from legacy):
- Fare clic sul nodo MQInput e quindi su Proprietà.
- Selezionare Base ed impostare Nome coda su WSHOST1_IN1.
- Selezionare Valore predefinito:
- Per Dominio messaggi, selezionare MRM dall'elenco a discesa.
- Per Serie di messaggi, selezionare WSHOST_MS1 dall'elenco a discesa.
- Per Tipo messaggio, immettere msg_tagIA81CONF.
- Per Formato messaggio, selezionare CWF1 dall'elenco a discesa.
- Fare clic su OK.
- Personalizzare il nodo MQGet (MQGet stored HTTP state):
- Fare clic sul nodo MQGet e quindi su Proprietà.
- Selezionare Base ed
impostare Nome coda su WSHOST1_STATE1.
- Selezionare Valore predefinito:
- Per Dominio messaggi, selezionare MRM dall'elenco a discesa.
- Per Serie di messaggi, selezionare WSHOST_MS1 dall'elenco a discesa.
- Per Tipo messaggio, immettere Envelope.
- Per Formato messaggio, selezionare XML1 dall'elenco a discesa.
- Selezionare Avanzate:
- Per Modo creazione, selezionare Messaggio e Ambiente Locale dall'elenco a discesa.
- Per Copia messaggio, selezionare Copia messaggio intero dall'elenco a discesa.
- Selezionare Richiesta e selezionare la casella di spunta per Ottieni in base all'ID di correlazione.
- Selezionare Risultato ed impostare Ubicazione dati di emissione su OutputLocalEnvironment.
- Fare clic su OK.
- Personalizzare il nodo Compute2:
- Fare clic sul nodo Compute2 e quindi su Proprietà.
- Selezionare Base ed impostare Modalità di calcolo su Ambiente Locale e Messaggio.
- Fare clic su OK (per consentire al contesto HTTP di essere trasmesso al nodo HTTPReply)
- Fare clic con il tasto destro del mouse sul nodo e selezionare Apri ESQL.
- Codificare il seguente ESQL compreso tra le istruzioni BEGIN e END per questo modulo:
--DECLARE tns NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/';
--DECLARE ns NAMESPACE 'http://www.brokersamplewshost.ibm.com';
-- L'input è CWF, l'output è SOAP/XML
SET OutputRoot.Properties.MessageSet = InputRoot.Properties.MessageSet;
SET OutputRoot.Properties.MessageType = 'Envelope';
SET OutputRoot.Properties.MessageFormat = 'XML1';
SET OutputRoot.MRM.tns:Body.ns:IA81CONFOUT = InputRoot.MRM;
SET OutputRoot.MRM.tns:Body.ns:IA81CONFOUT.filler1 = NULL;
-- Impostare l'identificativo risposta http
SET OutputLocalEnvironment.Destination.HTTP.RequestIdentifier =
CAST(InputLocalEnvironment.MRM.tns:Header.HTTP.RequestIdentifier AS BLOB);
RETURN TRUE;
- Chiudere WSHOST_WSHOST1.esql, salvandone il contenuto.
- Chiudere WSHOST_WSHOST1.msgflow, salvandone il contenuto.
- Se si ha intenzione di eseguire l'applicazione legacy su un gestore code WebSphere MQ differente
nel broker, è necessario definire la coda di input dell'applicazione legacy nel relativo gestore code.
Utilizzare il programma di utilità WebSphere MQ appropriato per immettere la seguente definizione coda:
DEFINE QLOCAL(WSHOST1_OUT1) REPLACE
Torna alla pagina home dell'esempio