`
human_zx
  • 浏览: 64289 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

利用cxf实现webservice

阅读更多

首先下载cxf包,目前最新的版本是apache-cxf-2.1.,下栽地址http://cxf.apache.org/download.html

 1. 首先新建一个web工程CxfService,倒入cxf所学要的包。要倒入的包如下:

commons-logging-1.1.jar
geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar)
geronimo-annotation_1.0_spec-1.1.jar (JSR 250)
geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar)
geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun's Servlet jar)
geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181)
jaxb-api-2.1.jar
jaxb-impl-2.1.6.jar
jaxws-api-2.1.jar
jetty-6.1.5.jar
jetty-util-6.1.5.jar
neethi-2.0.jar
saaj-api-1.3.jar
saaj-impl-1.3.jar
stax-api-1.0.1.jar
wsdl4j-1.6.1.jar
wstx-asl-3.2.1.jar
XmlSchema-1.2.jar
xml-resolver-1.2.jar

The Spring jars (optional - for XML Configuration support):

aopalliance-1.0.jar
spring-core-2.0.4.jar
spring-beans-2.0.4.jar
spring-context-2.0.4.jar
spring-web-2.0.4.jar

And the CXF jar:

cxf-2.1.jar
2.新建一个接口类:HelloWorld,如下:
package com.zx.cxf.service;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface HelloWorld {
    String sayHi(@WebParam(name="text") String text);
}
 创建接口的实现类:HelloWorldImpl,如下
package com.zx.cxf.service;

import javax.jws.WebService;

import com.zx.cxf.service.HelloWorld;
@WebService(endpointInterface = "com.zx.cxf.service.HelloWorld", 
            serviceName = "HelloWorld")
public class HelloWorldImpl implements HelloWorld {
 
    public String sayHi(String text) {
        return "Hello " + text;
    }
}
*@WebService:申明为webservice的注解 
*endpointInterface:要暴露的接口类
 *serviceName :    服务名
在WEB-INF目录下新建beans.xml,如下:
<?xml version="1.0" encoding="UTF-8"?>

<!-- START SNIPPET: beans -->
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

	<jaxws:endpoint 
	  id="helloWorld" 
	  implementor="com.zx.cxf.service.HelloWorldImpl" 
	  address="/HelloWorld" />
	  
</beans>
<!-- END SNIPPET: beans -->
 注: implementor :接口类的实现类
        address:   要和注释里面神秘的服务名对应,
修改web.xml文件,如下:
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<!-- START SNIPPET: webxml -->
<web-app>
	<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>CXFServlet</servlet-name>
		<display-name>CXF Servlet</display-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>/services/*</url-pattern>
	</servlet-mapping>
</web-app>
<!-- END SNIPPET: webxml -->
启动tomcat
测试:简单的测试就是ie测试,在浏览器中输入http://localhost:8080/CxfService/services/,如果出现

{http://service.cxf.zx.com/}HelloWorldImplPort ,或者输入http://localhost:8080/CxfService/services/HelloWorld?wsdl,出现wsdl文挡,则说明服务器端配置成功。

 可户端测试:

测试类如下:

package com.zx.cxf.service;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.interceptor.*;
import com.zx.cxf.service.HelloWorld;
public  class client {

   

    private client() {
    } 

    public static void main(String args[]) throws Exception {
    	JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
    	factory.getInInterceptors().add(new LoggingInInterceptor());
    	factory.getOutInterceptors().add(new LoggingOutInterceptor());
    	factory.setServiceClass(HelloWorld.class);
    	factory.setAddress("http://localhost:8080/CxfService/services/HelloWorld");
    	HelloWorld client = (HelloWorld) factory.create();

    	String reply = client.sayHi("HI");
    	System.out.println("Server said: " + reply);
    }

}

 如果控制台打印出:Server said: Hello HI则说明测试成功。

Ps:如果出现in thread "main" javax.xml.ws.soap.SOAPFaultException: Error reading XMLStreamReader.

关掉防火墙就可以了。

下面是源文件:下载后倒入所需要的包

11
1
分享到:
评论
11 楼 pidtaobao 2013-11-21  
对我太有用了,我用的是当前最新的cxf 2.7.7,为了图方便,加入了lib所有的jar包
测试成功通过!
10 楼 xiaoliu66007 2013-08-19  
看了这篇文章,我表示万分感谢
9 楼 a627371545 2013-06-23  
xml的资源在哪
8 楼 ssntingyu 2012-05-06  
你好,我把@WebService的接口和实现都改成hibernate自动生成的函数了,为什么发布输入http://localhost:8080/CxfService/services?wsdl就是说 The requested resource () is not available.呢
7 楼 itcyt 2011-12-23  
怎么加入安全认证呢?
6 楼 qianlixunni 2011-09-29  
讲得简单明了 ,清晰 ,不错
5 楼 binghejinjun 2011-04-21  
wanxuesi 写道
您好:
我在地址栏输入:http://localhost:8000/CxfService/services
显示:
Endpoint address: http://localhost:8000/CxfService/services/HelloWorld
Wsdl: {http://service.cxf.zx.com/}HelloWorld
Target namespace: http://service.cxf.zx.com/

我输入:http://localhost:8000/CxfService/services/HelloWorld?wsdl

就报错,请问是为什么啊?


当我运行client 这个类时,能够显示正确的结果。为什么添加“?wsdl”就报错呢

迫切想要等到您的答复。

   这可能是因为你的tomcat版本问题,你把tomcat换成5.5的试试
4 楼 wdlfellow 2009-02-15  
非常感谢,正巧需要用到这个,cxf官方的文档太复杂了
3 楼 wanxuesi 2008-11-04  
您好:
我在地址栏输入:http://localhost:8000/CxfService/services
显示:
Endpoint address: http://localhost:8000/CxfService/services/HelloWorld
Wsdl: {http://service.cxf.zx.com/}HelloWorld
Target namespace: http://service.cxf.zx.com/

我输入:http://localhost:8000/CxfService/services/HelloWorld?wsdl

就报错,请问是为什么啊?


当我运行client 这个类时,能够显示正确的结果。为什么添加“?wsdl”就报错呢

迫切想要等到您的答复。
2 楼 wdragon1983 2008-07-16  
结果返回就是Response: Hello null。

这是为什么,我看了其他人写的接口类,不是每个都要加类似与(@WebParam(name="text") 的东西吧。
1 楼 wdragon1983 2008-07-16  
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface HelloWorld {
String sayHi(@WebParam(name="text") String text);
}

这样在客户端,
String response = client.sayHi("Joe");
System.out.println("Response: " + response);
返回结果是 Response: Hello Joe。


但是如果把接口类里面的
(@WebParam(name="text") 去掉,变成

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface HelloWorld {
String sayHi( String text);

}

相关推荐

    在Spring工程里利用CXF实现webservice的demo

    在Spring工程中,利用Apache CXF实现Web服务(WebService)是一项常见的任务,它允许应用程序通过网络交换数据和服务。本教程将深入探讨如何在Spring环境中集成并使用CXF来创建一个简单的WebService示例。 首先,...

    spring+CXF实现WebService(http+https)

    本教程将深入探讨如何利用Spring和CXF来实现基于HTTP和HTTPS的Web服务,并且将涉及到HTTPS的证书配置。 1. **Spring与CXF结合**: Spring框架提供了灵活的依赖注入和AOP(面向切面编程)特性,可以方便地集成各种...

    基于spring注解的cxf实现webservice

    本文将详细讲解如何基于Spring注解来利用CXF实现Web服务。 首先,我们需要理解Spring注解的基本概念。Spring注解是一种元数据,它可以直接应用于源代码(如类、方法或字段),提供了声明式编程的能力,减少了XML...

    使用CXF和camel-cxf调用webservice

    通过使用camel-cxf,你可以利用Camel的灵活性和路由能力来处理Web服务的调用和响应。 在camel-cxf中,你可以: 1. **定义路由**:使用Camel的DSL(Domain Specific Language)或者XML配置文件,定义从何处获取输入...

    CXF实现WebService详解实例

    本篇文章将详细探讨如何使用CXF实现WebService,并通过实例进行深入解析。 **一、CXF简介** Apache CXF是一个强大的开源工具,它提供了多种方式来创建和使用Web服务,包括SOAP、RESTful API、XML以及JSON等。CXF...

    基于CXF实现WebService开发.pdf

    在具体技术实现上,CXF使用了Spring框架,从而使得WebService的开发能够利用Spring的依赖注入、声明式事务等特性,增强了应用的可维护性和扩展性。 总结来说,Apache CXF是一个功能强大的WebService开发框架,它...

    Apache CXF2+Spring2.5轻松实现WebService

    通过Spring的配置,我们可以方便地管理服务的生命周期,同时利用CXF的强大功能来处理各种Web服务协议。这不仅提高了开发效率,也便于系统的维护和扩展。在阅读提供的文档“CXF2+Spring25.doc”时,读者将更深入地...

    JDK+CXF实现webservice简单案例

    在这个"JDK+CXF实现webservice简单案例"中,我们将探讨如何利用Java JDK和Apache CXF框架来创建和消费Web服务。 首先,JDK是Java Development Kit的缩写,它是开发和运行Java应用程序的基础。在这里,JDK提供了基础...

    spring整合cxf 实现webservice

    【Spring 整合 CXF 实现 WebService】是将 Apache CXF 框架与 Spring 框架结合,以创建、部署和管理 WebService 的一种方法。Apache CXF 是一个开源服务框架,它允许开发者创建和消费各种 Web 服务,而 Spring 提供...

    Spring2+CXF实现webservice笔记

    本文将基于提供的文件信息,深入探讨如何利用 Spring2 和 CXF 轻松地实现 WebService 接口,并详细解析相关的注解及其作用。 #### 二、Apache CXF 与 Spring 的集成 Apache CXF 提供了一套强大的工具集,用于构建...

    cxf实现webservice的项目实例

    【描述】:这个实例是基于网上资源,特别是参考了《http://blog.csdn.net/hu_shengyang/article/details/38384597》这篇文章,将详细介绍如何利用CXF来创建、部署和测试一个基本的Web服务。我们将涵盖以下关键步骤:...

    使用CXF实现WebService

    MyCXFService为WebService服务端,MyCXFClient为客户端调用 ...7、以上第4点为利用Web形式进行调用WebService,还有其它方法调用: 手动执行com.lun.test.Test.java与Test1.java里的main方法,也是调用WebService服务

    Spring+CXF 发布WebService服务

    同时,可以利用CXF的客户端模拟工具进行服务的测试。 通过以上步骤,我们就可以成功地使用Spring+CXF发布一个完整的WebService服务。这个过程中,Spring负责管理和依赖注入,而CXF则负责处理Web服务的通信细节,...

    CXF实现简单的WebService接口开发

    本篇文章将深入探讨如何利用CXF来实现一个简单的WebService接口开发。 首先,我们要了解什么是CXF。CXF全称CXF Commons eXtensible Services Framework,它不仅支持SOAP(Simple Object Access Protocol)协议,还...

    cxf实现webservice全面总结

    以下是对 CXF 实现 WebService 的全面总结: 1. **Web 服务标准支持**: CXF 支持多种 Web 服务标准,如 JAX-WS,用于在 Java 中创建和调用 Web 服务;SOAP,用于定义消息格式;WSDL,用于描述 Web 服务接口和操作...

    WebService CXF 对象传递 附

    例如,如果输入参数是`MyObject`,CXF会利用JAXB将其从XML字符串转换为Java对象。 - **反序列化**:同样,服务方法返回的对象也会被CXF转换为XML,然后发送回客户端。 5. **JAXB的使用** - **注解Java类**:使用`...

Global site tag (gtag.js) - Google Analytics