dernière CXF avec le Printemps: AVERTISSEMENT: javax.ws.rs.NotFoundException
Je suis en mesure d'accéder à des services REST à partir de l'adresse url du navigateur: http://localhost:8080/assignment/services/services/test/test1
De Ma servlet, je l'utilise pour appeler la méthode de service comme indiqué ci-dessous. Maintenant, j'ai besoin de l'appeler par le REPOS de services, mais l'obtention d'erreur ci-dessous.
URL url = new URL("http://localhost:8080/assignment/services/services/"+userName+"/"+password);
System.out.println("URL-->"+url);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/xml");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
while(bufferedReader.readLine() != null){
result = bufferedReader.readLine();
}
// result = userService.login(userName, password);
System.out.println(result);
voici l'erreur:
INFO: Reloading Context with name [/assignment] is completed
URL-->http://localhost:8080/assignment/services/test/test1
Jul 30, 2013 12:52:02 PM org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor processRequest
WARNING: No root resource matching request path /assignment/services/test/test1 has been found, Relative Path: /test/test1. Please enable FINE/TRACE log level for more details.
Jul 30, 2013 12:52:02 PM org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse
WARNING: javax.ws.rs.NotFoundException
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:172)
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:100)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java
...
Jul 30, 2013 12:52:02 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [LoginServlet] in context with path [/assignment] threw exception
java.io.FileNotFoundException: http://localhost:8080/assignment/services/services/test/test1
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1623)
at com.viasat.test.login.servlet.LoginServlet.process(LoginServlet.java:77)
at com.viasat.test.login.servlet.LoginServlet.doPost(LoginServlet.java:52)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
Classe de Service:
@Service
@Path("/services/")
public class UserServiceImpl implements UserService {
@GET
@Path("{userName}/{password}")
@Produces(MediaType.TEXT_XML)
public String login(@PathParam("userName")String username, @PathParam("password")String password)
throws JAXBException, PropertyException, FileNotFoundException {
web.xml:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<display-name>LoginServlet</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.abc.test.login.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
Mise à jour:
pom.xml:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>1.9.12</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
Maintenant Javax.ws.rs.NotFoundException disparu, mais, Fichier non trouvé exception vient toujours.
Vous dites que vous demandez comme:
désolé, j'ai été le tester avec des valeurs différentes selon les commentaires ci-dessous.
URL url = new URL("http://localhost:8080/assignment/services/services/"+userName+"/"+password); System.out.println("URL-->"+url);
, pourtant, le journal affiche: URL-->http://localhost:8080/assignment/services/test/test1
?désolé, j'ai été le tester avec des valeurs différentes selon les commentaires ci-dessous.
OriginalL'auteur bekur | 2013-07-30
Vous devez vous connecter pour publier un commentaire.
Solution-1
L'une des solution est que la version de problème avec CXF et au Printemps. J'ai fait cxf version 2.5.2 qui évite javax.ws.rs.NotFoundException.
Maintenant, j'ai mis à jour pour
J'ai été en utilisant 2.7.5 cxf version.
Solution -2
Dans ma classe de service, j'ai fait
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
au lieu de@Produces(MediaType.TEXT_XML)
OriginalL'auteur bekur
L'URL que vous utilisez pour tirer la requête GET a deux niveaux de services:
mais dans le RESTE de la classe du service, il y a un seul "services" niveau en Chemin. Vous devrez peut-être modifier le Chemin d'accès Param comme ça:
Vous devriez mettre un chemin fixe dans la méthode du chemin param. Voir mon code mis à jour dans la résolution.
u peut partager l'web.xml
Vous avez besoin de changer cette ligne <url-pattern>/services/*</url-pattern> <url-pattern>/cession/*</url-pattern>
toujours pas utiliser après la modification, même erreur
OriginalL'auteur Juned Ahsan
Je pense que les "services" est, par défaut, le chemin d'accès où CXF expose auto-généré WADLs et ne peut donc pas être utilisé dans un chemin d'accès aux ressources.
Essayez de modifier les "services" d'un autre mot dans votre web.xml et classe de Service (@Path) ou de modifier le CXF servlet config comme (voir le service-liste-chemin param):
Référence: http://cxf.apache.org/docs/jaxrs-services-description.html (section Service des inscriptions et WADL requêtes presque à la fin).
OriginalL'auteur Christophe L
une commune de la raison de cette erreur est que cxf ne peut pas trouver une bonne mise en œuvre pour le service restful pour correspondre à la demande de la ressource méthode tard. la spécification est ambiguious dans ce domaine, mais votre jaxrs annotations dans l'interface doit correspondre à la mise en œuvre de cxf.
--eliani
OriginalL'auteur eliani
Comme décrit dans CXF projet throws java.lang.NoClassDefFoundError: javax/ws/rs/NotFoundException la
Erreur peut être résolu par l'ajout d'
OriginalL'auteur Achim