我正在迈出Spring Boot的第一步并创建一个SOAP Web服务。
在制作SOAP Web服务(https://spring.io/guides/gs/producing-web-service/)教程之后,我设法创建了一个有效的简单Web服务。
扩展该示例,现在我正在尝试创建具有多个操作的Web服务。 这次我使用wsdl生成所有JAXB类。 一切都是正确生成的,我可以调用Web服务并获得wsdl。
然后我使用SOAP UI根据返回的wsdl为我的方法生成示例请求,但是当我尝试执行它们时,我收到错误(实际上是警告):
WARN 10280 --- [nio-8080-exec-1] o.s.ws.server.EndpointNotFound:找不到[SaajSoapMessage Ping]的端点映射
过去两天我一直被困在这里。 认为问题可能与我的端点方法的参数不匹配,我尝试创建一个接收单个字符串的operationg(Ping),但即使那个字符串也失败。
我正在使用配置程序类,我可以找到的所有示例都使用配置文件(web.xml和servlet文件),我无法将各个部分放在一起来解决这个问题。
这是我的配置类(我删除了导入以节省空间):
package ws;
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/SVN/*");
}
@Bean (name = "SVNClient")
public Wsdl11Definition defaultWsdl11Definition() {
SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition();
wsdl11Definition.setWsdl(new ClassPathResource("/wsdl/SVNClient.wsdl"));
return wsdl11Definition;
}
}
这是我拥有端点的类(我删除了导入以节省空间):
package ws;
@Endpoint
public class WebServiceEndPoint {
private static final String NAMESPACE_URI = "http://gestion.svn.client";
@Autowired
public WebServiceEndPoint() {
System.out.println("Entramos en WebServiceEndPoint");
}
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "Ping")
public @ResponsePayload PingResponse ping() {
PingResponse resposta = new PingResponse();
resposta.setOut("I'm in");
return resposta;
}
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "getLog")
public @ResponsePayload GetLogResponse getLog(@RequestPayload InputParameters wsPayload) {
GetLogResponse response = new GetLogResponse();
response.setCODERROR("0");
response.setMENSAJEERROR("I'm in");
return response;
}
我怀疑是:
@Endpoint
和@PayloadRoot
注释是否足以将端点映射到Web服务操作?我的意思是:
答案 0 :(得分:0)
重建wsdl后,它开始工作了。 我想有些东西不对,它与我的终点定义不匹配。