Я работаю на клиенте веб-сервиса (Soap) с Spring MVC и Eclipse и получаю следующую ошибку:
вложенным исключением является javax.xml.ws.WebServiceException: метод
checkToken выставлен как WebMethod, но нет соответствующего wsdl
операция с именем
Что я сделал:
- Создан тестовый класс с
psvm
, вызывающим тот же метод
- Попытка добавления
cxf-rt-frontend-jaxws
согласно некоторым сообщениям StackOverflow
Я получаю 500 страницу с:
Тип отчета об исключении
Ошибка обработки запроса сообщения; вложенное исключение
javax.xml.ws.WebServiceException: метод checkToken отображается как
WebMethod, но нет соответствующей операции wsdl с именем
{http://troparo.org/services/ConnectService/}checkToken в
WSDL: PortType {http://troparo.org/services/ConnectService/}IConnectService
Описание Сервер обнаружил непредвиденное состояние, которое
помешал ему выполнить запрос.
Исключение:
org.springframework.web.util.NestedServletException: Запрос
обработка не удалась; вложенное исключение
javax.xml.ws.WebServiceException: метод checkToken отображается как
WebMethod, но нет соответствующей операции wsdl с именем
{http://troparo.org/services/ConnectService/}checkToken в
WSDL: PortType {http://troparo.org/services/ConnectService/}IConnectService
org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:1013)
org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:897)
javax.servlet.http.HttpServlet.service (HttpServlet.java:634)
org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:882)
javax.servlet.http.HttpServlet.service (HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:53)
Основная причина javax.xml.ws.WebServiceException: метод checkToken имеет значение
выставлено как WebMethod, но нет соответствующей операции wsdl
с именем {http://troparo.org/services/ConnectService/}checkToken в
WSDL: PortType {http://troparo.org/services/ConnectService/}IConnectService
Метод с ошибкой (checkToken) существует и отлично работает при вызове из изолированного класса
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.2.7</version>
</dependency>
<!-- compile only, deployed container will provide this -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servletapi.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api -->
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-core -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>3.2.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.2.7</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.2.7</version>
</dependency>
Мой контроллер:
@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView add(@RequestParam("login") String login, @RequestParam("password") String password) {
ConnectService cs = new ConnectService();
GetTokenRequestType t = new GetTokenRequestType();
t.setLogin("lokii");
t.setPassword("111");
try {
GetTokenResponseType responseType = cs.getConnectServicePort().getToken(t);
System.out.println("response: " + responseType.getReturn());
} catch (BusinessException e) {
e.printStackTrace();
}
ModelAndView mv = new ModelAndView();
String name = "Hello " + login;
mv.addObject("token", token);
mv.setViewName("result");
return mv;
}
Вызванный метод принимает логин и pwd для возврата объекта токена
Спасибо!