Rev 12459 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/******************************************************************************** Copyright 2009 Amazon Services.* Licensed under the Apache License, Version 2.0 (the "License");** You may not use this file except in compliance with the License.* You may obtain a copy of the License at: http://aws.amazon.com/apache2.0* This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR* CONDITIONS OF ANY KIND, either express or implied. See the License for the* specific language governing permissions and limitations under the License.* ******************************************************************************* Marketplace Web Service Java Library* API Version: 2009-01-01* Generated: Wed Feb 18 13:28:48 PST 2009**/package com.amazonaws.mws.samples;import in.shop2020.feeds.products.AmazonEnvelope;import in.shop2020.feeds.products.CE;import in.shop2020.feeds.products.HandheldOrPDA;import in.shop2020.feeds.products.Header;import in.shop2020.feeds.products.Product;import in.shop2020.feeds.products.StandardProductID;import in.shop2020.model.v1.catalog.Amazonlisted;import in.shop2020.model.v1.catalog.CatalogService.Client;import in.shop2020.model.v1.catalog.CatalogServiceException;import in.shop2020.thrift.clients.CatalogClient;import in.shop2020.utils.GmailUtils;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.PrintWriter;import java.io.StringWriter;import java.math.BigInteger;import java.security.DigestInputStream;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.ArrayList;import java.util.Arrays;import java.util.Calendar;import java.util.GregorianCalendar;import java.util.List;import java.util.Random;import java.util.TimeZone;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.xml.datatype.DatatypeConfigurationException;import javax.xml.datatype.DatatypeFactory;import javax.xml.datatype.XMLGregorianCalendar;import javax.xml.parsers.ParserConfigurationException;import org.apache.commons.codec.binary.Base64;import org.apache.thrift.TException;import org.apache.thrift.transport.TTransportException;import org.xml.sax.SAXException;import com.amazonaws.mws.MarketplaceWebService;import com.amazonaws.mws.MarketplaceWebServiceClient;import com.amazonaws.mws.MarketplaceWebServiceConfig;import com.amazonaws.mws.MarketplaceWebServiceException;import com.amazonaws.mws.model.FeedSubmissionInfo;import com.amazonaws.mws.model.IdList;import com.amazonaws.mws.model.ResponseMetadata;import com.amazonaws.mws.model.SubmitFeedRequest;import com.amazonaws.mws.model.SubmitFeedResponse;import com.amazonaws.mws.model.SubmitFeedResult;/**** Submit Feed Samples***/public class SubmitFBAListingFeed {/*** Just add a few required parameters, and try the service Submit Feed* functionality** @param args* unused**//*** @param args* @throws TException* @throws CatalogServiceException*/static java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");static Calendar cal=GregorianCalendar.getInstance();final public static String AMAZON_FBA_LISTING_XML = "/home/amazon/FbaListing.xml";final public static String AMAZON_FBA_SKU_PREFIX = "FBA";final public static boolean PURGE_OR_REPLACE = false;public static List<Amazonlisted> aItems=null;public static List<Long> itemIdsToUpdate=null;//public static List<in.shop2020.model.v1.catalog.Item> thriftItems=null;//public static Map<Long,AmazonItem> allItemsMap = new HashMap<Long,AmazonItem>();static{CatalogClient catalogServiceClient = null;try {catalogServiceClient = new CatalogClient();} catch (TTransportException e) {// TODO Auto-generated catch blocke.printStackTrace();}Client catalogClient = catalogServiceClient.getClient();try {aItems = catalogClient.getAllItemstoListOnFba();//thriftItems = catalogClient.getAllAliveItems();/*InventoryClient inventoryServiceClient = null;try {inventoryServiceClient = new InventoryClient();} catch (TTransportException e) {// TODO Auto-generated catch blocke.printStackTrace();}in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();Map<Long, ItemInventory> availability = inventoryClient.getInventorySnapshot(0);//System.out.println("Availability is " + availability );*//*for(in.shop2020.model.v1.catalog.Item thriftItem:thriftItems){long availableno=0;if(availability.get(thriftItem.getId())!=null){ItemInventory iteminventory = availability.get(thriftItem.getId());Map<Long,Long> itemavailability = new HashMap<Long,Long>();itemavailability = iteminventory.getAvailability();for (Map.Entry<Long,Long> entry : itemavailability.entrySet()) {availableno = availableno + entry.getValue();}}AmazonItem item = new AmazonItem(thriftItem.getId(),thriftItem.getModelName(),thriftItem.getModelNumber(),thriftItem.getSellingPrice(),thriftItem.getColor(),availableno);allItemsMap.put(item.getId(),item);}*/} catch (TException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String... args) throws CatalogServiceException, TException {/************************************************** *********************** Access Key ID and Secret Access Key ID, obtained from:* http://aws.amazon.com***********************************************************************///public static final String marketplaceId = "A21TJRUUN4KGV";final String accessKeyId = "AKIAII3SGRXBJDPCHSGQ";final String secretAccessKey = "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";final String appName = "Test";final String appVersion = "1.0";MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();/************************************************************************* Uncomment to set the appropriate MWS endpoint.************************************************************************/// US// config.setServiceURL("https://mws.amazonservices.com");// UK// config.setServiceURL("https://mws.amazonservices.co.uk");// Germany// config.setServiceURL("https://mws.amazonservices.de");// France// config.setServiceURL("https://mws.amazonservices.fr");// Italy// config.setServiceURL("https://mws.amazonservices.it");// Japan// config.setServiceURL("https://mws.amazonservices.jp");// China// config.setServiceURL("https://mws.amazonservices.com.cn");// Canada// config.setServiceURL("https://mws.amazonservices.ca");// Indiaconfig.setServiceURL("https://mws.amazonservices.in");/************************************************************************* You can also try advanced configuration options. Available options are:** - Signature Version* - Proxy Host and Proxy Port* - User Agent String to be sent to Marketplace Web Service************************************************************************//************************************************************************* Instantiate Http Client Implementation of Marketplace Web Service***********************************************************************/MarketplaceWebService service = new MarketplaceWebServiceClient(accessKeyId, secretAccessKey, appName, appVersion, config);/************************************************************************* Setup request parameters and uncomment invoke to try out sample for* Submit Feed***********************************************************************//************************************************************************* Marketplace and Merchant IDs are required parameters for all* Marketplace Web Service calls.***********************************************************************///final String merchantId = "AF6E300VE0X4D";final String merchantId = "AF6E3O0VE0X4D";// marketplaces to which this feed will be submitted; look at the// API reference document on the MWS website to see which marketplaces are// included if you do not specify the list yourselffinal IdList marketplaces = new IdList(Arrays.asList("A21TJRUUN4KGV"));SubmitFeedRequest requestlisting = new SubmitFeedRequest();//SubmitFeedRequest requestinventory = new SubmitFeedRequest();//SubmitFeedRequest requestpricing = new SubmitFeedRequest();requestlisting.setMerchant(merchantId);//requestinventory.setMerchant(merchantId);//requestpricing.setMerchant(merchantId);requestlisting.setMarketplaceIdList(marketplaces);//requestinventory.setMarketplaceIdList(marketplaces);//requestpricing.setMarketplaceIdList(marketplaces);requestlisting.setFeedType("_POST_PRODUCT_DATA_");//requestinventory.setFeedType("_POST_INVENTORY_AVAILABILITY_DATA_");//requestpricing.setFeedType("_POST_PRODUCT_PRICING_DATA_");// MWS exclusively offers a streaming interface for uploading your// feeds. This is because// feed sizes can grow to the 1GB+ range - and as your business grows// you could otherwise// silently reach the feed size where your in-memory solution will no// longer work, leaving you// puzzled as to why a solution that worked for a long time suddenly// stopped working though// you made no changes. For the same reason, we strongly encourage you// to generate your feeds to// local disk then upload them directly from disk to MWS via Java -// without buffering them in JavaFileNotFoundException// memory in their entirety.// Note: MarketplaceWebServiceClient will not retry a submit feed request// because there is no way to reset the InputStream from our client.// To enable retry, recreate the InputStream and resubmit the feed// with the new InputStream.//try {createFbaListingFeed();FileInputStream listingfis = new FileInputStream(AMAZON_FBA_LISTING_XML);requestlisting.setContentMD5(computeContentMD5HeaderValue(listingfis));requestlisting.setFeedContent(listingfis);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {invokeSubmitFeed(service,requestlisting);Thread.sleep(10);// invokeSubmitFeed(service,requestinventory);// Thread.sleep(30);// Thread.sleep(180000);// invokeSubmitFeed(service,requestpricing);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** Submit Feed request sample Uploads a file for processing together with* the necessary metadata to process the file, such as which type of feed it* is. PurgeAndReplace if true means that your existing e.g. inventory is* wiped out and replace with the contents ocf this feed - use with caution* (the default is false).** @param service* instance of MarketplaceWebService service* @param request* Action to invoke*/public static void invokeSubmitFeed(MarketplaceWebService service,SubmitFeedRequest request) throws InterruptedException {boolean retry = false;int retryCount = 0;while (!retry) {try {SubmitFeedResponse response = service.submitFeed(request);System.out.println("SubmitFeed Action Response");System.out.println("=============================================================================");System.out.println();System.out.print(" SubmitFeedResponse");System.out.println();FeedSubmissionInfo feedSubmissionInfo=null;if (response.isSetSubmitFeedResult()) {System.out.print(" SubmitFeedResult");System.out.println();SubmitFeedResult submitFeedResult = response.getSubmitFeedResult();if (submitFeedResult.isSetFeedSubmissionInfo()) {System.out.print(" FeedSubmissionInfo");System.out.println();feedSubmissionInfo = submitFeedResult.getFeedSubmissionInfo();if (feedSubmissionInfo.isSetFeedSubmissionId()) {System.out.print(" FeedSubmissionId");System.out.println();System.out.print(" "+ feedSubmissionInfo.getFeedSubmissionId());System.out.println();}if (feedSubmissionInfo.isSetFeedType()) {System.out.print(" FeedType");System.out.println();System.out.print(" "+ feedSubmissionInfo.getFeedType());System.out.println();}if (feedSubmissionInfo.isSetSubmittedDate()) {System.out.print(" SubmittedDate");System.out.println();System.out.print(" "+ feedSubmissionInfo.getSubmittedDate());System.out.println();}if (feedSubmissionInfo.isSetFeedProcessingStatus()) {System.out.print(" FeedProcessingStatus");System.out.println();System.out.print(" "+ feedSubmissionInfo.getFeedProcessingStatus());System.out.println();}if (feedSubmissionInfo.isSetStartedProcessingDate()) {System.out.print(" StartedProcessingDate");System.out.println();System.out.print(" "+ feedSubmissionInfo.getStartedProcessingDate());System.out.println();}if (feedSubmissionInfo.isSetCompletedProcessingDate()) {System.out.print(" CompletedProcessingDate");System.out.println();System.out.print(" "+ feedSubmissionInfo.getCompletedProcessingDate());System.out.println();}}}if (response.isSetResponseMetadata()) {System.out.print(" ResponseMetadata");System.out.println();ResponseMetadata responseMetadata = response.getResponseMetadata();if (responseMetadata.isSetRequestId()) {System.out.print(" RequestId");System.out.println();System.out.print(" "+ responseMetadata.getRequestId());System.out.println();}}System.out.println(response.getResponseHeaderMetadata());retry =true;System.out.println("============Sleeping For 10 Minutes=============");Thread.sleep(600000);CheckFeedSubmission checkResult = new CheckFeedSubmission();ProcessFeed feedProcessingResult=null;int checkResultCount=0;try {while (feedProcessingResult == null){feedProcessingResult = checkResult.getResult(feedSubmissionInfo.getFeedSubmissionId(),"FbaListingFeed",0,itemIdsToUpdate);if (feedProcessingResult == null){checkResultCount++;if (checkResultCount == 5){String text = "";String[] sendTo = { "kshitij.sood@shop2020.in","chandan.kumar@shop2020.in"};String emailSubjectTxt = "Unable To Receive FBA Listing Feed Result.Submission Id "+feedSubmissionInfo.getFeedSubmissionId();String emailFromAddress = "build@shop2020.in";String password = "cafe@nes";GmailUtils mailer = new GmailUtils();try {mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());}catch (Exception e) {e.printStackTrace();}System.exit(1);}System.out.println("=====Feed Result Not Ready Retry Again After 5 Minutes=============");Thread.sleep(600000);}}} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}String emailSubjectTxt="";String[] sendTo;if (Boolean.valueOf(feedProcessingResult.getResult())){emailSubjectTxt = "FBA Listing Feed Success "+sdf.format(cal.getTime());sendTo = new String[]{ "kshitij.sood@shop2020.in","chandan.kumar@shop2020.in"};}else {emailSubjectTxt = "FBA Listing Feed Failure "+sdf.format(cal.getTime());sendTo = new String[]{ "kshitij.sood@shop2020.in","chandan.kumar@shop2020.in"};}String text = "MessagesProcessed "+feedProcessingResult.getProcessed()+"\n"+"MessagesSuccessful "+feedProcessingResult.getSuccess()+"\n"+"" +"MessagesWithError "+feedProcessingResult.getError()+"\n"+"MessagesWithWarning "+feedProcessingResult.getWarn();String emailFromAddress = "build@shop2020.in";String password = "cafe@nes";GmailUtils mailer = new GmailUtils();try {mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, "/home/amazon/feedSubmission"+"FbaListingFeed"+"Result.xml" );}catch (Exception ex) {ex.printStackTrace();}System.out.println();} catch (MarketplaceWebServiceException ex) {System.out.println("Caught Exception: " + ex.getMessage());System.out.println("Response Status Code: " + ex.getStatusCode());System.out.println("Error Code: " + ex.getErrorCode());System.out.println("Error Type: " + ex.getErrorType());System.out.println("Request ID: " + ex.getRequestId());System.out.print("XML: " + ex.getXML());System.out.println("ResponseHeaderMetadata: " + ex.getResponseHeaderMetadata());if (retryCount == 2) {StringWriter errors = new StringWriter();ex.printStackTrace(new PrintWriter(errors));String text = errors.toString();String[] sendTo = { "kshitij.sood@shop2020.in","chandan.kumar@shop2020.in"};String emailSubjectTxt = "Unable To Send FBA Listing Feed ";String emailFromAddress = "build@shop2020.in";String password = "cafe@nes";GmailUtils mailer = new GmailUtils();try {mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());}catch (Exception e) {e.printStackTrace();}System.exit(1);}retryCount++;Thread.sleep(60000);}}}public static void createFbaListingFeed() throws CatalogServiceException, TException{File file = new File(AMAZON_FBA_LISTING_XML);AmazonEnvelope amazonenvelope = new AmazonEnvelope();Header header = new Header();header.setDocumentVersion("1.0");header.setMerchantIdentifier("AF6E3O0VE0X4D");header.setOverrideReleaseId(null);amazonenvelope.setHeader(header);amazonenvelope.setMessageType("Product");amazonenvelope.setMarketplaceName(null);amazonenvelope.setPurgeAndReplace(PURGE_OR_REPLACE);JAXBContext context;Marshaller m=null;try {context = JAXBContext.newInstance(AmazonEnvelope.class);m = context.createMarshaller();} catch (JAXBException e) {e.printStackTrace();}XMLGregorianCalendar today = null;Calendar localCalendar = Calendar.getInstance(TimeZone.getDefault());int currentMonth = localCalendar.get(Calendar.MONTH);int currentYear = localCalendar.get(Calendar.YEAR);int currentDayOfMonth = localCalendar.get(Calendar.DAY_OF_MONTH);try {today = DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar(currentYear,currentMonth,currentDayOfMonth));} catch (DatatypeConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();}amazonenvelope.setEffectiveDate(today);List <AmazonEnvelope.Message> messages = amazonenvelope.getMessage();int count=0;itemIdsToUpdate = new ArrayList<Long>();for(Amazonlisted AItem:aItems){//long itemid = AItem.getItemid();//if(allItemsMap.get(Long.valueOf(itemid))!=null){AmazonEnvelope.Message message = new AmazonEnvelope.Message();Product product = new Product();product.setSKU(AMAZON_FBA_SKU_PREFIX+String.valueOf(AItem.getItemid()));/*System.out.println("Amazon Item id is " + AItem);System.out.println("Amazon Item id is " + AItem.getItemid());System.out.println("Item is " + item);System.out.println("Item id is " + item.getId());System.out.println("Item color is " + item.getColor());*//*if(AItem.getEan().length() > 0){StandardProductID spid = new StandardProductID();spid.setType("EAN");spid.setValue(AItem.getEan());product.setStandardProductID(spid);}else{if(AItem.getUpc().length() > 0){StandardProductID spid = new StandardProductID();spid.setType("UPC");spid.setValue(AItem.getUpc());product.setStandardProductID(spid);}}*/StandardProductID spid = new StandardProductID();spid.setType("ASIN");spid.setValue(AItem.getAsin());product.setStandardProductID(spid);//product.setItemPackageQuantity(BigInteger.valueOf(1));//Product.DescriptionData descdata = new Product.DescriptionData();/*if(AItem.getCategory_code()==10002){//Buisness Phonesdescdata.getRecommendedBrowseNode().add(BigInteger.valueOf(1389432031));descdata.getRecommendedBrowseNode().add(BigInteger.valueOf(1805560031));}if(AItem.getCategory_code()==10003){//High End media Phonesdescdata.getRecommendedBrowseNode().add(BigInteger.valueOf(1389432031));descdata.getRecommendedBrowseNode().add(BigInteger.valueOf(1805560031));}if(AItem.getCategory_code()==10004){//Low End media Phonesdescdata.getRecommendedBrowseNode().add(BigInteger.valueOf(1389432031));descdata.getRecommendedBrowseNode().add(BigInteger.valueOf(1805559031));}if(AItem.getCategory_code()==10005){//Basic Phonesdescdata.getRecommendedBrowseNode().add(BigInteger.valueOf(1389432031));descdata.getRecommendedBrowseNode().add(BigInteger.valueOf(1805559031));}descdata.setMfrPartNumber(AItem.getPart_number());descdata.setBrand(AItem.getBrand());descdata.setAutographed(false);descdata.setTitle(AItem.getName());descdata.setManufacturer(AItem.getManufacturer_name());descdata.setIsGiftWrapAvailable(true);descdata.setIsGiftMessageAvailable(true);*///product.setDescriptionData(descdata);//Product.ProductData productdata = new Product.ProductData();//CE ce = new CE();//ce.setColor(AItem.getColor());//HandheldOrPDA hhd = new HandheldOrPDA();//CE.ProductType productype = new CE.ProductType();//productype.setHandheldOrPDA(hhd);//ce.setProductType(productype);//productdata.setCE(ce);//product.setProductData(productdata);product.setProductTaxCode(AItem.getTaxCode());Random rand = new Random();message.setMessageID(BigInteger.valueOf(Math.abs(rand.nextInt())));message.setProduct(product);message.setOperationType("Update");messages.add(message);itemIdsToUpdate.add(AItem.getItemid());count++;}try {m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);m.marshal(amazonenvelope, file);m.marshal(amazonenvelope, System.out);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static String computeContentMD5HeaderValue( FileInputStream fis) {try {DigestInputStream dis = new DigestInputStream( fis,MessageDigest.getInstance( "MD5" ));byte[] buffer = new byte[8192];while( dis.read( buffer ) > 0 );String md5Content = new String(Base64.encodeBase64(dis.getMessageDigest().digest()));// Effectively resets the stream to be beginning of the file via afis.getChannel().position( 0 );return md5Content;} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}