In questo scenario di servizio Web, il broker fornisce un'interfaccia del servizio Web a un'applicazione diversa da un servizio non Web esistente.
Legenda dei simboli:
A ciò si fa riferimento qualche volta come facciata del servizio Web. La progettazione dell'interfaccia del servizio Web comprenderà di solito il raggruppamento, la restrizione o il miglioramento dell'interfaccia esistente e non è vincolata da una definizione WSDL esistente.
Il broker fornisce un'interfaccia dei servizi Web a un'applicazione esistente, fornendo in modo facoltativo altre funzioni, ad esempio il controllo delle richieste effettuate.
Nel tempo è possibile modificare l'implementazione senza influire sull'interfaccia presentata al client dei servizi Web.
Il flusso di messaggi riceve una richiesta del servizio Web, la converte in un formato previsto dall'applicazione esistente e richiama l'applicazione esistente. La risposta da un'applicazione esistente viene convertita in una risposta di servizio Web valida.
Un'applicazione CICS esistente dispone di un'interfaccia di copybook COBOL.
E' possibile utilizzare HTTP come protocollo aggiuntivo o sostituzione adattando la maggior parte dei flussi di messaggi che correntemente utilizzano WebSphere MQ per input o output.
E' possibile modellare il messaggio di input nel dominio MRM e creare il WSDL dal modello o elaborare un messaggio del dominio XMLNS o XML generico. Se è stato definito il messaggio nel dominio MRM, è possibile configurare la convalida del messaggio di input mediante il nodo HTTPInput. Il nodo genera un'eccezione se il messaggio non è conforme al modello.
E' possibile configurare la creazione di una serie di intestazioni HTTP predefinite per il messaggio di risposta inviato al client mediante il nodo HTTPReply. In tal modo, verranno ridotte le modifiche da effettuare per convertire un flusso che elabora messaggi WebSphere MQ a un flusso che elabora messaggi HTTP.
Il primo flusso di messaggi riceve richieste in entrata da client del servizio Web in un nodo HTTPInput. Comprende un nodo Compute per trasformare la richiesta e un nodo MQOutput per inviare la richiesta modificata all'applicazione WebSphere MQ.
Il secondo flusso di messaggi riceve la risposta dall'applicazione in un nodo MQInput. Il messaggio viene trasmesso a un nodo Compute che trasforma il messaggio e lo invia a un nodo HTTPReply che lo invia come risposta al client del servizio Web originale.
Sebbene sia possibile che le trasformazioni completate da ciascun nodo Compute siano non semplici, è necessario che il codice ESQL nel primo salvi le informazioni di stato HTTP recuperate dal secondo per garantire che le risposte dall'applicazione WebSphere MQ siano restituite al client che ha inviato la richiesta originale.
Il primo flusso di messaggi riceve il messaggio, effettua le trasformazioni necessarie e codifica l'identificativo della richiesta HTTP nel messaggio in uscita. E' inoltre possibile memorizzare l'identificativo della richiesta in un database, se si preferisce. Il nodo HTTPInput fornisce l'identificativo della richiesta come campo nell'albero LocalEnvironment denominato Destination.HTTP.RequestIdentifier e Compute1 è in grado di leggere e memorizzare tale valore.
Il secondo flusso di messaggi riceve il messaggio di risposta e lo trasforma nuovamente nel formato del messaggio del client. Compute2 legge l'identificativo di richiesta HTTP dal messaggio e imposta LocalEnvironment.Destination.HTTP.RequestIdentifier utilizzando tale valore. Il nodo HTTPReply utilizza l'identificativo della richiesta per garantire che il messaggio raggiunga il client HTTP corretto.
Per l'implementazione di tale scenario è necessaria la corretta gestione di MQMD. E' necessario che i messaggi che vengono immessi in un flusso di messaggi su HTTP dispongano di MQMD prima del relativo invio a un nodo MQOutput. E' inoltre necessario rimuovere MQMD da qualsiasi messaggio immesso in WebSphere MQ prima di inviarlo in un nodo HTTPReply o HTTPRequest (a meno che non si desideri includere un MQMD nel flusso HTTP).
Nel modulo ESQL per Compute1, includere un'istruzione del genere:
SET OutputRoot.XML.A.MessageID = CAST(InputLocalEnvironment.Destination.HTTP.RequestIdentifier AS CHARACTER);
Nel modulo ESQL per Compute2, codificare un'istruzione del genere:
SET OutputLocalEnvironment.Destination.HTTP.RequestIdentifier = CAST(InputRoot.XML.A.MessageID AS BLOB);