java - 带有 Spring : WARNING: javax. ws.rs.NotFoundException 的最新 CXF

标签 java rest servlets cxf

我可以从浏览器 url 访问 REST 服务:http://localhost:8080/assignment/services/services/test/test1

在我的 servlet 中,我使用如下所示调用服务方法。现在我需要通过 REST 服务调用但出现以下错误。

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);

这里是错误:

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)

服务类:

@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>

更新: 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>

现在 Javax.ws.rs.NotFoundException 没有了,但是,File not found 异常仍然出现。

最佳答案

解决方案一

解决方案之一是 CXF 和 Spring 的版本问题。我已将 cxf 版本设为 2.5.2,这避免了 javax.ws.rs.NotFoundException。

现在我已经更新到

<spring.version>3.2.2.RELEASE</spring.version>
<cxf.version>2.5.2</cxf.version>

我使用的是 2.7.5 cxf 版本。

解-2

在我的服务课上我做了

@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) 而不是

@Produces(MediaType.TEXT_XML)

关于java - 带有 Spring : WARNING: javax. ws.rs.NotFoundException 的最新 CXF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17954148/

相关文章:

Java Web 应用程序错误,可能在 web.xml 中

java - 无法编译 JSP : The type java. util.Map$Entry 的类无法解析。它是从所需的 .class 文件间接引用的

java - 使用 Java API 向 XSLT 程序提供参数

python - 使用 Python Eve 添加 mongoDB 文档数组元素

java - 多态 Jackson 反序列化 : getting either a string or an array of strings

angularjs - Angular 和 CORS

具有Swagger或其他文档的带有定义参数(request.POST)的Django Rest Framework自定义POST URL端点

java - 如何将参数从标签传递到JSP?

java - T 类型数组(Java 泛型)

java - JUnit 从 Spring 上下文中的测试中排除基类