0

Amazon Product APIへのSearch-Requestを作成しましたが、応答が空です。コードの何が問題になっているのか、ヒントを教えてください。

コード:

String awsAccessKeyID = "<AWS-KEY>";
String test = "<ASSOCIATE-TAG>"; 

AWSECommerceService service = new AWSECommerceService();
service.setHandlerResolver(new AwsHandlerResolver("<SECRET-KEY>"));

AWSECommerceServicePortType port = service.getAWSECommerceServicePort();

ItemSearch ItemSearch = new ItemSearch();

ItemSearch.setAWSAccessKeyId(awsAccessKeyID);
ItemSearch.setAssociateTag(test);

ItemSearchRequest SearchRequest = new ItemSearchRequest();

java.util.List<ItemSearchRequest> list = ItemSearch.getRequest();

list.add(SearchRequest);

SearchRequest.setSearchIndex("All");


SearchRequest.setKeywords("nas");

ItemSearch.getRequest().add(SearchRequest);
ItemSearch.setMarketplaceDomain("https://ecs.amazonaws.de/onca/xml?Service=AWSECommerceService");


SearchRequest.getResponseGroup().add("Large");

Holder<OperationRequest> operationrequest = new Holder<OperationRequest>();

Holder<java.util.List<Items>> items = new Holder<java.util.List<Items>>();

port.itemSearch(ItemSearch.getMarketplaceDomain(), ItemSearch.getAWSAccessKeyId(), ItemSearch.getAssociateTag(), ItemSearch.getXMLEscaping(), "True", ItemSearch.getShared(), ItemSearch.getRequest(), operationrequest, items);

java.util.List<Items> result = items.value;
System.out.println(result);

ResultSetはまだ空ですが、エラーは発生していません。

4

1 に答える 1

2

私は自分が犯した間違いを見つけました。

アマゾンのwsdlで必要なJAXBのバインディング条件なしでソースを作成しました。次の制限を含むbinding.xmlファイルが必要です

<jaxws:bindings wsdlLocation="http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
  <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
</jaxws:bindings>

pom.xmlで、ビルドプロセス用に次の部分を作成しました

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>1.10</version>
    <executions>
<execution>
        <goals>
            <goal>wsimport</goal>
        </goals>
        <configuration>
            <wsdlUrls>
                <wsdlUrl>http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl</wsdlUrl>
            </wsdlUrls>
            <sourceDestDir>target/generated-sources/apt</sourceDestDir>
            <bindingFiles>
                <bindingFile>../../conf/binding.xml</bindingFile>
            </bindingFiles>
        </configuration>
        <id>wsimport-generate-AWSECommerceService</id>
        <phase>generate-sources</phase>
    </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>javax.xml</groupId>
            <artifactId>webservices-api</artifactId>
            <version>1.4</version>
        </dependency>
    </dependencies>
</plugin>

ソースを再作成した後、リクエストを次のように変更しました。

String awsAccessKeyID = "<AWS-ACCESS-KEY>";
String test = "<ASSOCIATE-TAG>"; 

AWSECommerceService service = new AWSECommerceService();
service.setHandlerResolver(new AwsHandlerResolver("<SECRET-KEY>"));

AWSECommerceServicePortType port = service.getAWSECommerceServicePort();

ItemSearchRequest itemRequest = new ItemSearchRequest();

// Fill in the request object:
itemRequest.setSearchIndex("Electronics");
itemRequest.setKeywords("NAS");
itemRequest.getResponseGroup().add("ItemAttributes");
itemRequest.setItemPage(BigInteger.valueOf(1L));


ItemSearch ItemElement = new ItemSearch();
ItemElement.setAWSAccessKeyId(awsAccessKeyID);
ItemElement.setAssociateTag(test);
ItemElement.getRequest().add(itemRequest);

ItemSearchResponse response = port.itemSearch(ItemElement);

for (Items itemList : response.getItems()) {
    for (Item itemObj : itemList.getItem()) {
        System.out.println(itemObj.getItemAttributes().getBrand());
        System.out.println(itemObj.getItemAttributes().getEAN());
    }
}
于 2012-09-25T08:25:22.530 に答える