在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`注解标记接口,然后通过`Endpoint`类发布服务。 3. **客户端调用**:客户端可以通过JAX-WS的`Service`类,根据WSDL文件生成服务代理,调用服务接口方法。 二、CXF框架实现...
在Java开发中,CXF是一个广泛使用的开源框架,主要用于构建和开发服务导向架构(SOA)的应用程序。它提供了SOAP和RESTful Web服务的支持,同时也支持WS-*规范。CXF允许开发者利用Java语言的强大力量,创建和消费Web...
总结,"JDK+CXF实现webservice简单案例"主要涵盖了Java Web服务的基本概念、CXF框架的应用,以及服务的发布和消费过程。通过这个案例,开发者可以深入理解Web服务的工作原理,并掌握如何在实际项目中运用这些技术。...
【CXF发布WebService详解】 ...综上所述,CXF为Java开发者提供了强大的工具,可以在JBoss和Tomcat这样的应用服务器上轻松地发布和调用SOAP Web服务。理解并熟练掌握这些知识,将有助于你构建高效、可靠的分布式系统。
4. **配置CXF**:在Spring配置文件中,配置CXF服务端点(Endpoint),指定接口和服务实现类。 ```xml <jaxws:endpoint id="helloWorldService" implementor="#helloWorldServiceImpl" address="/HelloWorld"/> ...
此外,对于CXF的配置,可能涉及到服务端点(Endpoint)、服务接口和服务实现的定义,以及WSDL的生成和发布。 总的来说,这个主题涵盖了服务集成、ESB的使用、Web服务代理的实现等多个方面,对于理解和实践企业级...
首先,CXF全称是CXF Commons eXtensible Framework,它是一个Java Web服务框架,支持多种Web服务标准,如SOAP、RESTful(Representational State Transfer)以及WS-*规范。CXF提供了丰富的API和工具,使得开发和部署...
总结来说,Apache CXF提供了一套完整的工具和API,使得创建、发布和消费Web服务变得简单。通过注解驱动的方式,开发者可以快速地构建符合WS-I标准的SOAP服务,同时也支持RESTful风格的服务。此外,CXF还集成了多种...
- 发布服务:使用Endpoint类的publish方法发布WebService,指定服务地址和服务实例。 4. Apache CXF开发WebService: - 在CXF中,开发者可以通过Java first或者WSDL first的方式创建服务。Java first是基于Java类...
本文将详细介绍如何使用Apache CXF框架来构建WebService服务器端,并通过实例演示整个过程。 #### 二、所需工具与环境 在开始之前,确保已准备好以下工具和资源: 1. **Apache CXF**:版本为2.2.6。 2. **Spring WS...
此外,还可以考虑使用Apache CXF或Glassfish等其他Web服务框架,它们提供了更丰富的功能和更好的性能。 总结,JDK6为开发WebService提供了基础支持,通过JAX-WS可以方便地创建、发布和消费服务。同时,结合不同的...
SSH+CXF整合发布Web服务(Webservice)实例详解 在软件开发中,SSH(Spring、Struts、Hibernate)是一个常见的Java EE应用框架组合,用于构建高效、可维护的企业级应用程序。CXF则是一个开源的Java服务堆栈,主要...
【标题】:CXF Web服务框架的简单应用 在IT领域,Web服务是不同系统间进行数据交换和交互的一种标准方式。Apache CXF是一个开源框架,它提供了创建和消费Web服务的强大工具。本教程将围绕“CXF Web服务的简单使用”...
CXF全称是CXF CXF,它是一个Java Web服务框架,支持SOAP、RESTful等多种服务模型。CXF提供了丰富的API和工具,用于生成客户端和服务端代码,使得开发者能够快速地实现Web服务的开发、部署和调用。 二、Spring框架 ...
标题“简单cxf+spring构建webservice服务”指的是使用Apache CXF框架与Spring框架结合来创建Web服务。Apache CXF是一个开源的Java框架,它允许开发者创建和消费各种Web服务,包括SOAP和RESTful风格。Spring框架则为...
CXF的核心组件是`org.apache.cxf.Bus`,它类似Spring的`ApplicationContext`,负责管理CXF的各种资源和服务。默认情况下,CXF使用`SpringBusFactory`来创建`Bus`实例。 #### 五、Apache CXF的部署注意事项 在使用...
CXF提供了多种工具和服务,包括WSDL(Web服务描述语言)到Java代码的生成、客户端和服务器端的Stubs、以及WS-Security等高级功能。 Spring框架则是一个全面的企业级应用开发框架,它允许开发者以声明式的方式管理...
- 创建一个类来实现该接口,并使用 `@WebService` 注解指定 endpoint 接口和服务名。 - 在 Spring 的配置文件中配置这个服务,并注入所需的依赖。 3. **配置 Spring 上下文:** - 在 Spring 的配置文件中配置 ...
3. **创建服务接口和服务实现**:定义你的Web服务接口(通常使用JAX-WS的`@WebService`注解)和对应的实现类。例如: ```java @WebService public interface HelloWorldService { String sayHello(String name);...
Spring支持基于注解的Web Service发布,如使用`@WebService`和`@WebServiceClient`。你也可以使用Spring-WS或Apache CXF等库来创建WSDL并部署服务。 4. **测试和调试**:确保编写了单元测试来验证Web Service接口的...