`

WebService (一) CXF 入门 HelloWorld

 
阅读更多

 

1.CXF框架由来 

        ApacheCXF项目是由ObjectWeb Celtix和CodeHaus XFire合并成立。ObjectWeb Celtix是由IONA公司赞助,于2005年成立的开源Java ESB产品,XFire则是业界知名的SOAP堆栈。合并后的ApacheCXF融合该两个开源项目的功能精华,提供了实现SOA所需要的核心ESB功能框架,包括SOA服务创建,服务路由,及一系列企业级QoS功能。 

 

2. ApacheCXF架框的目标

   1,支持不同的绑定,包括SOAP,REST 和 Corba。

   2,支持WS相关标准,包括WS-Addressing, WS-Security, WS-ReliableMessaging, 和 WS-Policy。

   3,支持多种传输协议。

   4,可插入的数据绑定。

   5,前端的清晰分离,像 JAX-WS 从核心代码中分离。

   6,高性能。

   7,可嵌入。

 

3.HelloWorld程序示例

此helloWorld是基于apache-cxf-2.5.3版本的。

 

新建一个工程,将cxf lib下面的包都加到classpath下。

 

HelloWorld接口定义如下:

 

package demo1.test;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
	
	public String sayHello(String name);
}

 

 请注意在类上加上:@WebService标签

  通过注解@WebService申明为webservice接口 

 

HelloWorldImpl实现类的代码如下:

 

package demo1.test;

import javax.jws.WebService;

@WebService
public class HelloWorldImpl implements HelloWorld {

	public String sayHello(String name) {
		System.out.println("SayHello method is called!");
		return "hello " + name;
	}

}

 

 

然后写一个发布服务的DemoServer程序(因为cxf lib包下面内嵌了jetty服务器的jar)。

DemoServer类的代码如下所示:

 

package demo1.test;

import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class DemoServer {

	public static void main(String[] args) {
		JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
		factory.setServiceClass(HelloWorldImpl.class);
		factory.setAddress("http://localhost:8080/helloWorld");
		
		Server server = factory.create();
		server.start();
	}
}

 

 使用JaxWsServerFactoryBean创建一个服务,然后进行发布。类运行DemoServer方法后,可以直接在浏览器中

输入http://localhost:8080/helloWorld?wsdl

你就可以看到此webservice的wsdl文件内容了。

 

要对此webservice进行测试,可以利用myEclipse 的插件webservice浏览器进行测试、自己写个客户端程序或使用soapUI工具。

   1.webservice浏览器进行测试

1)在myEclipse中启动插件web service浏览器,如下图所示:


   2)web service浏览器启动后,在浏览器的右上角选择WSDL Page,如下图所示:



 3)在WSDL URL中输入服务的URL地址:http://localhost:8080/helloWorld?wsdl,如下图所示:



 4)然后点击"GO",按提示多操作几步后,是后点击sayHello方法,在传递名字后面点击“add”,会在下面出现一个输入参数的输入框,如下图所示:



 5.在输入框中输入“xxl”,点击“GO”后,会返回“hello xxl”,同时服务器端打印出了语句“SayHello method is called!”,说明我们的服务是发布正常的。浏览器的返回结果如下图所示:


6.浏览器默认的返回结果显示是“Form”形式,也即上图所示。可以点出右上解的"source"链接,以源代码的形式查看请求及返回结果,即详细的xml,如下图所示:


 

2.自己利用cxf的api写个客户端程序进行测试

DemoClient的示例程序如下所示:

 

package demo1.test;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public class DemoClient {
	public static void main(String[] args) {
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setServiceClass(HelloWorld.class);
		factory.setAddress("http://localhost:8080/helloWorld");
		
		HelloWorld helloWorld = (HelloWorld)factory.create();
		String result = helloWorld.sayHello("xxl");
		System.out.println(result);
		
	}
}

 执行客户端程序后,客户端会正常打印出“hello xxl”,服务器端会在控制台打印出“SayHello method is called!”,

说明测试程序及服务都是正常的。

 

 

总结:

1.JaxWsServerFactoryBean是创建服务器端服务的工厂,factory.setServiceClass(HelloWorldImpl.class);

在服务器端调用setServiceClass方法时,传入的Class必须是实现类的,不能是接口。

否则使用客户端程序调用时会抛出如下所示的异常:

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Could not instantiate service class demo1.test.HelloWorld because it is an interface

 

setServiceClass方法的具体的API如下所示:

 

setServiceClass

 

public void setServiceClass(Class<?> serviceClass)
Specifies the class implementing the service.

 

Parameters:
serviceClass - the service's implementaiton class

 

 

2.使用JaxWsProxyFactoryBean创建客户端程序,factory.setServiceClass(HelloWorld.class);

调用客户端的setServiceClass,传入的参数必须使用接口。(这是与服务端的区别。服务端是必须传具体的实现类)

如果客户端传递的是具体的类,则会抛出如下所示的异常:

Exception in thread "main" java.lang.IllegalArgumentException: demo1.test.HelloWorldImpl is not an interface

具体的API如下所示:

 

setServiceClass

public void setServiceClass(Class<?> serviceClass)
Specifies the class representing the SEI the proxy implements.

 

Parameters:
serviceClass - the SEI's class

 

附件是基于myeclipse的工程文件。

 

  • 大小: 29.8 KB
  • 大小: 6.1 KB
  • 大小: 32.6 KB
  • 大小: 16 KB
  • 大小: 4.6 KB
  • 大小: 32.2 KB
0
14
分享到:
评论
1 楼 liang1022 2012-10-25  
請問這在DOS命令列下要怎啟動server端?
難道只能用eclipse嗎?

相关推荐

    1.webservice-cxf-helloworld.part2

    webservice-helloworld 视频 两台机器访问,一个是虚拟机。

    1.webservice-cxf-helloworld.part1

    webservice-helloworld 视频 两台机器访问,一个是虚拟机。 高清

    cxf 入门(hello world)

    @WebService(endpointInterface = "com.example.HelloWorld") public class HelloWorldImpl implements HelloWorld { public String sayHello(String name) { return "Hello, " + name; } } ``` **步骤三:配置...

    CXF的helloworld实现

    【CXF的helloworld实现】 Apache CXF 是一个开源的Java框架,主要用于构建和开发服务导向架构(SOA)和Web服务。它提供了一个全面的工具集,支持WS-*标准,使得开发人员能够轻松地创建和部署SOAP和RESTful服务。在...

    CXF webservice 实现简单的HelloWorld

    CXF webservice 入门视频 很清晰很不错,企业当中很多都在使用CXF

    CXF入门 -- 第一个简单webService

    【CXF入门 -- 第一个简单webService】 Apache CXF 是一款强大的开源服务框架,它用于构建和开发服务,包括Web服务。本篇文章将带你入门CXF,通过创建一个简单的Web服务来理解其基本概念和工作流程。 1. **CXF简介*...

    Apache CXF之helloworld

    这个"Apache CXF之helloworld"示例旨在帮助初学者理解如何使用CXF来创建和消费简单的Web服务。CXF允许开发者通过Java API(如JAX-WS和JAX-RS)来定义服务接口,并自动将其转换为HTTP服务。 首先,我们来了解一下CXF...

    WebService_CXF范例.

    为了更好地理解CXF的工作原理,通常会通过一个简单的"HelloWorld"示例来开始学习。首先,你需要从Apache官方网站下载CXF的最新版本,然后在Java项目中引入必要的依赖库。接着,你可以编写服务端和客户端代码,通过...

    WebService之CXF(一、服务端的使用)

    @WebService(endpointInterface = "com.example.HelloWorld") public class HelloWorldImpl implements HelloWorld { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` 这里...

    Web service之CXF-helloworld DEMO

    在我们的"helloWorld"项目中,可能包含了服务接口、实现类、配置文件以及可能的测试客户端代码。通过这个简单的DEMO,你可以了解到如何使用Apache CXF构建Web服务,并进行基本的交互。随着对CXF的进一步学习,你还...

    使用CXF发布和调用webservice之HelloWorld入门

    ### 使用CXF发布和调用WebService之HelloWorld入门详解 #### 一、概述 本文将详细介绍如何使用Apache CXF框架来实现一个简单的WebService——HelloWorld示例。此示例不仅适用于初学者理解WebService的基本概念,...

    webservice cxf_demo

    【描述】"cxf写的一个helloworld demo" 指出,此项目的核心是展示如何通过Apache CXF框架实现基础功能。"Hello World"程序通常被用作教学工具,帮助开发者理解新语言或框架的基本工作原理。在这个特定的场景中,我们...

    基于wsdl进行webservice接口开发打印helloworld.rar

    在这个“基于wsdl进行webservice接口开发打印helloworld”的案例中,我们将深入理解WSDL在Web Service接口开发中的作用,并了解如何通过它来实现简单的服务调用。 首先,我们需要理解WSDL文档的基本结构。WSDL文档...

    利用cxf实现webservice

    这篇博客文章深入探讨了如何使用Apache CXF框架来创建和部署一个基本的WebService。作者通过一个实际的示例,展示了如何配置项目、编写服务接口和服务实现,以及如何发布和调用这些服务。 首先,我们需要在项目中...

    CXF WebService实例

    在Java中,创建一个CXF WebService的"HelloWorld"示例通常涉及以下步骤: 1. 定义服务接口:使用Java语言定义一个简单的接口,例如`GreetingService`,其中包含一个返回"Hello, World!"的`sayHello()`方法。 2. 实现...

    WebService_CXF学习

    为了更好地理解CXF的使用,通常会通过一个简单的“HelloWorld”示例开始学习。这个例子可以帮助初学者直观地了解如何配置和运行一个基于CXF的WebService。首先,你需要从Apache官方网站下载CXF的最新版本,然后在...

    WebService CXF学习文档

    2.HelloWorld 3.WSDL描述 WebService CXF学习——进阶篇 1.SOAP讲解 2.JAX-WS讲解 3.对象传递 WebService CXF学习——高级篇(一)(二) 1.整合Spring框架 2.CXF+Spring+Hibernate 3.WS-Security ...

    webservice使用cxf的实例

    HelloWorld proxy = (HelloWorld) factory.create(); // 调用Web服务 String response = proxy.sayHello("World"); System.out.println(response); ``` **6. 使用CXF的工具** 在标签“工具”中,CXF提供了CXF工具...

Global site tag (gtag.js) - Google Analytics