A few comments:
The AdaptivePaymentsService should be created once (in the doStart()
method).
You can look up the parameter from the in message header. You can also use
a map as body and look up the properties from there. You can also let the
user configure its own binding...

Best,
Christian

Sent from a mobile device
Am 24.02.2013 02:16 schrieb "Joe San" <codeintheo...@gmail.com>:

> Camel Riders,
>
> Out of interest and with advice from Christian Müller, I took up the task
> of writing this component. I created the stubs and I'm trying now to get
> the Producer written.
>
> On a high level, PayPay adaptive payments API has different operations
> (Pay, PaymentDetails and many more....).
>
>
> https://www.x.com/developers/paypal/documentation-tools/adaptive-payments/integration-guide/APIntro
>
> So the goal is to provide integration to all those API operations. I
> downloaded the API from x.com and the API comes with a sample web
> application that has an example to all those API operations. There is a
> PayRequest type object which must be sent as a parameter to all the service
> calls to the API. So I'm currently stuck with how to stuff the values into
> the PayRequest type object.
>
> Here is a snippet from my implementation so far.... This is actually a
> snippet from my Producer
>
>     @Override
>     public void doRequest(final Exchange exchange) throws Exception {
>         final PayRequest req = populatePayRequest(exchange);
>
>         try {
>             final PayRequest request = this.populatePayRequest(exchange);
>             PayResponse resp = this.sendPayRequest(request);
>
>         }
>         catch (Exception ex) {
>
>         }
>     }
>
>     /**
>      *
>      * @param req
>      * @return
>      */
>     private PayResponse sendPayRequest(final PayRequest req) throws
> PayPalException {
>         PayResponse resp = null;
>
>         try {
>             // TODO... Get the properties from a Properties file
>             AdaptivePaymentsService service = new
> AdaptivePaymentsService(this
>
> .getClass().getResourceAsStream("/sdk_config.properties"));
>             PayResponse resp = service.pay(req);
>
>         } catch (IOException ex) {
>
>         } catch (MissingCredentialException e) {
>             e.printStackTrace();  //To change body of catch statement use
> File | Settings | File Templates.
>         } catch (InterruptedException e) {
>             e.printStackTrace();  //To change body of catch statement use
> File | Settings | File Templates.
>         } catch (ClientActionRequiredException e) {
>             e.printStackTrace();  //To change body of catch statement use
> File | Settings | File Templates.
>         } catch (SSLConfigurationException e) {
>             e.printStackTrace();  //To change body of catch statement use
> File | Settings | File Templates.
>         } catch (OAuthException e) {
>             e.printStackTrace();  //To change body of catch statement use
> File | Settings | File Templates.
>         } catch (HttpErrorException e) {
>             e.printStackTrace();  //To change body of catch statement use
> File | Settings | File Templates.
>         } catch (InvalidCredentialException e) {
>             e.printStackTrace();  //To change body of catch statement use
> File | Settings | File Templates.
>         } catch (InvalidResponseDataException e) {
>             e.printStackTrace();  //To change body of catch statement use
> File | Settings | File Templates.
>         } finally {
>             // Do some cleanup if necessary...
>         }
>
>         return resp;
>     }
>
>     /**
>      * Populate the pay request
>      * @param exchange
>      * @return
>      */
>     private PayRequest populatePayRequest(Exchange exchange) {
>
>         //final PayRequest req = (PayRequest) exchange.getIn().getBody();
>
>         Map < String, Object > headers = exchange.getIn().getHeaders();
>
>         final PayRequest req = new PayRequest();
>
>         final String currencyCode =
> headers.get(PayPalConstants.PAYPAL_CURRENCY_CODE) != null
>                 ? (String)
> headers.get(PayPalConstants.PAYPAL_CURRENCY_CODE)
>                 : config.getCurrencyCode();
>         req.setCurrencyCode(currencyCode);
>
>
>
>         final RequestEnvelope envelop =
> headers.get(PayPalConstants.PAYPAL_REQUEST_ENVELOP) != null
>                 ? new
>
> RequestEnvelope((String)headers.get(PayPalConstants.PAYPAL_REQUEST_ENVELOP))
>                 : new RequestEnvelope(config.getRequestEnvelopErrorLang());
>
>         final List < Receiver > receiver = populateReceiver(headers);
>         final ClientDetailsType clientDetails =
> populateClientDetails(headers);
>
>
>         return req;
>     }
>
> Given below is a snippet from the sample web application that came with the
> API that I downloaded. All I want to know is of an elegant way to create
> the PayRequest object for the API call. What I want to avoid is to provide
> the user with a whole bunch of parameters that he has to set in the header
> to make the PayPal API call.
>
>     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='PaymentDetails'>PaymentDetails</a></li><li><a
> href='Refund'>Refund</a></li><li><a
> href='GetPaymentOptions'>GetPaymentOptions</a></li><li><a
> href='ExecutePayment'>ExecutePayment</a></li><li><a
> href='SetPaymentOptions'>SetPaymentOptions</a></li></ul>");
>         RequestEnvelope requestEnvelope = new RequestEnvelope("en_US");
>
>         com.paypal.svcs.types.ap.PayRequest req = new
> com.paypal.svcs.types.ap.PayRequest();
>
>         List<com.paypal.svcs.types.ap.Receiver> receiver = new
> ArrayList<com.paypal.svcs.types.ap.Receiver>();
>
>         com.paypal.svcs.types.ap.Receiver rec = new
> com.paypal.svcs.types.ap.Receiver();
>         if (request.getParameter("amount") != "")
>
> rec.setAmount(Double.parseDouble(request.getParameter("amount")));
>         if (request.getParameter("mail") != "")
>             rec.setEmail(request.getParameter("mail"));
>         if (request.getParameter("invoiceID") != "")
>             rec.setInvoiceId(request.getParameter("invoiceID"));
>         if (request.getParameter("paymentSubType") != "")
>             rec.setPaymentSubType(request.getParameter("paymentSubType"));
>         if (request.getParameter("paymentType") != "")
>             rec.setPaymentType(request.getParameter("paymentType"));
>         if (request.getParameter("phoneNumber") != "") {
>             PhoneNumberType phone = new PhoneNumberType(
>                     request.getParameter("countryCode"),
>                     request.getParameter("phoneNumber"));
>             phone.setExtension(request.getParameter("extension"));
>             rec.setPhone(phone);
>         }
>         if (request.getParameter("setPrimary") != "")
>             rec.setPrimary(Boolean.parseBoolean(request
>                     .getParameter("setPrimary")));
>         receiver.add(rec);
>         ReceiverList receiverlst = new ReceiverList(receiver);
>         req.setReceiverList(receiverlst);
>         req.setRequestEnvelope(requestEnvelope);
>         ClientDetailsType clientDetails = new ClientDetailsType();
>         if (request.getParameter("applicationID") != "")
>             clientDetails.setApplicationId(request
>                     .getParameter("applicationID"));
>         if (request.getParameter("customerID") != "")
>
> clientDetails.setCustomerId(request.getParameter("customerID"));
>         if (request.getParameter("customerType") != "")
>
> clientDetails.setCustomerType(request.getParameter("customerType"));
>         if (request.getParameter("deviceID") != "")
>             clientDetails.setDeviceId(request.getParameter("deviceID"));
>         if (request.getParameter("location") != "")
>             clientDetails.setGeoLocation(request.getParameter("location"));
>         if (request.getParameter("ipAddress") != "")
>             clientDetails.setIpAddress(request.getParameter("ipAddress"));
>         if (request.getParameter("model") != "")
>             clientDetails.setModel(request.getParameter("model"));
>         if (request.getParameter("partnerName") != "")
>
> clientDetails.setPartnerName(request.getParameter("partnerName"));
>         req.setClientDetails(clientDetails);
>         if (request.getParameter("ipnNotificationURL") != "")
>             req.setIpnNotificationUrl(request
>                     .getParameter("ipnNotificationURL"));
>         if (request.getParameter("memo") != "")
>             req.setMemo(request.getParameter("memo"));
>         if (request.getParameter("pin") != "")
>             req.setPin(request.getParameter("pin"));
>         if (request.getParameter("senderEmail") != "")
>             req.setSenderEmail(request.getParameter("senderEmail"));
>         if (request.getParameter("feesPayer") != "")
>             req.setFeesPayer(request.getParameter("feesPayer"));
>         FundingConstraint fundingConstraint = new FundingConstraint();
>         List<FundingTypeInfo> fundingTypeInfoList = new
> ArrayList<FundingTypeInfo>();
>         if (request.getParameter("fundingType") != "") {
>             FundingTypeInfo fundingTypeInfo = new FundingTypeInfo(
>                     request.getParameter("fundingType"));
>             fundingTypeInfoList.add(fundingTypeInfo);
>         }
>         FundingTypeList fundingTypeList = new FundingTypeList(
>                 fundingTypeInfoList);
>         fundingConstraint.setAllowedFundingType(fundingTypeList);
>         req.setFundingConstraint(fundingConstraint);
>         if (request.getParameter("preapprovalKey") != "")
>             req.setPreapprovalKey(request.getParameter("preapprovalKey"));
>         if (request.getParameter("reverseAllPaymentsOnError") != "")
>             req.setReverseAllParallelPaymentsOnError(Boolean
>                     .parseBoolean(request
>                             .getParameter("reverseAllPaymentsOnError")));
>
>         SenderIdentifier senderIdentifier = new SenderIdentifier();
>         if (request.getParameter("senderIdentifierEmail") != "")
>             senderIdentifier.setEmail(request
>                     .getParameter("senderIdentifierEmail"));
>         if (request.getParameter("senderCountryCode") != ""
>                 && request.getParameter("senderPhoneNumber") != "") {
>             PhoneNumberType senderPhone = new PhoneNumberType(
>                     request.getParameter("senderCountryCode"),
>                     request.getParameter("senderPhoneNumber"));
>             if (request.getParameter("senderExtension") != "")
>                 senderPhone.setExtension(request
>                         .getParameter("senderExtension"));
>             senderIdentifier.setPhone(senderPhone);
>         }
>         if (request.getParameter("useCredentials") != "")
>             senderIdentifier.setUseCredentials(Boolean.parseBoolean(request
>                     .getParameter("useCredentials")));
>         req.setSender(senderIdentifier);
>
>         if (request.getParameter("trackingID") != "")
>             req.setTrackingId(request.getParameter("trackingID"));
>         if (request.getParameter("actionType") != "")
>             req.setActionType(request.getParameter("actionType"));
>         if (request.getParameter("cancelURL") != "")
>             req.setCancelUrl(request.getParameter("cancelURL"));
>         if (request.getParameter("currencyCode") != "")
>             req.setCurrencyCode(request.getParameter("currencyCode"));
>         if (request.getParameter("returnURL") != "")
>             req.setReturnUrl(request.getParameter("returnURL"));
>         AdaptivePaymentsService service = new AdaptivePaymentsService(this
>                 .getClass().getResourceAsStream("/sdk_config.properties"));
>         try {
>             com.paypal.svcs.types.ap.PayResponse resp = service.pay(req);
>             response.setContentType("text/html");
>             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());
>                     map.put("Correlation ID", resp.getResponseEnvelope()
>                             .getCorrelationId());
>                     map.put("Time Stamp", resp.getResponseEnvelope()
>                             .getTimestamp());
>                     map.put("Pay Key", resp.getPayKey());
>                     map.put("Payment Execution Status",
>                             resp.getPaymentExecStatus());
>                     if (resp.getDefaultFundingPlan() != null)
>                         map.put("Default Funding Plan", resp
>
> .getDefaultFundingPlan().getFundingPlanId());
>                     map.put("Redirect URL",
>                             "<a href=
> https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_ap-payment&paykey=";
>                                     + resp.getPayKey()
>                                     + ">
> https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_ap-payment&paykey=";
>                                     + resp.getPayKey() + "</a>");
>                     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();
>         }
>
>     }
>
> Thanks for going through such a long post.
>
> Regards,
> Jothi
>

Reply via email to