`
javandroid
  • 浏览: 25596 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

webservice(三) 使用JDK的EndPoint和cxf框架分别发布webservice服务

 
阅读更多
在JDK1.6中JAX-WS规范定义了如何发布一个webService服务。
JAX-WS是指Java Api for XML – WebService.
与web服务相关的是EndPoint类,此类为端点服务类,它提供一个publish方法用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。

使用jdk的EndPoint发布web服务

1.在要发布服务的类上添加@WebService注解。将要发布服务的方法设置为public。

2.调用EndPoint.publish(,)发布服务

其他注意事项:
1.给类添加上@WebService注解后,类中所有的非静态方法都将会对外公布。
2.不支持静态方法,final方法。
3.如果希望某个方法(非static,非final)不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开。
4.被添加了@WebService注解的类至少要有一个可以公开的方法,否则将会启动失败。

使用CXF框架发布服务

发布服务

两种方式发布服务:ServerFactoryBean 和JaxWsServerFactoryBean

JaxWsServerFactoryBean是ServerFactoryBean 的子类,也是功能扩展类。


1.ServerFactoryBean 方式

public class ServerFactoryBeanDemo {
	public String sayHi(String name){
		String s="hello "+name;
		return s;
	}
	
	public static void main(String[] args) {
		ServerFactoryBean sf=new ServerFactoryBean();
		//服务实现类
		sf.setServiceClass(ServerFactoryBeanDemo.class);
		//服务的发布地址
		sf.setAddress("http://localhost:5678/hello");
		//服务的实例
        sf.setServiceBean(new ServerFactoryBeanDemo());
        //发布服务
		sf.create();
		System.out.println("server ready……");
	}
}

ServerFactoryBean 方式

①不需要提供@WebService注解,依旧可以发布

②不需要提供对外暴露的方法,依旧可以发布(当然这也没什么意义)


2.JaxWsServerFactoryBean方式(建议使用)

@WebService
public class JaxWsServiceDemo {
	public String sayHi(String name) {
		String s = "hello " + name;
		return s;
	}

	public static void main(String[] args) {
		JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
		// 服务实现类
		sf.setServiceClass(JaxWsServiceDemo.class);
		// 服务的发布地址
		sf.setAddress("http://localhost:5678/hello");
		// 服务的实例
		sf.setServiceBean(new JaxWsServiceDemo());
		// 发布服务
		sf.create();
		System.out.println("server ready……");
	}
}

JaxWsServerFactoryBean方式

①需要提供@WebService注解

虽然不提供该注解也可以发布成功,但是暴露的方法依旧无法显示,所以通常也会提供注解来显示暴露的方法。

(可以通过查看wsdl文档来验证)


标准的做法
通常会提供一个服务接口,用以表明服务的类型。要加上@Webservice注解。这有点类似于Spring中的服务层的实现。

注意:不提供接口也行,但是在任何情况下都建议使用接口。

如果使用spring的配置文件发布,则必须提供接口。

@WebService
public interface IHelloService {
	public String sayHi(String name);
}

然后提供一个实现类

public class HelloServiceImpl implements IHelloService{
	@Override
	public String sayHi(String name) {
		String s = "hello " + name;
		return s;
	}
	
	public static void main(String[] args) {
		JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
		// 服务的类型
		sf.setServiceClass(IHelloService.class);//注意:接口类型
		// 服务的发布地址
		sf.setAddress("http://localhost:5678/hello");
		// 服务的实现类实例
		sf.setServiceBean(new HelloServiceImpl());//注意:实现类实例
		// 发布服务
		sf.create();
		System.out.println("server ready……");
	}
}


wsdl2java工具

cxf也提供了一个用于生成客户端调用代码的工具wsdl2java.exe。它的功能同wsimport一样。它是可以支持SOAP1.1 和SOAP1.2的协议的。

此工具位于cxf_home/bin目录下。参数与wsimport有所不同。
它包含以下参数:
-d参数,指定代码生成的目录。
-p参数,指定生成的新的包结构。

注意:由于wsdl2java是根据jdk1.7生成的本地代码,所以,需要对生成的代码做一点点修改。

1、注意:由于使用的是apache-cxf-2.4.0版本,它是支持jdk1.7的。所以,对于生成的Service要进行稍微的修改。
在jdk1.6中的javax.xml.ws.Service的构造方法接收二个参数为:(String url,QName qname);
在jdk1.7中的javax.xml.ws.Service的构造方法中接收三个参数为:(String url,QName qname,features);


2、将生成的代码,拷贝到项目目录,然后使用以前相同方法调用。
注意:如果将@WebMethod设置了header=true参数,将会在调用时多传递一个参数。参数可以直接传null值。
对于这种情况,可以将header=true修改成header=false然后再重要获取客户端源代码。


3、可能发现,使用cxf生成的客户端代码与wsimport差不多,甚至是一样,那为什么还要使用cxf呢?
原因:它较好的发布方式、较容易的与其他服务器集成、及与Spring的完美结合都不得不让我们使用cxf。

对于上面标准实现中的代码执行该命令,会生成代码供客户端使用。(用法类似于wsimport)



给服务添加消息拦截器

作用:类似于使用TCP/IP Monitor,用来捕获SOAP消息的过程。

LoggingInInterceptor – 信息输入时的拦截器 –请求
LoggingOutInterceptor –信息输出时的拦截器 - 响应

server.getInInterceptors().add(new LoggingInInterceptor());
server.getOutInterceptors().add(new LoggingOutInterceptor());

public class Server {
	public static void main(String[] args) {
		JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
		sf.setServiceClass(IHelloService.class);
		sf.setServiceBean(new HelloServiceImpl());
		sf.setAddress("http://localhost:5678/hello");

		// 加入请求的消息拦截器
		sf.getInInterceptors().add(new LoggingInInterceptor());
		// 加入响应的消息拦截器
		sf.getOutInterceptors().add(new LoggingOutInterceptor());
		sf.create();
		System.out.println("server ready……");
	}
}

可以在服务端控制台查看 拦截到的请求信息和发送给客户端的响应信息。



分享到:
评论

相关推荐

    WebService开发服务端的两种方式:jdk、cxf

    - **部署服务**:使用`@WebService`注解标记接口,然后通过`Endpoint`类发布服务。 3. **客户端调用**:客户端可以通过JAX-WS的`Service`类,根据WSDL文件生成服务代理,调用服务接口方法。 二、CXF框架实现...

    jdk21集成cxf示例程序

    在Java开发中,CXF是一个广泛使用的开源框架,主要用于构建和开发服务导向架构(SOA)的应用程序。它提供了SOAP和RESTful Web服务的支持,同时也支持WS-*规范。CXF允许开发者利用Java语言的强大力量,创建和消费Web...

    JDK+CXF实现webservice简单案例

    总结,"JDK+CXF实现webservice简单案例"主要涵盖了Java Web服务的基本概念、CXF框架的应用,以及服务的发布和消费过程。通过这个案例,开发者可以深入理解Web服务的工作原理,并掌握如何在实际项目中运用这些技术。...

    CXF发布WebService,jboss和tomcat都能发布

    【CXF发布WebService详解】 ...综上所述,CXF为Java开发者提供了强大的工具,可以在JBoss和Tomcat这样的应用服务器上轻松地发布和调用SOAP Web服务。理解并熟练掌握这些知识,将有助于你构建高效、可靠的分布式系统。

    CXF实现简单的WebService接口开发

    4. **配置CXF**:在Spring配置文件中,配置CXF服务端点(Endpoint),指定接口和服务实现类。 ```xml <jaxws:endpoint id="helloWorldService" implementor="#helloWorldServiceImpl" address="/HelloWorld"/> ...

    servicemix 7安装使用及camel-cxf代理webservice

    此外,对于CXF的配置,可能涉及到服务端点(Endpoint)、服务接口和服务实现的定义,以及WSDL的生成和发布。 总的来说,这个主题涵盖了服务集成、ESB的使用、Web服务代理的实现等多个方面,对于理解和实践企业级...

    部署WebService服务(cxf,spring)

    首先,CXF全称是CXF Commons eXtensible Framework,它是一个Java Web服务框架,支持多种Web服务标准,如SOAP、RESTful(Representational State Transfer)以及WS-*规范。CXF提供了丰富的API和工具,使得开发和部署...

    CXF框架webservice教程.pdf

    总结来说,Apache CXF提供了一套完整的工具和API,使得创建、发布和消费Web服务变得简单。通过注解驱动的方式,开发者可以快速地构建符合WS-I标准的SOAP服务,同时也支持RESTful风格的服务。此外,CXF还集成了多种...

    WebService之CXF

    - 发布服务:使用Endpoint类的publish方法发布WebService,指定服务地址和服务实例。 4. Apache CXF开发WebService: - 在CXF中,开发者可以通过Java first或者WSDL first的方式创建服务。Java first是基于Java类...

    CXF开发webservice服务端

    本文将详细介绍如何使用Apache CXF框架来构建WebService服务器端,并通过实例演示整个过程。 #### 二、所需工具与环境 在开始之前,确保已准备好以下工具和资源: 1. **Apache CXF**:版本为2.2.6。 2. **Spring WS...

    JDK6开发WebService及用户认证

    此外,还可以考虑使用Apache CXF或Glassfish等其他Web服务框架,它们提供了更丰富的功能和更好的性能。 总结,JDK6为开发WebService提供了基础支持,通过JAX-WS可以方便地创建、发布和消费服务。同时,结合不同的...

    ssh+cxf整合发布webservice实例

    SSH+CXF整合发布Web服务(Webservice)实例详解 在软件开发中,SSH(Spring、Struts、Hibernate)是一个常见的Java EE应用框架组合,用于构建高效、可维护的企业级应用程序。CXF则是一个开源的Java服务堆栈,主要...

    webservice cxf 简单使用

    【标题】:CXF Web服务框架的简单应用 在IT领域,Web服务是不同系统间进行数据交换和交互的一种标准方式。Apache CXF是一个开源框架,它提供了创建和消费Web服务的强大工具。本教程将围绕“CXF Web服务的简单使用”...

    cxf整合spring发布webservice(源码)

    CXF全称是CXF CXF,它是一个Java Web服务框架,支持SOAP、RESTful等多种服务模型。CXF提供了丰富的API和工具,用于生成客户端和服务端代码,使得开发者能够快速地实现Web服务的开发、部署和调用。 二、Spring框架 ...

    简单cxf+spring构建webservice服务

    标题“简单cxf+spring构建webservice服务”指的是使用Apache CXF框架与Spring框架结合来创建Web服务。Apache CXF是一个开源的Java框架,它允许开发者创建和消费各种Web服务,包括SOAP和RESTful风格。Spring框架则为...

    JAVA的WebService支持-CXF

    CXF的核心组件是`org.apache.cxf.Bus`,它类似Spring的`ApplicationContext`,负责管理CXF的各种资源和服务。默认情况下,CXF使用`SpringBusFactory`来创建`Bus`实例。 #### 五、Apache CXF的部署注意事项 在使用...

    CXF2+Spring2.5开发WebService实例

    CXF提供了多种工具和服务,包括WSDL(Web服务描述语言)到Java代码的生成、客户端和服务器端的Stubs、以及WS-Security等高级功能。 Spring框架则是一个全面的企业级应用开发框架,它允许开发者以声明式的方式管理...

    CXF+spring+jdk1.5开发webService

    - 创建一个类来实现该接口,并使用 `@WebService` 注解指定 endpoint 接口和服务名。 - 在 Spring 的配置文件中配置这个服务,并注入所需的依赖。 3. **配置 Spring 上下文:** - 在 Spring 的配置文件中配置 ...

    webservice使用cxf的实例

    3. **创建服务接口和服务实现**:定义你的Web服务接口(通常使用JAX-WS的`@WebService`注解)和对应的实现类。例如: ```java @WebService public interface HelloWorldService { String sayHello(String name);...

    发布webService服务接口与spring整合教程

    Spring支持基于注解的Web Service发布,如使用`@WebService`和`@WebServiceClient`。你也可以使用Spring-WS或Apache CXF等库来创建WSDL并部署服务。 4. **测试和调试**:确保编写了单元测试来验证Web Service接口的...

Global site tag (gtag.js) - Google Analytics