Debugging the American Flights App | MuleSoft Documentation
# Debugging the American Flights App
Cloud IDE 
Desktop IDE 
**Open Beta Release** : The **cloud IDE is in open beta**. Any use of Anypoint Code Builder in its beta state is subject to the applicable beta services terms and conditions, available from the IDE.
Debug your American Flights interface and implementation.
## Before You Begin
Complete these procedures:
  1. Designing the American Flights API Spec
  2. Integrating American Flights Processes
  3. Implementing the American Flights API Spec


## Add Components
To facilitate debugging, add Set Variable and Logger components to your American Flights implementation:
  1. Open the implementation file (`implementation.xml`).
  2. After the Database Select operation (`<db:select/>`) named **Query Flights** , add a Set Variable component:
In the configuration XML, provide this `<set-variable/>` configuration:
```
<set-variable value="#[payload]"
   doc:name="Set variable Payload"
   variableName="databasePayload" />
```

  3. After the Transform component (`<ee:transform>`), add a Logger component with this configuration:
```
<logger doc:name="Log Payload" message="#[
  %dw 2.0
  output application/json
  ---
  payload]" />
```

Click for the complete implementation XML example.
```
<flow name="getFlights">
  <logger doc:name="Logger" doc:id="ahcnzm" />
  <db:select doc:name="Query Flights" doc:id="pvuqsc" config-ref="Database_Config" >
    <db:sql>
      <![CDATA[Select * FROM american]]>
    </db:sql>
  </db:select>
  <set-variable value="#[payload]" doc:name="Set variable Payload"
     variableName="databasePayload" doc:id="vtptsr" /> **(1)**
  <ee:transform doc:name="Transform Message" doc:id="uniqueId" >
    <ee:message >
      <ee:set-payload >
        <![CDATA[
        %dw 2.0
        output application/json
        ---
        payload map ( payload01 , indexOfPayload01 ) -> {
         ID: payload01.ID,
         code: (payload01.code1 default "") ++ (payload01.code2 default ""),
         price: payload01.price default 0,
         departureDate: payload01.takeOffDate as String default "",
         origin: payload01.fromAirport default "",
         destination: payload01.toAirport default "",
         emptySeats: payload01.seatsAvailable default 0,
         plane: {
          "type": payload01.planeType default "",
          totalSeats: payload01.totalSeats default 0
         }
        }
        ]]>
      </ee:set-payload>
    </ee:message>
  </ee:transform>
<logger doc:name="Log Payload" message="#[
  %dw 2.0
  output application/json
  ---
  payload]" /> **(2)**
</flow>
```

Set Variable component  
---  
Logger component  
  4. Proceed to Add Breakpoints.
Learn to set up breakpoints to pause execution of your app.


## Add Breakpoints
Add breakpoints to your American Flights project:
  1. Open the _interface_ (`interface.xml`) for your American Flights project.
  2. Select the **Run and Debug** icon in the activity bar:
  3. In the interface file (`interface.xml`), add a breakpoint to the line that contains the `<flow-ref/>` component:
Alternatively, use F9 to add a breakpoint to the line.
  4. Open the implementation file (`implementation.xml`) for your American Flights project, and add breakpoints to the `<db:select/>` and `<set-variable/>` components.
  5. Notice that all the breakpoints are now listed in the **Breakpoints** panel:
  6. Proceed to Start a Debugging Session.
Run a debugging session, and inspect the message and variables at different points during your app’s execution.


## Start a Debugging Session
  1. From the **Run and Debug** menu, click **Debug Mule Application** :
The IDE packages the app and opens a new terminal that deploys the app to the embedded Mule runtime engine:
  2. Proceed to Test Your American Flights App.


