Quando utilizzo wsimport per generare proxy per alcuni servizi, la firma del metodo risultante per ciascuna porta non sembra utilizzare i tipi complessi specificati nel WSDL; ma ho notato che con altri servizi lo fa.wsimport che non utilizza tipi di input complessi
Questo è successo su più servizi, ma l'esempio più recente è Amazon AWSEConsumerService (link to WSDL). Quando si genera il codice del proxy del servizio utilizzando wsimport, ottengo firme del metodo come le seguenti per ciascuna porta.
@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);
ci si aspetterebbe questo metodo prendere il parametro complesso unico specificato in WSDL (in questo caso un oggetto ItemLookup). Sono fondamentalmente frainteso qualcosa o c'è qualcosa di anormale che accade con la generazione del codice?
Questo ha funzionato per me. Anche se il codice originale non era inutilizzabile, questo certo ha portato a un codice molto più pulito e più leggibile. Sono ancora curioso del perché alcuni servizi si traducono in questo, ma altri no. –
La posizione wsdl può anche essere un file locale. – Aaron