【问题标题】:Why spring wrong generate java classes from xsd为什么spring错误从xsd生成java类
【发布时间】:2016-04-22 06:31:00
【问题描述】:

我在下面描述了 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 文件后,我只看到“StartTestRequest”请求。我的问题,为什么/在哪里请求我的输入数据(“版本”、“时间”)?

提前致谢。

【问题讨论】:

  • 你能添加你的wsdl文件吗?

标签: java spring xsd wsdl


【解决方案1】:

Spring 只为具有后缀“request”和“response”的元素生成请求/响应。在这种情况下,您从“ReqStartTest”引用“StartTestRequest”。因此,您只会看到其中只有名称字段的“StartTestRequest”。您应该在“StartTestRequest”中扩展或引用“ReqStartTest”

以下应该可以正常工作。

<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 服务请求或响应的元素。默认后缀是“请求”和“响应”。您可以在配置中更改它。这个帖子可能对你有帮助: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>

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

【讨论】:

  • 好的,我明白了,谢谢。
猜你喜欢
  • 2015-08-13
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 2010-09-20
相关资源
最近更新 更多