Cuando uso wsimport para generar proxies para algunos servicios, la firma del método resultante para cada puerto no parece usar los tipos complejos especificados en el WSDL; pero aún noté que con algunos otros servicios sí lo hace.wsimport no usa tipos de entrada complejos
Esto ha sucedido en varios servicios, pero el ejemplo más reciente es AWSEConsumerService de Amazon (link to WSDL). Cuando genero el código proxy del servicio usando wsimport, obtengo firmas de métodos como las siguientes para cada puerto.
@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);
que esperaría este método toma el parámetro complejo único especificado por el WSDL (en este caso un objeto ItemLookup). ¿Estoy básicamente malentendiendo algo o hay algo anormal que ocurre con la generación de código?
Esto funcionó para mí. Aunque el código original no era inutilizable, este cierto dio como resultado un código mucho más limpio y legible. Todavía tengo curiosidad de por qué algunos servicios dan como resultado esto, pero otros no. –
El wsdlLocation también puede ser un archivo local. – Aaron