Как исправить вложенное исключение javax.xml.ws.WebServiceException - PullRequest
0 голосов
/ 08 января 2019

Я работаю на клиенте веб-сервиса (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 для возврата объекта токена

Спасибо!

...