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 >