2011-11-04 16 views
9

Kiedy używam wsimport do generowania serwerów proxy dla niektórych usług, wynikowa sygnatura metody dla każdego portu wydaje się nie używać typów złożonych określonych w pliku WSDL; ale zauważyłem, że z niektórymi innymi usługami to robi.wsimport nie używa złożonych typów wejściowych

Stało się to w wielu usługach, ale najnowszym przykładem jest usługa AWSEConsumerService firmy Amazon (link to WSDL). Kiedy generuję kod proxy usługi za pomocą wsimport, otrzymuję sygnatury metod, takie jak następujące dla każdego portu.

@WebMethod(operationName = "ItemLookup", action = "http://soap.amazon.com/ItemLookup") 
@RequestWrapper(localName = "ItemLookup", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01", className = "com.aws.CommerceService.ItemLookup") 
@ResponseWrapper(localName = "ItemLookupResponse", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01", className = "com.aws.CommerceService.ItemLookupResponse") 
public void itemLookup(
    @WebParam(name = "MarketplaceDomain", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01") 
    String marketplaceDomain, 
    @WebParam(name = "AWSAccessKeyId", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01") 
    String awsAccessKeyId, 
    @WebParam(name = "AssociateTag", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01") 
    String associateTag, 
    @WebParam(name = "Validate", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01") 
    String validate, 
    @WebParam(name = "XMLEscaping", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01") 
    String xmlEscaping, 
    @WebParam(name = "Shared", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01") 
    ItemLookupRequest shared, 
    @WebParam(name = "Request", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01") 
    List<ItemLookupRequest> request, 
    @WebParam(name = "OperationRequest", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01", mode = WebParam.Mode.OUT) 
    Holder<OperationRequest> operationRequest, 
    @WebParam(name = "Items", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01", mode = WebParam.Mode.OUT) 
    Holder<List<Items>> items); 

byłoby oczekiwać, ta metoda ma pojedynczy złożony parametr określony przez WSDL (w tym przypadku przedmiot itemLookup). Czy zasadniczo nie rozumiem czegoś lub czy coś jest nie tak z generowaniem kodu?

Odpowiedz

7

Wpadłem na podobny problem z AWS. Śledziłem z opisem konfiguracji API dla Javy (strona 10 niniejszego pdf

w kroku 2 (mówi dla Eclipse 3.2) należy utworzyć plik (sugessted imię JAXWS-custom.xml) o następującej treści:

<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> 

a następnie uruchomić komendę wsimport z opcją -b JAXWS-custom.xml

nie zorientowali się, co dokładnie jest problem, ale wystarczyły mi.

+0

to działało dla mnie, chociaż oryginalny kod nie był bezużyteczny, to pewne Dzięki temu uzyskano znacznie bardziej przejrzysty i czytelny kod. Wciąż jestem ciekawy, dlaczego niektóre usługi powodują to, ale inne nie. –

+0

Lokalizacją wsdlLocation może być również plik lokalny. – Aaron

Powiązane problemy