Spring WS WSDL自动曝光:不遵循xsd导入

我正在尝试基于多个xml架构为Spring WS Web服务动态生成WSDL。 我有一个多个xsd文件,所有这些文件都是使用xsd:import元素“连接”的。

Spring WS参考说:

如果要使用包含或导入的多个模式,则需要将Commons XMLSchema放在类路径上。 如果Commons XMLSchema在类路径上,则上述元素将遵循所有XSD导入和包含,并将它们作为单个XSD在WSDL中内联。 这极大地简化了模式的部署,这仍然可以单独编辑它们。

所以我添加了这个maven依赖:

 org.apache.ws.xmlschema xmlschema-core 2.2.1  

并以这种方式配置WSDL构建器:

 @Bean(name="updateContactService") public DefaultWsdl11Definition defaultWsdl11Definition() throws Exception { DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition(); wsdl11Definition.setPortTypeName("updateContactPort"); wsdl11Definition.setLocationUri("/ws/updateContact"); wsdl11Definition.setTargetNamespace("http://spring.io/guides/gs-producing-web-service"); wsdl11Definition.setSchema(updateContactXsd()); return wsdl11Definition; } @Bean public XsdSchemaCollection updateContactXsd() throws Exception { return new SimpleXsdSchema(new ClassPathResource("xsds/contact/outboundMessage.xsd")); } 

但生成的WSDL只包含一个架构元素(并显示导入错误的位置)。

  

有小费吗? Spring WS版本是2.3.1

                                            

解决了!

我不得不使用XsdSchemaCollection而不是SimpleXsdSchema; 另外,我必须将集合的“inline”参数设置为true。

 @Bean(name="updateContactService") public DefaultWsdl11Definition defaultWsdl11Definition() throws Exception { DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition(); wsdl11Definition.setPortTypeName("updateContactPort"); wsdl11Definition.setLocationUri("/ws/updateContact"); wsdl11Definition.setTargetNamespace("http://spring.io/guides/gs-producing-web-service"); wsdl11Definition.setSchemaCollection(updateContactXsd()); return wsdl11Definition; } @Bean public XsdSchemaCollection updateContactXsd() throws Exception { CommonsXsdSchemaCollection xsds = new CommonsXsdSchemaCollection(new ClassPathResource("xsds/contact/outboundMessage.xsd")); xsds.setInline(true); <------------------- return xsds; } 

注意 :

xsds.setInline(真);

我将在Jira上打开一个问题,因为我觉得参考它并不清楚!