Spring Boot SOAP WebService新增接口404/405问题求助
Spring Boot SOAP WebService 404/405 错误排查步骤
1. 校验XSD与生成类的一致性
- 确认
AddRequest的命名空间和元素名在XSD中定义正确,检查生成的Java类上的@XmlRootElement/@XmlType注解,确保命名空间与XSD完全匹配 - 查看Maven/Gradle构建日志,确认生成Java类过程中无语法错误,XSD里
AddRequest的结构(如字段、嵌套元素)完整合法
2. 检查Endpoint注解配置
- 核对
CalculatorEndpoint中处理AddRequest的方法:@PayloadRoot的namespace必须严格匹配XSD中AddRequest的命名空间,localPart必须是XSD中定义的元素名(如AddRequest)- 方法参数需使用
@RequestPayload注解绑定生成的AddRequest类,返回值需用@ResponsePayload绑定对应的AddResponse类
- 确认
CalculatorEndpoint类已被Spring扫描(添加@Endpoint或@Component注解,且启动类扫描路径包含该类所在包)
3. 验证SOAP请求的匹配规则
- 对比正常工作的
StudentDetailRequest请求结构,检查SoapUI中AddRequest的SOAP信封:- Body内的
AddRequest元素必须携带正确的命名空间前缀,且命名空间与Endpoint的@PayloadRoot配置一致,示例:<soapenv:Body> <ns:AddRequest xmlns:ns="http://your-namespace-url"> <!-- 请求参数 --> </ns:AddRequest> </soapenv:Body> - 确保请求参数结构与XSD定义完全匹配,无多余/缺失的字段
- Body内的
4. 排查Spring WS配置类
- 检查继承
WsConfigurerAdapter的配置类:DefaultWsdl11DefinitionBean是否正确关联了修改后的XSD,setSchema方法指定的XSD路径是否正确setLocationUri的值需与Endpoint的映射路径一致(如/ws/calculator-service),确保WSDL生成的port地址指向正确接口
- 确认
messageDispatcherServlet的映射路径配置无误,未与其他请求路径冲突
5. 解决405错误
- 405表示HTTP方法不允许:Spring SOAP服务仅接受POST请求,直接用GET访问
/ws/calculator-service会触发该错误 - 检查SoapUI的请求方法是否设置为POST,避免误选GET
6. 开启日志调试定位问题
在application.properties中添加日志配置,打印SOAP请求的详细处理流程:
logging.level.org.springframework.ws=TRACE logging.level.org.springframework.ws.server.MessageTracing=TRACE
通过日志可查看:Spring WS是否接收到请求、是否匹配到对应Endpoint、请求报文是否符合契约规范
7. 校验WSDL的完整性
访问http://localhost:8080/ws/CalculatorServiceWsdl.wsdl,确认:
- WSDL中包含
AddRequest和AddResponse的类型定义 - port的地址正确指向
/ws/calculator-service - 若WSDL无新增操作,说明XSD未被正确关联到WsdlDefinition,需检查配置类中的XSD引用路径
内容的提问来源于stack exchange,提问作者Papp Zoltán
相关产品推荐
相关产品推荐

