So you mean to say that in my Producer, I can get all the properties that I need to use to connect to the service from the Message body. I'm just wondering how. Just for me to be clear, here is a scenario wherein the paypal call is made based on the result of a http call
from(httpCallWithPayPalParametersSetByTheUser).to(paypal://adaptivepayments?operation=pay) So if I understand this correctly, the result of the from(...) operation will have the parameters set in the Message's body and I can get that form there are create the PayPal type objects and call the PayPal API? Regrds, Jothi On Mon, Feb 25, 2013 at 10:59 PM, Christian Müller < christian.muel...@gmail.com> wrote: > 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 > > >