亚马逊产品广告API - 使用Java / SOAP

时间:2016-02-02 11:41:43

标签: java amazon-web-services soap amazon amazon-product-api

我有批量itemlookup

的问题

com.sun.xml.internal.ws.client.ClientTransportException:

   com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 503: Service Unavailable
     

com.sun.xml.internal.ws.client.ClientTransportException:服务器发送HTTP状态码503:服务不可用           at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.checkStatusCode(HttpTransportPipe.java:296)           at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.createResponsePacket(HttpTransportPipe.java:245)           在com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:203)           在com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:122)           at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:95)           在com.sun.xml.internal.ws.api.pipe.Fiber .__ doRun(Fiber.java:626)           在com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:585)           在com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:570)           在com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:467)           在com.sun.xml.internal.ws.client.Stub.process(Stub.java:308)           在com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:146)           at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)           at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)           在com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:129)           在$ Proxy29.itemLookup(未知来源)

此itemLookup使用以下请求:

    List<String> resGroup = new ArrayList<String>();
    resGroup.add("Offers");
    resGroup.add("Images");
    resGroup.add("ItemAttributes");
    resGroup.add("ItemIds");

    ItemLookupRequest request = new ItemLookupRequest();
    request.getItemId().addAll(asins);  //asins is an ArrayList<String> of 10 asins
    request.setMerchantId(merchant);
    request.setCondition(condition);
    request.getResponseGroup().addAll(resGroup);

    ItemLookup itemLookup = new ItemLookup();

    itemLookup.setAWSAccessKeyId(AWS_ACCESS_KEY);
    itemLookup.setAssociateTag(ASSOC_TAGS.get("en-GB"));
    itemLookup.getRequest().add(request);

    response = port.itemLookup(itemLookup);   **<-- This line throws the Exception**

此代码已经工作了3年,每24小时以10个批次查看大约26,000个项目,没有任何问题,但是在接下来的日期已经为当天的每次查找返回了503个。

2015年4月5日, 2015年4月6日

2015年4月26日

2015年5月8日

2015年12月25日, 2015年12月26日

2016年1月25日至2016年2月2日(含)

Amazon Product Advertising API文档中唯一的建议是503是由限制引起的,建议减少每秒发送的请求数。限制不应该是每次查找的问题。如果是由于限制,查找将首先成功,并且仅在达到每小时配额后返回503。情况并非如此,在给定的日期,成功查找没有,服务在其他所有时间恢复正常。

1 个答案:

答案 0 :(得分:0)

我也遇到503错误,但是当我重复请求时,它可能会成功。试试这个:

int retries = 0;
while (retries < 3){

    Thread.sleep(1500 * retries);

    try{
        response = port.itemLookup(itemLookup);
        break;
    }
    catch(Exception ex){ }
    retries++;
}

希望这有帮助。