CXF jaxws конечная точка относительный адрес публикации - PullRequest
8 голосов
/ 16 августа 2011

У меня много трудностей при попытке использовать относительный адрес публикации в конфигурации моей конечной точки веб-службы CXF.

У меня есть простой Java-первый проект JAX-WS со следующими файлами конфигурации:

applicationContent-cxf.xml:

<beans xmlns=...>
    ...
    <jaxws:endpoint
        id="helloWorldService"
        implementorClass="org.helloworld.ws.HelloWorldServiceImpl"
        implementor="#helloWorldServiceImpl" <!-- spring managed -->
        endpointName="sayHello"
        address="HelloWorldService"/>
</beans>

web.xml:

<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            WEB-INF/applicationContext.xml
            WEB-INF/applicationContext-cxf.xml
        </param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <display-name>Hello World Servlet</display-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
</web-app>

В соответствии с http://cxf.apache.org/docs/servlet-transport.html, кажется, что я должен быть в состоянии указать адрес публикации HelloWorldService, и URL-адрес службы разрешается (например) http://localhost:8080/services/HelloWorldService. Но когдаЯ пытаюсь перейти на http://localhost:8080/services/HelloWorldService?wsdl, я получаю 404. Если я изменяю адрес публикации в моей конечной точке jaxws на абсолютный URL http://localhost:8080/services/HelloWorldService, я могу получить доступ к wsdl.

Я хочуукажите относительный адрес конечной точки, если это возможно.Я новичок в использовании CXF (и написании веб-служб), поэтому любая помощь очень ценится!

ОБНОВЛЕНИЕ 1:

Обратите внимание, что я развертываю свой веб-сервис вTomcat 7. Я не знаю, что это регистрирует, но одна из строк в моем журнале запуска показывает Setting the server's publish address to be HelloWorldService.Если кому-то нужна дополнительная информация, чтобы помочь мне, пожалуйста, дайте мне знать.

ОБНОВЛЕНИЕ 2:

Похоже, что CXF обнаруживает, используется ли CXFServlet, и используетвстроенный причал, если это не так.http://cxf.apache.org/docs/xfire-migration-guide.html#XFireMigrationGuide-HTTPandServletSetup. Итак, по какой-то причине CXF использует встроенный экземпляр Jetty вместо моего сервлета.Однако я не знаю, какая дополнительная конфигурация мне нужна, кроме HelloWorldServlet в моем web.xml, и документация по CXF мне больше не помогает.

Ответы [ 2 ]

14 голосов
/ 18 августа 2011

Ответ был, конечно, простым (то есть простым ударом по столу). В моих определениях бинов cxf я не импортировал файл "cxf-servlet.xml", как показано здесь http://cxf.apache.org/docs/servlet-transport.html. Если этот файл не импортирован, cxf предполагает, что он должен использовать встроенный экземпляр Jetty вместо моего сервлета CXF. Я предполагаю, что экземпляр Jetty работает только с конечными точками, указывающими абсолютный адрес публикации.

0 голосов
/ 16 августа 2011

Разве это не должно быть

address="/HelloWorldService"

?

...