SpringMVC整合cxf webservice出现提示No service was found解决办法

一、项目环境

    SpringMVC框架 版本:4.3.1

    CXF  版本:3.1.6

二、问题现象

    配置好相关配置文件,验证webService是否发布成功,访问:

    http://localhost:8080/CXF_Spring/webservice/HelloWorld?wsdl

    页面提示:

    No service was found

 

    后台提示:

    WARNING: Can't find the the request for     http://localhost:8080/CXF_Spring/webservice/HelloWorld's Observer 

 

三、问题分析

WARNING: Can't find the the request for http://localhost:8080/CXF_Spring/webservice/HelloWorld's Observer 

    出现上述提示则意味着CXF的核心控制器没起作用,CXF的核心控制器要依赖Spring的ContextLoaderListner,而SpringMVC用的是DiapacherServlet的配置方式。问题搞清楚了,那么解决方案就很明显了。

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在Spring项目中引入CXF框架的依赖。在pom.xml文件中加入如下代码: ```xml <!-- CXF框架 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-bundle-jaxrs</artifactId> <version>3.1.6</version> </dependency> ``` 接下来,需要在Spring的配置文件中配置CXF框架。在applicationContext.xml文件中加入如下代码: ```xml <!-- 配置CXF框架 --> <jaxrs:server id="restContainer" address="/"> <jaxrs:serviceBeans> <ref bean="userService"/> </jaxrs:serviceBeans> <jaxrs:providers> <ref bean="jsonProvider"/> </jaxrs:providers> </jaxrs:server> <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider"/> <bean id="userService" class="com.example.service.UserServiceImpl"/> ``` 其中,`userService`是实现了WebService接口的实现类,`jsonProvider`是用于处理JSON格式数据的提供者。 最后,在web.xml中配置CXF的Servlet和JSP的Servlet: ```xml <!-- CXF Servlet --> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <!-- JSP Servlet --> <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> </servlet-mapping> ``` 配置完成后,就可以在JSP页面中调用WebService接口了。例如: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://cxf.apache.org/jaxrs" prefix="cxf" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>WebService测试页面</title> </head> <body> <h1>WebService测试页面</h1> <form action="services/userService/getUser" method="POST"> ID:<input type="text" name="id"><br> <input type="submit" value="查询"> </form> <br> <c:if test="${not empty user}"> ID:${user.id}<br> Name:${user.name}<br> Age:${user.age}<br> </c:if> </body> </html> ``` 以上代码中,`form`标签的`action`属性指向了WebService接口的URL地址,`method`属性指定了请求方式为POST。在页面中填写ID后,点击查询按钮即可调用WebService接口并获取返回结果,结果会显示在页面上。 需要注意的是,在使用CXF框架开发WebService时,需要在接口中加入`@Path`、`@GET`、`@POST`等注解来定义URL地址和请求方式。例如: ```java @Path("/userService") public interface UserService { @GET @Path("/getUser/{id}") User getUser(@PathParam("id") String id); } ``` 以上代码中,`@Path`注解定义了接口的URL地址,`@GET`注解定义了请求方式为GET,`@PathParam`注解用于获取URL中的参数。在实现类中,需要使用`@Service`和`@Autowired`注解来定义服务和注入依赖。例如: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; public User getUser(String id) { return userDao.getUserById(id); } } ``` 以上代码中,`@Service`注解定义了服务,`@Autowired`注解注入了`UserDao`依赖。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值