Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The Envelope Wrapper EIP allows existing systems to participate in a messaging exchange that places specific requirements on the message format, such as message header fields or encryption. It wraps application data inside an envelope that is compliant with the messaging infrastructure. The message is unwrapped when it arrives at the destination. For more information, refer to http://www.eaipatterns.com/EnvelopeWrapper.html.

Image Modified

 

 

 

 

 

 

Figure 1: Envelope Wrapper EIP

...

This example scenario receives a message with application data wrapped inside an envelope, unwraps the message, and sends it to a specific endpoint. The sender sends the request inside a SOAP envelopenvelope. Once the ESB receives the envelopenvelope, it unwraps the envelop it and sends it as a Plain Old XML (POX) request to the sample back-end Axis2 server.

...

Before digging into implementation details, let's take a look at the relationship between the example scenario and the Envelope Wrapper EIP by comparing their core components.

Envelope Wrapper EIP (Figure 1: Enveloper Wrapper EIPFigure 2: )Envelope Wrapper Example Scenario (Figure 2)
WrapperStock Quote Request wrapped in SOAP
Messaging SystemWSO2 ESB
UnwrapperAddress Endpoint format
RecipientStock Quote Service Instance
Alternative Implementation
Info
title

An alternative implementation of this EIP is to have the wrapping be done by the Address Endpoint wrap from one envelope format to another (for example, wrapping a SOAP 1.1 envelope in a SOAP 1.2 envelope).

Environment setup

  1. Download an and install the WSO2 ESB from http://wso2.com/products/enterprise-service-bus. For a list of prerequisites and step-by-step installation instructions, refer to Getting Started Installation Guide in the WSO2 ESB documentation.
  2. Start the sample Axis2 server. For instructions, refer to the section Setting Up the ESB Samples Setup - Starting Sample Back-End Servicesthe Axis2 server in the WSO2 ESB documentation.

...

Start the ESB server and log into its management console UI (https://localhost:9443/carbon). In the management console, navigate to the Main Menu, click Service Bus and then Source View menu and click Source View in the Service Bus section. Next, copy and paste the following configuration, which helps you explore the example scenario, to the source view. 

Anchor
step3
step3

...

  1. Send the following request using a SOAP client like SOAP UI SoapUI, and monitor the message using TCPMon.
     

    Code Block
    languagehtml/xml
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.samples" xmlns:xsd="http://services.samples/xsd">
       <soapenv:Header/>
       <soapenv:Body>
          <ser:getQuote>     
             <ser:request>           
                <xsd:symbol>Foo<symbol>foo</xsd:symbol>
             </ser:request>        
          </ser:getQuote>
       </soapenv:Body>
    </soapenv:Envelope>
  2. Notice that the request data is inside a SOAP envelope. When the request was monitored through TCPMon before it was sent to the ESB, it was structures structured as follows.:

    Code Block
    POST /services/EnvelopeUnwrapProxy HTTP/1.1 
    Accept-Encoding: gzip,deflate 
    Content-Type: text/xml;charset=UTF-8 
    SOAPAction: "urn:getQuote" 
    Content-Length: 385 
    Host: 127.0.0.1:8281 
    Connection: Keep-Alive 
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5) 
     
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.samples" xmlns:xsd="http://services.samples/xsd">
       <soapenv:Header/>
       <soapenv:Body>
          <ser:getQuote>     
             <ser:request>           
                <xsd:symbol>Foo<symbol>foo</xsd:symbol>
             </ser:request>        
          </ser:getQuote>
       </soapenv:Body>
    </soapenv:Envelope>
  3. The request sent to the back-end Axis2 server has the following structure.:

    Code Block
    POST /services/SimpleStockQuoteService HTTP/1.1 
    Content-Type: application/xml; charset=UTF-8 
    Accept-Encoding: gzip,deflate 
    SOAPAction: urn:getQuote 
    Transfer-Encoding: chunked 
    Host: localhost:9000 
    Connection: Keep-Alive 
    User-Agent: Synapse-HttpComponents-NIO 
     
    e0 
    <ser:getQuote xmlns:ser="http://services.samples">     
             <ser:request>           
                <xsd:symbol xmlns:xsd="http://services.samples/xsd">Foo<>foo</xsd:symbol>
             </ser:request>        
          </ser:getQuote> 
    0 

    This means that the SOAP envelope was removed by the ESB.

...

Let's investigate the elements of the ESB configuration in detail. The line numbers below are mapped with the ESB configuration illustrated in step 3 shown above.

  • address [line 8 in ESB config] - The endpoint address contains the attribute format='pox', which makes the ESB convert incoming requests to Plain Old XML. Other supported formats for wrapping include soap11, soap12 and get. For more information, refer to the Address Endpoint mediator.