wsimport未使用复杂的输入类型。

9
当我使用wsimport为一些服务生成代理时,每个端口的结果方法签名似乎没有使用WSDL中指定的复杂类型;但我注意到对于其他一些服务,它确实使用了。这在多个服务上发生过,但最近的例子是亚马逊的AWSEConsumerService (link to 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个回答

9
我在AWS遇到了类似的问题。我按照Java API设置说明进行操作(本pdf的第10页)。
在第2步中(适用于Eclipse 3.2),您应该创建一个文件(建议名称为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>

然后使用选项 -b jaxws-custom.xml 运行 wsimport 命令。

我还没有弄清楚问题的具体原因,但这对我起到了作用。


这对我起作用了。尽管原始代码并不难用,但这显然使代码更清晰、更易读。我仍然很好奇为什么有些服务会出现这种情况,而其他服务则不会。 - Jeffrey P
wsdlLocation也可以是一个本地文件。 - Aaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接