分享基于webService cxf 框架开发的webservice接口
1 . 一个简单的cxf例子:包含客户端的自动生成.
2. cxf的安全认证.
3.cxf集成至公司框架步骤.
1 . 一个简单的cxf例子:包含客户端的自动生成.
=======================================第一步=========================
package innosoft.java;
import javax.jws.WebParam;
import javax.jws.WebService;
/**
* 服务端接口.
*
* @author gaoq
* @date 2014-10-30 下午9:13:49
*/
@WebService
public interface ISayHelloServer {
String sayHello(@WebParam(name = "username") String name);
}
=======================================第二步=========================
package innosoft.java;
import java.util.Date;
import javax.jws.WebService;
/**
* 服务端接口实现类
*
* @author gaoq
* @date 2014-10-30 下午9:48:44
*/
@WebService(endpointInterface = "innosoft.java.ISayHelloServer", serviceName = "IsayHelloServer")
public class SayHelloServer implements ISayHelloServer {
@Override
public String sayHello(String name) {
return name + ",Hello " + new Date();
}
}
=================================第三步 发布接口===========================
package innosoft.java;
import javax.xml.ws.Endpoint;
import org.apache.cxf.jaxws.EndpointImpl;
/**
* 启动服务端.
*
* @author gaoq
* @date 2014-10-30 下午9:12:02
*/
public class MainServer {
public static void main(String[] args) {
ISayHelloServer sh = new SayHelloServer();
EndpointImpl ei = (EndpointImpl) Endpoint.publish("http://localhost:9999/IsayHelloServer", sh);
}
}
import javax.xml.ws.Endpoint;
import org.apache.cxf.jaxws.EndpointImpl;
/**
* 启动服务端.
*
* @author gaoq
* @date 2014-10-30 下午9:12:02
*/
public class MainServer {
public static void main(String[] args) {
ISayHelloServer sh = new SayHelloServer();
EndpointImpl ei = (EndpointImpl) Endpoint.publish("http://localhost:9999/IsayHelloServer", sh);
}
}
=================================第四步 生成客户端==========================命令窗口执行 (之前要配置cxf的path) wsdl2java http://localhost:9999/IsayHelloServer?wsdl
======================== 第五步 客户端调用接口 =====================
package innosoft.java;
/**
* cxf客户端mian入口.
*
* @author gaoq
* @date 2014-10-30 下午9:42:48
*/
public class MainClient {
public static void main(String[] args) {
IsayHelloServer_Service factory = new IsayHelloServer_Service();
ISayHelloServer begin = factory.getSayHelloServerPort();
String context = begin.sayHello("八戒");
System.out.println(context);
}
}
==============================test==============
腾讯QQ是否在线接口 :http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl
============================== =================
2.cxf安全认证
=====================服务端 第一步=========================
1.添加一个过滤器类
package innosoft.java;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* 服务端加一个过滤器.
*
* @author gaoq
* @date 2014-10-30 下午10:10:37
*/
//通过PhaseIntercptor,可以知道拦截器在那个阶段使用。
public class AuthInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
public AuthInterceptor(){
super(Phase.PRE_INVOKE);
}
//实现自己的拦截器时,需要实现handleMessage方法。
//handleMessage方法中的形参就是被拦截的消息。
@Override
public void handleMessage(SoapMessage msg) throws Fault {
List<Header> heads = msg.getHeaders();
if(heads == null || heads.size() < 1){
throw new Fault(new IllegalArgumentException("没有消息"));
}
Header firstHeader = heads.get(0);
Element ele = (Element) firstHeader.getObject();
NodeList id = ele.getElementsByTagName("userId");
NodeList pass = ele.getElementsByTagName("userPass");
if(id.getLength() != 1){
throw new Fault(new IllegalArgumentException("平台授权码不正确"));
}
if(pass.getLength() != 1){
throw new Fault(new IllegalArgumentException("密码不正确"));
}
String userId = id.item(0).getTextContent();
String userPass = pass.item(0).getTextContent();
Map<String, String> map = new HashMap<String, String>();
map.put("111", "101");
map.put("222", "212");
map.put("333", "323");
if(map.containsKey(userId)){
String password = map.get(userId);
if(!password.equals(userPass)){
throw new Fault(new IllegalArgumentException("密码不正确!!!"));
}
}else{
throw new Fault(new IllegalArgumentException("平台授权码不正确!!!"));
}
}
}
2.main方法追加一个过滤器
package innosoft.java;
import javax.xml.ws.Endpoint;
import org.apache.cxf.jaxws.EndpointImpl;
/**
* 启动服务端.
*
* @author gaoq
* @date 2014-10-30 下午9:12:02
*/
public class MainServer {
public static void main(String[] args) {
ISayHelloServer sh = new SayHelloServer();
EndpointImpl ei = (EndpointImpl) Endpoint.publish("http://localhost:9999/IsayHelloServer", sh);
ei.getInInterceptors().add(new AuthInterceptor()); //追加一个过过滤器
}
}
import javax.xml.ws.Endpoint;
import org.apache.cxf.jaxws.EndpointImpl;
/**
* 启动服务端.
*
* @author gaoq
* @date 2014-10-30 下午9:12:02
*/
public class MainServer {
public static void main(String[] args) {
ISayHelloServer sh = new SayHelloServer();
EndpointImpl ei = (EndpointImpl) Endpoint.publish("http://localhost:9999/IsayHelloServer", sh);
ei.getInInterceptors().add(new AuthInterceptor()); //追加一个过过滤器
}
}
=====================客户端 第二步=========================
1.客户端追加一个过滤器
package innosoft.java;
import java.util.List;
import javax.xml.namespace.QName;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class addHeaderInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
private String userName;
private String password;
public addHeaderInterceptor(String userName,String password){
super(Phase.PREPARE_SEND);
this.userName = userName;
this.password = password;
}
@Override
public void handleMessage(SoapMessage msg) throws Fault {
List<Header> headers = msg.getHeaders();
Document doc = DOMUtils.createDocument();
Element ele = doc.createElement("logingHeader");
Element name = doc.createElement("userId");
name.setTextContent(this.userName);
Element mima = doc.createElement("userPass");
mima.setTextContent(this.password);
ele.appendChild(name);
ele.appendChild(mima);
headers.add(new Header(new QName("http://java.innosoft/"), ele));
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
import java.util.List;
import javax.xml.namespace.QName;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class addHeaderInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
private String userName;
private String password;
public addHeaderInterceptor(String userName,String password){
super(Phase.PREPARE_SEND);
this.userName = userName;
this.password = password;
}
@Override
public void handleMessage(SoapMessage msg) throws Fault {
List<Header> headers = msg.getHeaders();
Document doc = DOMUtils.createDocument();
Element ele = doc.createElement("logingHeader");
Element name = doc.createElement("userId");
name.setTextContent(this.userName);
Element mima = doc.createElement("userPass");
mima.setTextContent(this.password);
ele.appendChild(name);
ele.appendChild(mima);
headers.add(new Header(new QName("http://java.innosoft/"), ele));
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2.客户端在调用接口时要先追加过滤器
package innosoft.java;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
/**
* cxf客户端mian入口.
*
* @author gaoq
* @date 2014-10-30 下午9:42:48
*/
public class MainClient {
public static void main(String[] args) {
IsayHelloServer_Service factory = new IsayHelloServer_Service();
ISayHelloServer begin = factory.getSayHelloServerPort();
Client c = ClientProxy.getClient(begin);
c.getOutInterceptors().add(new addHeaderInterceptor("111", "101"));
String context = begin.sayHello("八戒");
System.out.println(context);
}
}
===========================================================
3.如何整合至框架
1.webservice.xml文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<jaxws:server id="IsayHelloServer" serviceClass="innosoft.java.ISayHelloServer"
<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">
<jaxws:server id="IsayHelloServer" serviceClass="innosoft.java.ISayHelloServer"
address="IsayHelloServer">
<jaxws:serviceBean>
<bean class="innosoft.java.SayHelloServer">
</bean>
</jaxws:serviceBean>
<jaxws:inInterceptors>
<bean class=" innosoft.java.AuthInterceptor "/> //服务端的拦截器
</jaxws:inInterceptors>
</jaxws:server>
</beans>
<jaxws:serviceBean>
<bean class="innosoft.java.SayHelloServer">
</bean>
</jaxws:serviceBean>
<jaxws:inInterceptors>
<bean class=" innosoft.java.AuthInterceptor "/> //服务端的拦截器
</jaxws:inInterceptors>
</jaxws:server>
</beans>
(IsayHelloServer //服务名称)
(innosoft.java.ISayHelloServer //服务端接口地址)
(innosoft.java.SayHelloServer //服务端接口实现类地址)
(innosoft.java.AuthInterceptor //服务端的拦截器)
2.在xxx_ds.xml 中引入webservice.xml
<import resource="webservice.xml"/>
相关推荐
CXF是一个基于Apache的开源WebService框架,提供了丰富的WebService开发功能。 5. Mybatis:在本实验中,我们使用Mybatis来实现数据库操作。Mybatis是一个基于Java的持久层框架,提供了丰富的数据库操作功能。 6. ...
本篇文章将深入探讨如何使用CXF框架在SOAP协议下开发Web服务。 首先,我们需要理解SOAP的基本概念。SOAP是一种轻量级的消息协议,其主要目标是提供一种独立于语言、平台和网络协议的方式,使得分布式系统能够通过...
与 Axis2 和 JBossWS 等其他WebService框架相比,CXF在性能、易用性和社区支持方面都有优势。CXF的API设计更加直观,且其对REST的支持使其在现代Web开发中更具竞争力。 **七、最佳实践** 1. **保持WSDL清晰简洁**...
【标题】"webservice cxf_demo" 涉及到的是使用Apache CXF框架创建的Web服务示例项目。在Web服务的世界里,CXF是一个流行的开源工具,它支持SOAP和RESTful风格的服务,用于构建和消费Web服务。这个"CXF_demo"很可能...
CXF框架是Apache组织开发的一款开源服务开发框架,主要用于构建和部署Web服务。它支持多种Web服务标准,如SOAP、RESTful、WS-*等,使得开发者可以方便地创建和消费Web服务。本教程将深入探讨如何使用CXF框架发布Web...
WebService的CXF框架是一个广泛使用的开源项目,用于构建和消费Web服务。它提供了一种简单且强大的方式来实现基于SOAP(Simple Object Access Protocol)和RESTful(Representational State Transfer)风格的Web服务...
CXF Webservice 开发手册
【标题】"WebService CXF 开发实战"涵盖了在Java环境中使用Apache CXF框架进行Web服务开发的关键技术。Apache CXF是一个开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。CXF允许开发者...
WebService CXF 开发教程 eclipse插件配置 开发及代码说明
这些文件对于理解 CXF 应用的构建和开发环境至关重要。 通过以上介绍,我们可以看到CXF在处理对象传递时的灵活性和便利性。了解这些基础知识,开发者可以更高效地创建和使用Web服务,实现复杂数据类型的交互。在...
标题 "cxf+spring=webservice CXF 应用开发" 暗示了我们将讨论如何结合Apache CXF和Spring框架来创建Web服务。Apache CXF是一个开源的Java框架,主要用于构建和部署SOAP和RESTful Web服务。Spring框架则是一个广泛...
在IT行业中,SpringBoot、WebService和cxf是三个非常重要的技术组件,它们分别代表了现代Java应用程序开发的基础、服务间通信的重要方式以及一种强大的服务框架。在这个主题中,我们将深入探讨如何在SpringBoot项目...
本篇文章将深入探讨如何利用CXF来实现一个简单的WebService接口开发。 首先,我们要了解什么是CXF。CXF全称CXF Commons eXtensible Services Framework,它不仅支持SOAP(Simple Object Access Protocol)协议,还...
总结来说,基于CXF的Web服务示例提供了一个完整的流程,从创建服务接口、实现服务逻辑、配置服务到测试服务,涵盖了Web服务开发的各个方面。通过学习这个例子,开发者可以掌握CXF的基本使用方法,进一步拓展到更复杂...
- **项目命名**:首先,在开发环境中创建一个新的Web项目,并将其命名为`cxf_bigdata`。 ##### 2. 目录结构 - 项目的目录结构应该包括以下几个主要部分: - `WEB-INF` - `classes` - 包含POJO类、接口和服务实现...
1. 服务端开发:CXF允许开发者使用Java编程模型(如JAX-WS或JAX-RS)来定义服务接口,然后自动生成服务实现和WSDL(Web Services Description Language)。 2. 客户端调用:CXF也支持生成客户端代理代码,使得Java...
CXF框架提供了基于Java的接口来定义和实现WebService,这些接口基于JAX-WS(Java API for XML Web Services)标准。开发者可以通过CXF快速地创建服务端点和服务客户端,实现服务的发布和调用。 2. **XML处理** 在...
### CXF框架开发WebService概述及代码 #### WebService概念与CXF框架 WebService技术使得不同系统之间能够通过网络进行通信,而无需关心底层的具体实现细节。这种基于HTTP协议的组件服务,强调的是分布式应用程序...
2.用cxf开发webservice 3.这个服务端和客户端的小demo 在服务端 对外开放接口服务,然后在客户端 调用服务端的方法, 实现客户端(一个javaweb项目)对服务端(javaweb项目)方法的调用, 实际上就是发送和接收消息...