Почему мой сгенерированный сервис CXF не работает? - PullRequest
0 голосов
/ 05 апреля 2019

Я выполняю миграцию нашего проекта с Axis на Apache CXF.Я хочу использовать CXF без пружины (пока).Я сгенерировал свои сервисы и объекты с помощью плагина codegen CXF apache, но для некоторых сервисы работать не будут.

Когда я пытаюсь выставить сервис, который не генерируется плагином codex CXF, он работает ... Может кто-нибудь сказатьмне почему один работает, а другой нет.

Прежде всего мой web.xml

    <servlet>
        <display-name>SimpleCXFNonSpringServlet</display-name>
        <servlet-name>SimpleCXFNonSpringServlet</servlet-name>
        <servlet-class>xxx.SimpleCXFNonSpringServlet</servlet-class>
    </servlet>

    <servlet>
        <display-name>GreetingCXFNonSpringServlet</display-name>
        <servlet-name>GreetingCXFNonSpringServlet</servlet-name>
        <servlet-class>xxx.GreetingCXFNonSpringServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>SimpleCXFNonSpringServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>GreetingCXFNonSpringServlet</servlet-name>
        <url-pattern>/greeting/*</url-pattern>
    </servlet-mapping>

Это веб-сервис, который работает.Всякий раз, когда я захожу на localhost /reeting , я получаю список доступных сервисов SOAP.

@WebService
public interface GreetingService {
    public String helloWorld(@WebParam(name="name") String name);
}
@WebService(endpointInterface = "xxx.GreetingService", serviceName = "GreetingService")
public class GreetingServiceImpl implements GreetingService {

    @Override
    public String helloWorld(String name) {
        return "Hello World, " + name + "!";
    }
}
public class GreetingCXFNonSpringServlet extends CXFNonSpringServlet {

    private static final long serialVersionUID = 1L;

    @Override
    public void loadBus(ServletConfig servletConfig) {
        super.loadBus(servletConfig);
        ServerFactoryBean factory = new JaxWsServerFactoryBean();
        factory.setBus(bus);
        factory.setServiceClass(GreetingService.class);
        factory.setServiceBean(new GreetingServiceImpl());
        factory.setAddress("/calcService");
        factory.create();
    }
}

Это веб-сервис, который НЕ работает.Всякий раз, когда я захожу на localhost / services , он говорит: «Службы не найдены».Класс DocumentGeneratorService был создан с помощью плагина apache cxf codegen.

/**
 * This class was generated by Apache CXF 3.1.18
 * 2019-04-05T14:54:36.480+02:00
 * Generated source version: 3.1.18
 * 
 */
@WebService(targetNamespace = "http://stack.nl/overflow/DocumentGenerator", name = "DocumentGeneratorService")
@XmlSeeAlso({ObjectFactory.class, xxx.ObjectFactory.class, xxx.ObjectFactory.class})
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface DocumentGeneratorService {

    @WebMethod(action = "http://stack.nl/overflow/DocumentGenerator/DocumentGenerator/GenereerDocument")
    @WebResult(name = "genereerDocumentResponse", targetNamespace = "http://stack.nl/overflow/DocumentGenerator", partName = "parameters")
    public DocumentGeneratorResponse genereerDocument(
        @WebParam(partName = "parameters", name = "genereerDocumentRequest", targetNamespace = "http://stack.nl/overflow/DocumentGenerator")
        DocumentGeneratorRequest parameters
    );
}

@WebService(endpointInterface = "xxx.DocumentGeneratorService", serviceName = "DocumentGeneratorService")
public class DocumentGeneratorServiceImpl implements DocumentGeneratorService {

    @Override
    public DocumentGeneratorResponse genereerDocument(DocumentGeneratorRequest parameters) {
        return new DocumentGeneratorResponse();
    }
}
public class SimpleCXFNonSpringServlet extends CXFNonSpringServlet {

    private static final long serialVersionUID = 1L;

    @Override
    public void loadBus(ServletConfig servletConfig) {
        super.loadBus(servletConfig);
        ServerFactoryBean factory = new JaxWsServerFactoryBean();
        factory.setBus(bus);
        factory.setServiceClass(DocumentGeneratorService.class);
        factory.setServiceBean(new DocumentGeneratorServiceImpl());
        factory.setAddress("/calcService");
        factory.create();
    }
}

Код кажется мне идентичным, но, очевидно, это не так ... Может ли это быть, потому что класс DocumentService находится вдругой модуль maven, который он включил в качестве зависимости?

...