如何使用JAXWS / JAXB重命名参数

时间:2009-09-25 13:57:09

标签: java jaxb jax-ws

我使用CXF(2.2.3)编译Amazon Web Service WSDL(http://s3.amazonaws.com/ec2-downloads/2009-07-15.ec2.wsdl

但是得到了如下错误。

  

参数:snapshotSet已存在   方法describeSnapshots但是   类型   com.amazonaws.ec2.doc._2009_07_15.DescribeSnapshotsSetType   代替   com.amazonaws.ec2.doc._2009_07_15.DescribeSnapshotsSetResponseType。   使用JAXWS / JAXB绑定自定义   重命名参数。

冲突是由于以下数据类型显示的:

<xs:complexType name="DescribeSnapshotsType">
                <xs:sequence>
                    <xs:element name="snapshotSet" type="tns:DescribeSnapshotsSetType"/>
                </xs:sequence>
            </xs:complexType>

<xs:complexType name="DescribeSnapshotsResponseType">
                <xs:sequence>
                    <xs:element name="requestId" type="xs:string"/>
                    <xs:element name="snapshotSet" type="tns:DescribeSnapshotsSetResponseType"/>
                </xs:sequence>
            </xs:complexType>

我创建了一个绑定文件尝试解决问题...但它没有完成工作

   <jaxws:bindings
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    wsdlLocation="EC2_2009-07-15.wsdl"
    xmlns="http://java.sun.com/xml/ns/jaxws"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">

    <enableWrapperStyle>false</enableWrapperStyle>
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://ec2.amazonaws.com/doc/2009-07-15/']">
     <jxb:bindings node="xs:complexType[@name='tns:DescribeSnapshotsType']//xs:element[@name='snapshotSet']">
         <jxb:property name="snapshotRequestSet"/>
     </jxb:bindings>
     <jxb:bindings node="xs:complexType[@name='DescribeSnapshotsResponseType']//xs:element[@name='snapshotSet']">
         <jxb:property name="snapshotResponseSet"/>
     </jxb:bindings>     
    </jaxws:bindings>
</jaxws:bindings>

我使用的命令如下所示

<wsdlOptions>
     <wsdlOption>
          <wsdl>${basedir}/src/main/resources/wsdl/EC2_2009-07-15.wsdl</wsdl>
          <extraargs>
            <extraarg>-b</extraarg>
            <extraarg>${basedir}/src/main/resources/wsdl/Bindings_EC2_2009-07-15.xml</extraarg>
          </extraargs>
    </wsdlOption>
</wsdlOptions>

我的代码出了什么问题????

你可以使用svn来查看我的项目.... svn co http://shrimpysprojects.googlecode.com/svn/trunk/smartcrc/AWSAgent/

4 个答案:

答案 0 :(得分:1)

在您的绑定文件中,您使用xs:.....但名称空间http://www.w3.org/2001/XMLSchema的引用为xds,因此如果它不起作用,请尝试将引用xsd重命名为{{ 1}} (顺便感谢解决方案,它的工作原理)

答案 1 :(得分:0)

这部分

<enableWrapperStyle>false</enableWrapperStyle>

应该是

<jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>

答案 2 :(得分:0)

正如@PascalThivent所提到的,CXF有一个你应该尝试使用的参数-autoNameResolution。不幸的是,CXF在遭遇此消息时给出的消息并未提及。

答案 3 :(得分:0)

对于尝试此操作的任何人:我总结了所有更正:

array_pad