Spring Boot SOAP服务WSDL端点无法访问问题排查求助
嘿,我来帮你看看为啥访问WSDL会出现白标错误,咱们一步步来排查:
首先,先确认你访问的地址是不是错了!根据你的配置,正确的WSDL路径应该是:http://localhost:8080/ws/operations.wsdl
要是你直接敲/ws或者其他路径,肯定会跳白标页面,这是最容易踩的坑!
接下来咱们挨个检查可能的问题:
1. 确认XSD文件有没有放对地方
你的WebServiceConfig里指定了加载operations.xsd作为Schema,你得检查:
operations.xsd是不是真的放在src/main/resources目录下- 文件名要完全匹配,大小写也不能错(比如别写成
Operations.xsd) - XSD里的
targetNamespace必须是http://example.com/operations,要和你端点类里的命名空间完全一致,不然WSDL生成会出问题
2. 别忘了生成JAXB对应的Java类
你用了jaxb2-maven-plugin来生成OperationsRequest和OperationsResponse这些类,启动应用前得先跑这个命令:
mvn jaxb2:xjc
跑完之后去src/main/java/com/example/operations目录看看,有没有生成对应的类文件。要是没跑这个命令,启动的时候Spring找不到这些类,端点注册失败,WSDL自然也生成不了。
3. 检查端点类的注解有没有写错
你的OperationsEndPoint里的@PayloadRoot注解:
@PayloadRoot(namespace = "http://example.com/operations", localPart = "OperationsRequest")
这里的命名空间必须和XSD里的targetNamespace丝毫不差,大小写都不能错,不然Spring WS识别不了你的端点,WSDL里也就看不到对应的操作了。
4. 看看启动日志找线索
启动应用的时候,盯着控制台日志看看有没有这些错误:
- 找不到
operations.xsd的提示 - 找不到JAXB生成类的报错
- 端点注册失败的信息
这些日志能直接帮你定位问题,比如日志说找不到XSD,那就是文件路径的问题。
5. 确认Servlet映射生效了没
你的messageDispatcherServlet映射的是/ws/*,启动日志里应该能看到类似这样的输出:
Mapping servlet: 'messageDispatcherServlet' to [/ws/*]
要是没看到这个日志,说明Servlet没注册成功,检查一下WebServiceConfig类是不是被Spring扫描到了(比如包路径对不对,@Configuration和@EnableWs注解都加了没)。
把这些都检查一遍,应该就能解决WSDL访问的问题啦!
内容的提问来源于stack exchange,提问作者Sohel Shaikh

