Yes,and we normally put the parameters into the message header.
-- Willem Jiang Red Hat, Inc. FuseSource is now part of Red Hat Web: http://www.fusesource.com | http://www.redhat.com Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) (English) http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese) Twitter: willemjiang Weibo: 姜宁willem On Tuesday, February 26, 2013 at 1:58 PM, Joe San wrote: > 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 (mailto: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 > > (mailto: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 (http://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 > > >