我正在尝试将Spring WebMVC和Apache CXF结合起来,但无法找到该服务。为什么?

问题描述 投票:0回答:1

我正在尝试使用spring-WebMVC和apache CXF设置项目,但是如果我尝试调用web服务,则会出现一条消息,告诉我:“找不到服务。”

在apache tomcat日志中,有一个警告:

org.apache.cxf.transport.servlet.ServletController invoke
WARNING: Can't find the request for 
http://localhost:8080/HelloWebService/rs/user-service/users's Observer 

以下是项目配置:

  1. web.xml中: <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>RESTful service</display-name> <description></description> <session-config> <session-timeout>30</session-timeout> </session-config> <context-param> <param-name>webAppRootKey</param-name> <param-value>cxf.rest.root</param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/log4j.properties</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/appContext*.xml</param-value> </context-param> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/rs/*</url-pattern> </servlet-mapping> </web-app>
  2. MVC-调度-servlet.xml中 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="org.home.playground" /> <mvc:annotation-driven/> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean>
  3. appContext.xml <?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:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd" default-lazy-init="false"> <import resource="classpath:META-INF/cxf/cxf.xml"/> <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> <jaxrs:server id="userService" address="/"> <jaxrs:serviceBeans> <ref bean="userService" /> </jaxrs:serviceBeans> <jaxrs:extensionMappings> <entry key="xml" value="application/xml" /> <entry key="json" value="application/json" /> </jaxrs:extensionMappings> </jaxrs:server> <bean id="userService" class="org.home.playground.services.UserService"/> </beans>

我使用这个index.jsp作为webapp的第一页。 index.jsp包含以下代码:

<html>
<body>
    <h2>CXF RESTful services and Spring-WebMVC Test page</h2>
    <a href="rs/user-service/users">get all users</a>
    <br />
</body>
</html>

宁静的Web服务看起来像这样:

package org.home.playground.interfaces;

import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.home.playground.apputils.UserCollection;
import org.home.playground.models.User;

@Path("/user-service/")
@Produces("application/xml")
public interface IUserService {

    @GET
    @Path("/users")
    @Produces({"application/xml", "application/json"})
    public UserCollection getUsers();

    @GET
    @Path("/user/{id}")
    public User getUser(@PathParam("id") Integer id);

    @GET
    @Path("/users/bad")
    public Response getBadRequest();

    @POST
    @Path("/new")
    @Produces(MediaType.TEXT_HTML)
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public void newUser(
            @FormParam("id") Integer id,
            @FormParam("name") String name,
            @Context HttpServletResponse servletResponse
    ) throws IOException;


}

我的Spring-webMVC控制器看起来像这样:

package org.home.playground.web.controllers;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloWorldController {

    @RequestMapping("/")
    protected ModelAndView showHelloWorldView(HttpServletRequest request, HttpServletResponse response) throws Exception {

        ModelAndView model = new ModelAndView("index");

        return model;
    }
    @RequestMapping("/postUser")
    protected ModelAndView postUserForm(HttpServletRequest request, HttpServletResponse response) throws Exception {

        ModelAndView model = new ModelAndView("postUser");

        return model;
    }
}

你知道为什么我不能调用网络服务吗?是否有可能将Spring-WebMVC与apache CXF结合起来,还是这些框架不能兼容一个项目?如果您需要更多信息,请告诉我,我会提供。非常感谢您的帮助,并提前感谢您。

spring-mvc cxf
1个回答
0
投票

我已将项目拆分为2个项目。一个项目包含Web服务,另一个包含Spring WebMVC。我不确定是否有另一种可能性来解决这个问题,但它的工作原理是这样的。

© www.soinside.com 2019 - 2024. All rights reserved.