public static CurrencyConversionList createInstance(
      Map<String, String> map, String prefix, int index) {
    CurrencyConversionList currencyConversionList = null;
    int i = 0;
    if (index != -1) {
      if (prefix != null && prefix.length() != 0 && !prefix.endsWith(".")) {
        prefix = prefix + "(" + index + ").";
      }
    } else {
      if (prefix != null && prefix.length() != 0 && !prefix.endsWith(".")) {
        prefix = prefix + ".";
      }
    }

    CurrencyType baseAmount = CurrencyType.createInstance(map, prefix + "baseAmount", -1);
    if (baseAmount != null) {
      currencyConversionList =
          (currencyConversionList == null) ? new CurrencyConversionList() : currencyConversionList;
      currencyConversionList.setBaseAmount(baseAmount);
    }
    CurrencyList currencyList = CurrencyList.createInstance(map, prefix + "currencyList", -1);
    if (currencyList != null) {
      currencyConversionList =
          (currencyConversionList == null) ? new CurrencyConversionList() : currencyConversionList;
      currencyConversionList.setCurrencyList(currencyList);
    }
    return currencyConversionList;
  }
  /** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    // TODO Auto-generated method stub
    HttpSession session = request.getSession();
    session.setAttribute("url", request.getRequestURI());
    session.setAttribute(
        "relatedUrl",
        "<ul><li><a href='Pay'>Pay</a></li><li><a href='Refund'>Refund</a></li><li><a href='Preapproval'>Preapproval</a></li></ul>");
    RequestEnvelope requestEnvelope = new RequestEnvelope("en_US");

    List<CurrencyType> currency = new ArrayList<CurrencyType>();
    CurrencyType type1 = new CurrencyType();
    /** (Required) The amount to be converted. */
    if (request.getParameter("amount") != "")
      type1.setAmount(Double.parseDouble(request.getParameter("amount")));

    /** (Required) The currency code. */
    if (request.getParameter("code") != "") type1.setCode(request.getParameter("code"));
    currency.add(type1);
    CurrencyList baseAmountList = new CurrencyList(currency);
    List<String> currencyCode = new ArrayList<String>();

    /** (Required) A list of currencies to convert to. */
    if (request.getParameter("convertTo") != "")
      currencyCode.add(request.getParameter("convertTo"));

    CurrencyCodeList convertToCurrencyList = new CurrencyCodeList(currencyCode);

    ConvertCurrencyRequest req =
        new ConvertCurrencyRequest(requestEnvelope, baseAmountList, convertToCurrencyList);
    /**
     * (Optional)The conversion type allows you to determine the converted amounts for a PayPal user
     * in different currency conversion scenarios, e.g., sending a payment in a different currency
     * than what this user holds, accepting payment in a different currency than what the user
     * holds, or converting a balance to a different currency than the user holds.. The default
     * value is SENDER_SIDE
     */
    if (request.getParameter("conversionType") != "")
      req.setConversionType(request.getParameter("conversionType"));
    /**
     * (Optional)The two-character ISO code for the country where the function is supposed to
     * happen. The default value is US.
     */
    if (request.getParameter("countryCode") != "")
      req.setCountryCode(request.getParameter("countryCode"));

    // Configuration map containing signature credentials and other required configuration.
    // For a full list of configuration parameters refer in wiki page
    // (https://github.com/paypal/sdk-core-java/wiki/SDK-Configuration-Parameters)
    Map<String, String> configurationMap = Configuration.getAcctAndConfig();

    // Creating service wrapper object to make an API call by loading configuration map.
    AdaptivePaymentsService service = new AdaptivePaymentsService(configurationMap);

    response.setContentType("text/html");
    try {

      // if (request.getParameter("ConvertBtn").equals("convert")) {
      ConvertCurrencyResponse resp = service.convertCurrency(req);
      if (resp != null) {
        session.setAttribute("RESPONSE_OBJECT", resp);
        session.setAttribute("lastReq", service.getLastRequest());
        session.setAttribute("lastResp", service.getLastResponse());
        if (resp.getResponseEnvelope().getAck().toString().equalsIgnoreCase("SUCCESS")) {
          Map<Object, Object> map = new LinkedHashMap<Object, Object>();
          map.put("Ack", resp.getResponseEnvelope().getAck());

          /**
           * Correlation identifier. It is a 13-character, alphanumeric string (for example,
           * db87c705a910e) that is used only by PayPal Merchant Technical Support. Note: You must
           * log and store this data for every response you receive. PayPal Technical Support uses
           * the information to assist with reported issues.
           */
          map.put("Correlation ID", resp.getResponseEnvelope().getCorrelationId());

          /**
           * Date on which the response was sent, for example: 2012-04-02T22:33:35.774-07:00 Note:
           * You must log and store this data for every response you receive. PayPal Technical
           * Support uses the information to assist with reported issues.
           */
          map.put("Time Stamp", resp.getResponseEnvelope().getTimestamp());
          Iterator<CurrencyConversionList> iterator =
              resp.getEstimatedAmountTable().getCurrencyConversionList().iterator();
          int index = 1;
          while (iterator.hasNext()) {
            CurrencyConversionList currencyList = iterator.next();
            map.put("Amount to be converted" + index, currencyList.getBaseAmount().getAmount());
            Iterator<CurrencyType> currencyIterator =
                currencyList.getCurrencyList().getCurrency().iterator();
            int innerIndex = 1;
            while (currencyIterator.hasNext()) {
              CurrencyType currencyType = currencyIterator.next();
              map.put("Currency" + innerIndex, currencyType.getCode());
              map.put("Converted Amount" + innerIndex, currencyType.getAmount());
              innerIndex++;
            }
            index++;
          }
          session.setAttribute("map", map);
          response.sendRedirect("Response.jsp");
        } else {
          session.setAttribute("Error", resp.getError());
          response.sendRedirect("Error.jsp");
        }
      }

      // }
    } catch (SSLConfigurationException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (InvalidCredentialException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (HttpErrorException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (InvalidResponseDataException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (ClientActionRequiredException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (MissingCredentialException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (OAuthException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }