为什么spring错误地从xsd生成java类

时间:2016-04-22 06:31:00

标签: java spring xsd wsdl

我在下面有xsd架构描述

  <xs:element name="ReqStartTest">   
    <xs:complexType> 
        <xs:sequence> 
            <xs:element name="Version" >
                <xs:simpleType>
                    <xs:restriction base="xs:string" />
                </xs:simpleType>
            </xs:element>   
            <xs:element name="Time" >
                <xs:simpleType>
                    <xs:restriction base="xs:string" />
                </xs:simpleType>
            </xs:element>   
            <xs:element ref="tns:StartTestRequest" minOccurs="1" maxOccurs="1"></xs:element>
        </xs:sequence>
    </xs:complexType> 
</xs:element>    
<xs:element name="StartTestRequest">   
    <xs:complexType> 
        <xs:sequence> 
            <xs:element name="Name" >
                <xs:simpleType>
                    <xs:restriction base="xs:string" />
                </xs:simpleType>
            </xs:element>   
        </xs:sequence>
    </xs:complexType> 
</xs:element>   

从xsd文件生成java类后,收到* .wsdl文件。在我测试SOAPUI中的* .wsdl文件之后,我只看到&#34; StartTestRequest&#34;请求。我的问题是,为什么/我的输入数据(&#34;版本&#34;,&#34;时间&#34;)在请求中?

提前致谢。

1 个答案:

答案 0 :(得分:0)

Spring只为具有后缀的元素生成请求/响应&#34; request&#34;和#34;回应&#34;。在这种情况下,您正在引用&#34; StartTestRequest&#34;来自&#34; ReqStartTest&#34;。所以,你只会看到&#34; StartTestRequest&#34;其中只有名称字段。您应该扩展或引用&#34; ReqStartTest&#34;在你的&#34; StartTestRequest&#34;

以下应该可以正常工作。

<complexType name="ReqStartTest">
    <sequence>
        <element name="Version" type="string"/>
        <element name="Time" type="string"/>
    </sequence>
</complexType>

<element name="StartTestRequest">
    <complexType>
        <complexContent>
            <extension base="tns:ReqStartTest">
                <sequence>
                    <element name="Name" type="string"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
</element>

<强>更新

Spring需要预定义的后缀来标识作为Web服务的请求或响应的元素。默认后缀为&#34;请求&#34;和#34;回应&#34;。您可以在配置中更改它。此主题可能会对您有所帮助:Spring-ws: How to create Wsdl from an xsd with no "Request" element

这也是您在不更改后缀的情况下获得的最接近的内容:

<element name="ReqStartTestRequest">
    <complexType>
        <sequence>
            <element name="version" type="string"/>
            <element name="time" type="string"/>
            <element name="startTestRequest" type="tns:StartTestRequest"/>
        </sequence>
    </complexType>
</element>

<complexType name="StartTestRequest">
    <sequence>
        <element name="name" type="string"/>
    </sequence>
</complexType>

我强烈建议您遵循命名约定。例如,变量或非常量字段的首字母应为小写(camelcase表示法)。