Получение WSDL от веб-службы CXF, работающей на Tomcat - PullRequest
0 голосов
/ 17 февраля 2012

Ответ: Я знаю, что это не то, что подходит для разрешения, но я возился с файлами web.xml и servlet.xml, и по какой-то причине это работает сейчас, я могу получитьсписок сервисов и файлы wsdl просто отлично.Я сравнил свои новые файлы со старыми, написанными ниже, и единственное отличие состоит в том, что web.xml имеет имя CXFServlet вместо LoginService, и я дал конечной точке cxfservlet.xml адрес сейчас.

IУ меня возникла проблема, когда я (наконец-то) сделал развертывание веб-сервиса CXF на Tomcat.Или, скорее, он запускается и не выдает никаких предупреждений или исключений в журнале Tomcat при развертывании и повторном развертывании.Проблема в том, что я не могу получить WSDL рассматриваемой службы.Я начинаю думать, что я не понимаю файлы web.xml и cxf.xml так, как я думал.

Когда я пишу http://localhost:8080/services/Login?wsdl, я ожидаю, что WSDL появится,но все, что я получаю, это 404. Что я делаю не так?Как я уже сказал, я не получаю никаких исключений, так в чем же моя проблема?

Редактировать: Из-за некоторых полезных отзывов (которые я помнил, чтобы пометить как полезные), я понял, что, возможно, неправильно установил контекстный путьмой web.xml.Я разворачиваю службу через приложение менеджера в Tomcat в файле с именем LoginService.war.Возникает вопрос: могу ли я это сделать?Будет ли tomcat знать, искать ли класс CXFServlet в библиотеке LoginService, или он будет выглядеть в ROOT?Нужно ли перенастроить сервер, чтобы он мог запускаться с http://localhost:8080/LoginService?

web.xml

<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>LoginService</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:metadata/Login/cxfservlet.xml</param-value>
</context-param>
<listener>
<listener-class>
  org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>LoginService</servlet-name>
<servlet-class>
    org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginService</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>

cxfservlet.xml

 <beans xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://cxf.apache.org
 /jaxws http://cxf.apache.org/schemas/jaxws.xsd">
 <jaxws:endpoint id="LoginService"
 implementor="orgserver.services.Login" wsdlLocation="WEB-INF/LoginService.wsdl"
 address="/">
 </jaxws:endpoint>
 </beans>

1 Ответ

4 голосов
/ 17 февраля 2012

Вам не нужно устанавливать wsdlLocation, если нет другого способа получить доступ к вашему сервису, кроме http://localhost:8080/services/. Также wsdlLocation будет URL-адресом.

Я предполагаю, что вы развернули свое приложение в ROOT.war (корневой контекст) в Tomcat, поскольку до /services.

нет пути к контексту.

Что отображается, когда вы просматриваете http://localhost:8080/services (без трейлинга /)? Он должен предоставить вам список доступных служб, включая адрес WSDL. Если вы наведите курсор мыши на адрес WSDL, он покажет вам фактический URL.

...