## Test Your American Flights App
After starting your debugging session:
  1. From your IDE, open the Terminal window in the console:
     * In the desktop IDE, select **View** > **Terminal**.
     * In the cloud IDE, click the (menu) icon, and select **Terminal** > **New Terminal**.
     * For either IDE: Press Ctrl and then press the backtick key (`).
  2. In the terminal, use a `curl` command to make a GET request to the listener in the _interface_ (`interface.xml`) instead of the implementation:
```
curl http://localhost:8081/api/flights
```

Notice the `_/api/flights_`in the URI for the listener in the interface. For more information about this step, seeTrigger a flow.
  3. In your American Flights project, notice that the execution of the app stops at your first breakpoint:
The breakpoint is located in your interface file (`interface.xml`).
  4. In your debug toolbar, click the **Step Over** button to continue execution to the next breakpoint, at the `<db:select/>` element in `implementation.xml`.
  5. In the **Run and Debug** sidebar, notice that the **Variables** panel provides information about the Mule event at the breakpoint:
  6. Click the **Step Over** button on your debug toolbar to continue execution to your next breakpoint, at the `<set-variable/>` element.
  7. In the **Variables** panel, navigate to **Mule Message** > **Payload** , and notice that the database response is an array of flight data:
  8. Proceed to Add a Watch Expression.
Notice the `_/api/flights_`in the URI for the listener in the interface. For more information about this step, seeTrigger a flow.
  3. In your American Flights project, notice that the execution of the app stops at your first breakpoint:
The breakpoint is located in your interface file (`interface.xml`).
  4. In your debug toolbar, click the **Step Over** button to continue execution to the next breakpoint, at the `<db:select/>` element in `implementation.xml`.
  5. In the **Run and Debug** sidebar, notice that the **Variables** panel provides information about the Mule event at the breakpoint:
  6. Click the **Step Over** button on your debug toolbar to continue execution to your next breakpoint, at the `<set-variable/>` element.
  7. In the **Variables** panel, navigate to **Mule Message** > **Payload** , and notice that the database response is an array of flight data:
  8. Proceed to Add a Watch Expression.


## Add a Watch Expression
  1. From the **Run and Debug** sidebar, open the **Watch** panel.
  2. Click the **+** icon in the panel, and add the expression `payload.^mediaType`:
  3. Click the **Step Over** button until your execution moves to the Transform Message component (`<ee:transform/>`).
  4. Notice that the payload is `application/java`:
  5. Continue clicking the **Step Over** button until you reach the Logger component (`<logger>`).
  6. Notice that your payload transforms to `application/json`:
  7. Click the **Continue** button in the debug toolbar, and notice that the app returns the response from the database to your REST client or browser.
Click for the complete implementation XML example.
```
[
  {
    "ID": 1,
    "code": "rree0001",
    "price": 541,
    "departureDate": "2016-01-20T00:00:00",
    "origin": "MUA",
    "destination": "LAX",
    "emptySeats": 0,
    "plane": {
      "type": "Boeing 787",
      "totalSeats": 200
    }
  },
  {
    "ID": 2,
    "code": "eefd0123",
    "price": 300,
    "departureDate": "2016-01-25T00:00:00",
    "origin": "MUA",
    "destination": "CLE",
    "emptySeats": 7,
    "plane": {
      "type": "Boeing 747",
      "totalSeats": 345
    }
  },
  {
    "ID": 3,
    "code": "ffee0192",
    "price": 300,
    "departureDate": "2016-01-20T00:00:00",
    "origin": "MUA",
    "destination": "LAX",
    "emptySeats": 0,
    "plane": {
      "type": "Boeing 777",
      "totalSeats": 300
    }
  },
  {
    "ID": 4,
    "code": "rree1000",
    "price": 200,
    "departureDate": "2016-01-20T00:00:00",
    "origin": "MUA",
    "destination": "CLE",
    "emptySeats": 5,
    "plane": {
      "type": "Boeing 737",
      "totalSeats": 150
    }
  },
  {
    "ID": 5,
    "code": "rree1093",
    "price": 142,
    "departureDate": "2016-02-11T00:00:00",
    "origin": "MUA",
    "destination": "SFO",
    "emptySeats": 1,
    "plane": {
      "type": "Boeing 737",
      "totalSeats": 150
    }
  },
  {
    "ID": 6,
    "code": "ffee1112",
    "price": 954,
    "departureDate": "2016-01-20T00:00:00",
    "origin": "MUA",
    "destination": "CLE",
    "emptySeats": 100,
    "plane": {
      "type": "Boeing 787",
      "totalSeats": 200
    }
  },
  {
    "ID": 7,
    "code": "eefd1994",
    "price": 676,
    "departureDate": "2016-01-01T00:00:00",
    "origin": "MUA",
    "destination": "SFO",
    "emptySeats": 0,
    "plane": {
      "type": "Boeing 777",
      "totalSeats": 300
    }
  },
  {
    "ID": 8,
    "code": "ffee2000",
    "price": 300,
    "departureDate": "2016-02-20T00:00:00",
    "origin": "MUA",
    "destination": "SFO",
    "emptySeats": 30,
    "plane": {
      "type": "Boeing 737",
      "totalSeats": 150
    }
  },
  {
    "ID": 9,
    "code": "eefd3000",
    "price": 900,
    "departureDate": "2016-02-01T00:00:00",
    "origin": "MUA",
    "destination": "SFO",
    "emptySeats": 0,
    "plane": {
      "type": "Boeing 737",
      "totalSeats": 150
    }
  },
  {
    "ID": 10,
    "code": "eefd4511",
    "price": 900,
    "departureDate": "2016-01-15T00:00:00",
    "origin": "MUA",
    "destination": "LAX",
    "emptySeats": 100,
    "plane": {
      "type": "Boeing 777",
      "totalSeats": 300
    }
  },
  {
    "ID": 11,
    "code": "rree4567",
    "price": 456,
    "departureDate": "2016-01-20T00:00:00",
    "origin": "MUA",
    "destination": "SFO",
    "emptySeats": 100,
    "plane": {
      "type": "Boeing 737",
      "totalSeats": 150
    }
  }
]
```

  8. Proceed to Stop the Debugging Session.


## Stop the Debugging Session
To stop your debugging session:
  1. Click the **Stop** button on your debug toolbar:
  2. Proceed to Deploying the American Flights App.