我遵循了Spring的这个教程:https://spring.io/guides/gs/producing-web-service/并且工作得很好,但是,我没有得到它的一部分。演示应用程序接受一个XSD文件并从中生成WSDL。我的理解是XSD文件是wsdl的一个子集。Spring框架如何仅根据XSD文件找出缺失的信息?
您是正确的,WSDL
包含更多的信息。但从xsd
中提取了一些基本信息,如SOAP
可以服务的请求名称和它应该接受的参数。
然后Spring使用注释处理来处理需要附加在WSDL
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "getCountryRequest")
@ResponsePayload
public GetCountryResponse getCountry(@RequestPayload GetCountryRequest request)
Spring还从bean配置中提取信息,这些信息需要添加到WSDL
@Bean(name = "countries")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema countriesSchema) {
DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
wsdl11Definition.setPortTypeName("CountriesPort");
wsdl11Definition.setLocationUri("/ws");
wsdl11Definition.setTargetNamespace("http://spring.io/guides/gs-producing-web-service");
wsdl11Definition.setSchema(countriesSchema);
return wsdl11Definition;
}
在WSDL
中包含的所有其他未在项目中配置的内容,如果允许某些元素这样做,则作为Spring自身的默认配置应用。
使用这种方法的一个原因是,对于xsd
,您可以使用WSDL
的一些配置,但也可以创建java
域对象,这些对象是需要的,以便可以处理请求和响应。