2013-02-28 25 views
7

Jestem całkiem nowy dla Apache CXF i tomcat. Próbuję zbudować prostą usługę sieciową i wdrożyć ją na tomcat. poniżej jest mój web.xml Jednak gdy próbuję uzyskać dostęp do folderu "usług" przy użyciu mojej przeglądarki, oznacza to, że nie znaleziono żadnych usług. Próbowałem utworzyć klienta usługi WWW java, ale nie jest on również w stanie zlokalizować usługi. Co może być w tym złego?Apache CXF i tomcat

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <display-name>Sample web service provider</display-name> 
    <listener> 
     <!-- For Metro, use this listener-class instead: 
      com.sun.xml.ws.transport.http.servlet.WSServletContextListener --> 
     <listener-class> 
       org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 
    <!-- Remove below context-param element if using Metro --> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
       classpath:META-INF/cxf/cxf.xml 
     </param-value> 
    </context-param> 
    <servlet> 
     <servlet-name>WebServicePort</servlet-name> 
     <!-- For Metro, use this servlet-class instead: 
      com.sun.xml.ws.transport.http.servlet.WSServlet --> 
     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>WebServicePort</servlet-name> 
     <url-pattern>/services/*</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout>60</session-timeout> 
    </session-config> 
</web-app> 

Odpowiedz

6

Oznacza to, że w aplikacji nie ma żadnych usług. Twoja web.xml wydaje się być poprawna, ale właśnie przegapiłem jedną rzecz, twoją konfigurację Spring. Dodaj swoją lokalizację wiosna config w web.xml, dla np .:

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

Również trzeba utworzyć klasę, która będzie realizować swój interfejs usługi internetowej i narażać go jako punktu końcowego CXF w pliku konfiguracyjnym Wiosna applicationContext.xml. Dla np .:

<bean id="candidateImpl" class="some.pckg.CandidateImpl"/> 

<jaxws:endpoint id="candidateEndpoint" 
       implementor="#candidateImpl" 
       address="/Candidate" 
     /> 

Twoja klasa CandidateImpl powinien mieć @WebService adnotacji. Dla np

@WebService(targetNamespace = "http://something.com/ws/candidate", 
     portName = "CandidateService", 
     serviceName = "Candidate", 
     endpointInterface = "some.pckg.types.CandidateService", 
     wsdlLocation = "WEB-INF/wsdl/CandidateService.wsdl") 
public class CandidateImpl implements CandidateService { 
    //Implementation of all methods from CandidateService. 
} 

Jeśli zrobiłeś wszystko poprawnie należy zauważyć, że istnieje jedna usługa w ramach:

http(s)://whateverhost.com:<somePort>/SomeContextPath/services 

i powinieneś być w stanie pobrać plik WSDL tak:

http(s)://whateverhost.com:<somePort>/SomeContextPath/services/Candidate?wsdl 

Zobacz także:

1

Musisz ustawić lokalizację wiosna plik konfiguracyjny do tej pracy. Możesz ustawić to w następujący sposób.

1

Musisz skonfigurować serwlet w swoim web.xml. Poniżej przykład.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!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> 

    <servlet> 
     <servlet-name>CXFServlet</servlet-name> 
     <display-name>CXF Servlet</display-name> 
     <servlet-class> 
      org.apache.cxf.transport.servlet.CXFServlet 
     </servlet-class> 
     <init-param> 
      <param-name>config-location</param-name> 
      <param-value>/WEB-INF/spring-ws-servlet.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

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

</web-app> 

Teraz musisz zdefiniować plik o nazwie spring-ws-servlet.xml w folderze WEB-INF. Poniżej przykład zawartości pliku spring-ws-servlet.xml, który zawiera aktualną konfigurację usługi WWW. To zależy od logiki, oczywiście:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:jaxws="http://cxf.apache.org/jaxws" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.2.xsd 
     http://cxf.apache.org/jaxws 
     http://cxf.apache.org/schemas/jaxws.xsd"> 

    <context:component-scan base-package="com.sample.service"/> 

    <!-- JAX-WS Service Endpoint --> 
    <bean id="personImpl" class="com.sample.service.impl.PersonServiceImpl"/> 

    <jaxws:endpoint id="personEndpoint" 
        implementor="#personImpl" 
        address="/person"> 
     <jaxws:properties> 
      <entry key="schema-validation-enabled" value="true"/> 
     </jaxws:properties> 
    </jaxws:endpoint> 
    <!-- JAX-WS Service Endpoint End--> 
</beans> 

Dzięki temu można uzyskać dostęp do usługi internetowej pod http://localhost:8080/services/person?wsdl

To jest wzięte z tego postu. Jest to poradnik o tworzeniu serwisu CXF z IntelliJ IDEA i wiosną

https://aldavblog.wordpress.com/2015/01/22/creating-a-web-service-from-scratch-using-spring-maven-apache-cxf/

+0

Chociaż ten link może odpowiedzieć na pytanie, lepiej jest to tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. – tbodt

+0

OK, zaktualizowałem odpowiedź z brakującymi informacjami. Mam nadzieję, że to pomoże. –

Powiązane problemy