文档章节

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

叶落花开
 叶落花开
发布于 2018/04/09 18:08
字数 749
阅读 1878
收藏 0

一、项目环境

    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的配置方式。问题搞清楚了,那么解决方案就很明显了。

 

四、解决方案(其实也是整合SpringMvc和cxf的完整教程)

    拆分配置文件,spring-servlet.xml(DiapacherServlet配置方式)中配置Controller组件,root-context.xml(ContextLoaderListner配置方式)中配置普通bean和CXF。

 

详细配置如下(只展示与解决这个问题有关的配置):

web.xml

	<listener>
		<description>Define spring4.x listener.</description>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<context-param>
		<description>Define applicationContext.xml location.</description>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:root-context.xml
		</param-value>
	</context-param>


	<servlet>
		<description>SpringMVC dispatcher servlet.</description>
		<servlet-name>springDispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<description>Define springMVC configuration location.</description>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springDispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>


	<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-mapping>  
            <servlet-name>CXFServlet</servlet-name>  
            <url-pattern>/webservice/*</url-pattern>
     </servlet-mapping>

spring-servlet.xml(DiapacherServlet配置方式)

该配置文件没有与CXF有关的配置,略过

root-context.xml(ContextLoaderListner配置方式)

在该配置文件<beans>中首先要额外加上这些链接:xmlns:jaxws="http://cxf.apache.org/jaxws" 和

xsi:schemaLocation=" http://cxf.apache.org/jaxws   http://cxf.apache.org/schemas/jaxws.xsd"


	<!-- 引cxf的一些核心配置 -->
    <import resource="classpath:META-INF/cxf/cxf.xml" /> 
    <!--  cxf 3.1.6版本不存在如下两个xml,可能在较早版本中会存在且需要需要
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
    -->
   
	<bean id="hello" class="com.dx.webservice.HelloWorldImpl" />
	<jaxws:endpoint id="helloWorld" implementor="#hello" address="/HelloWorld" />

 

pom.xml

		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.0-alpha4</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>3.1.6</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http</artifactId>
			<version>3.1.6</version>
		</dependency>
		<dependency>  
	        <groupId>org.apache.cxf</groupId>  
	        <artifactId>cxf-rt-transports-http-jetty</artifactId>  
	        <version>3.1.6</version> 
    	</dependency>

HelloWorld.java

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
//@WebService(targetNamespace="tallent")
//如果不写targetNamespace的值时,默认是包反转,比如服务器项目中包是com.gstd.hw,那么默认值为hw.gstd.com,如果在另外  
//的项目客户端中调用,则创建接口类HelloWorld时,类名可以不一样,但是targetNamespace必须一样。不然调用不成功!最好自己定义一个名称  
@SOAPBinding(style = Style.RPC) 
public interface HelloWorld {
	String sayHi(String text); 
}

HelloWorldImpl.java

import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService(endpointInterface = "com.dx.webservice.HelloWorld")////这里指定服务的接口类的路径,也可以不写  
@SOAPBinding(style = Style.RPC) 
public class HelloWorldImpl implements HelloWorld{

	@Override
	public String sayHi(@WebParam(name = "text")String text) {
		System.out.println("sayHi called");   
		return "Hello " + text;  
	}
	 
}

 

上述配置完成后,访问 http://localhost:8080/CXF_Spring/webservice/HelloWorld?wsdl即可看到发布的webservice的xml了。

访问http://localhost:8080/CXF_Spring/webservice/可查看发布的接口列表。

 

© 著作权归作者所有

叶落花开

叶落花开

粉丝 47
博文 75
码字总数 22881
作品 0
武汉
程序员
私信 提问
spring+restful service

Spring整合CXF,发布RSETful 风格WebService 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的。关于发布CXF WebServer和Spring整合CXF这里就不再多加赘述...

游宵
2014/04/25
1K
1
Web Service(CXF)整合Web应用No services have been found

先将CXF与Spring进行整合 web.xml文件 <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javae......

bridge_ca
2014/03/24
4.5K
0
使用cxf发布webservice总结

一、概念 1、什么是webservice Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分...

漂泊者及其影子
2014/08/21
12.4K
0
新手初识webservice-实践篇

理论背景:《新手初识webservice-理论篇》http://my.oschina.net/achi/blog/52766 编程语言:Java 必要技能:JavaWeb,MVC,Spring IOC 情景假设:你刚用Java做了个网上店铺,用了servlet,MVC...

路飞
2012/04/12
9K
5
bboss发布apache cxf 2.7.6服务和定义客户端服务实例可能产生冲突解决办法

bboss发布apache cxf 2.7.6服务和定义客户端服务实例放到一起可能会产生冲突并导致服务发布失败,本文介绍这个冲突的解决办法。 首先介绍一下冲突现象,假设在bboss mvc的xml配置文件中定义一...

bboss
2014/03/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

技术分享 | MySQL 8.0:字符集从 utf8 转换成 utf8mb4

作者:胡呈清 整理 MySQL 8.0 文档时发现一个变更:默认字符集由 latin1 变为 utf8mb4。想起以前整理过字符集转换文档,升级到 MySQL 8.0 后大概率会有字符集转换的需求,在此正好分享一下。...

爱可生
13分钟前
2
0
不管单机还是集群的限流实现已经给你准备好了

限流算法 计数器算法 维护一个counter,规定在单位时间内counter的大小不能超过最大值,每隔固定时间就将counter的值置零。如果这个counter大于设定的阈值,那么系统就拒绝请求 漏桶算法 维护...

阿提说说
24分钟前
3
0
文件管理

通过CLI登录进行文件管理 .表示当前目录,..表示父目录,具有隐藏文件。支持缩写与TAB键补全 1、目录操作 pwd#打印工作目录 cd <directory>#改变工作目录 dir [/all][<directory>]#查看目录内...

悠悠子佩
26分钟前
3
0
Netty学习笔记(10)——Netty中的Channel组件

1. Channel的功能 1. 与NIO中的Channel一样,它实现了网络操作的抽象类,聚合了一系列的网络IO功能,包括读写数据、建立连接、关闭连接等功能。通过外观模式,将数据读写、连接建立与断开等操...

江左煤郎
30分钟前
2
0
二叉树的深度

从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 public int TreeDepth(TreeNode root) { return root == null ? 0 : 1 + Math.max(Tree...

Garphy
38分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部