wsimport не использует сложные типы ввода - PullRequest
9 голосов
/ 04 ноября 2011

Когда я использую wsimport для генерации прокси для некоторых сервисов, результирующая сигнатура метода для каждого порта, похоже, не использует сложные типы, указанные в WSDL; но все же я заметил, что с некоторыми другими услугами это делает.

Это произошло с несколькими службами, но самым свежим примером является AWSEConsumerService от Amazon ( ссылка на WSDL ). Когда я генерирую код прокси службы с помощью wsimport, я получаю подписи методов, такие как следующие для каждого порта.

@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);

Я бы ожидал, что этот метод примет единственный комплексный параметр, указанный WSDL (в данном случае объект ItemLookup). Я что-то неправильно понимаю или что-то ненормальное происходит с генерацией кода?

1 Ответ

7 голосов
/ 09 ноября 2011

Я столкнулся с аналогичной проблемой с AWS.Я следовал описанию настройки API для Java (стр. 10 этого pdf

На шаге 2 (там сказано для Eclipse 3.2) вы должны создать файл (имя sugessted - jaxws-custom.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>

и затем запустите команду wsimport с параметром -b jaxws-custom.xml

Я не выяснил, в чем конкретно проблема, ноэто помогло мне.

...