我有一组Java项目。我在父项目中有一个父build.gradle,每个子项目都有一个build.gradle。结构是这样的:
./my-projects
├── project1
│ ├── build.gradle
├── project2
│ ├── build.gradle
├── build.gradle ---> (parent build file)
├── gradle.properties
├── settings.gradle
├── springboot.gradle ---> (common stuff for all sub projects)
├── subprojects.gradle ---> (common stuff for all sub projects)
在父build.gradle中,我有这个:
apply from: 'springboot.gradle'
apply from: 'subprojects.gradle'
在subprojects.gradle中,我在依赖项中声明了此依赖项:
subprojects {
dependencies {
compile "org.springframework.boot:spring-boot-starter-web-services"
}
}
Project1和Project2具有相同的性质。两者都是Spring Boot应用程序。两者都使用@RestController批注来公开一组REST服务。问题归结为:虽然project1可以完美地用作REST服务,但project2却不能。由于某些原因,project2充当SOAP服务。我在project2中有GET / project2 / my / service之类的服务,它希望将XML作为输入,而Spring一直在期待SOAP Envelop。这是错误:
Servlet.service() for servlet [messageDispatcherServlet] in context with path [/project2] threw exception [Request processing failed; nested exception is org.springframework.ws.soap.SoapMessageCreationException: Could not create message from InputStream: Unable to create envelope from given source: ; nested exception is com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source: ] with root cause
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source because the root element is not named "Envelope"
如果我从subprojects.gradle中删除 compile org.springframework.boot:spring-boot-starter-web-services ,则project2可以正常工作。我读过一些文档说,要拥有SOAP服务,您需要包含 spring-boot-starter-web-services 依赖项。在这里:
https://spring.io/guides/gs/producing-web-service/
我知道我可以通过删除 spring-boot-starter-web-services 来解决此问题,但是我不能仅仅删除它,这就是为什么:我使用project1和project2来描述我的问题,但现实是我已经签出了一个包含15个应用程序的项目,而我正尝试添加第16个应用程序。 spring-boot-starter-web-services 依赖已经存在很长时间了,我不能仅仅为了使我的第16个项目正常工作就将其删除。
我需要了解为什么 spring-boot-starter-web-services 可以用于所有其他15种REST应用程序,而不适用于我的第16款新应用程序。
我在第16个应用程序build.gradle中执行了此变通方法,但没有帮助我理解为什么事情无法按预期进行。
configurations {
all.collect { configuration ->
configuration.exclude group: 'org.springframework.ws', module: 'spring-ws-core'
}
}