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?
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. –
Lokalizacją wsdlLocation może być również plik lokalny. – Aaron