`

webService cxf 框架开发的webservice接口

阅读更多
分享基于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); 



=================================第四步   生成客户端==========================命令窗口执行 (之前要配置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()); //追加一个过过滤器


=====================客户端  第二步=========================
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; 



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
address="IsayHelloServer"> 
<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"/>
 
 
 
      
 
分享到:
评论

相关推荐

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验

    CXF是一个基于Apache的开源WebService框架,提供了丰富的WebService开发功能。 5. Mybatis:在本实验中,我们使用Mybatis来实现数据库操作。Mybatis是一个基于Java的持久层框架,提供了丰富的数据库操作功能。 6. ...

    基于Soap协议下CXF框架开发Webservice

    本篇文章将深入探讨如何使用CXF框架在SOAP协议下开发Web服务。 首先,我们需要理解SOAP的基本概念。SOAP是一种轻量级的消息协议,其主要目标是提供一种独立于语言、平台和网络协议的方式,使得分布式系统能够通过...

    WebService CXF 详细教程

    与 Axis2 和 JBossWS 等其他WebService框架相比,CXF在性能、易用性和社区支持方面都有优势。CXF的API设计更加直观,且其对REST的支持使其在现代Web开发中更具竞争力。 **七、最佳实践** 1. **保持WSDL清晰简洁**...

    webservice cxf_demo

    【标题】"webservice cxf_demo" 涉及到的是使用Apache CXF框架创建的Web服务示例项目。在Web服务的世界里,CXF是一个流行的开源工具,它支持SOAP和RESTful风格的服务,用于构建和消费Web服务。这个"CXF_demo"很可能...

    CXF框架发布webservice

    CXF框架是Apache组织开发的一款开源服务开发框架,主要用于构建和部署Web服务。它支持多种Web服务标准,如SOAP、RESTful、WS-*等,使得开发者可以方便地创建和消费Web服务。本教程将深入探讨如何使用CXF框架发布Web...

    webService的CXF框架jar包

    WebService的CXF框架是一个广泛使用的开源项目,用于构建和消费Web服务。它提供了一种简单且强大的方式来实现基于SOAP(Simple Object Access Protocol)和RESTful(Representational State Transfer)风格的Web服务...

    CXF(Webservice)开发手册

    CXF Webservice 开发手册

    webservice cxf 开发实战

    【标题】"WebService CXF 开发实战"涵盖了在Java环境中使用Apache CXF框架进行Web服务开发的关键技术。Apache CXF是一个开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。CXF允许开发者...

    WebService CXF 开发教程

    WebService CXF 开发教程 eclipse插件配置 开发及代码说明

    SpringBoot WebService cxf接口发布以及logbok日志集成

    在IT行业中,SpringBoot、WebService和cxf是三个非常重要的技术组件,它们分别代表了现代Java应用程序开发的基础、服务间通信的重要方式以及一种强大的服务框架。在这个主题中,我们将深入探讨如何在SpringBoot项目...

    WebService CXF 对象传递 附

    这些文件对于理解 CXF 应用的构建和开发环境至关重要。 通过以上介绍,我们可以看到CXF在处理对象传递时的灵活性和便利性。了解这些基础知识,开发者可以更高效地创建和使用Web服务,实现复杂数据类型的交互。在...

    cxf+spring=webservice CXF 应用开发

    标题 "cxf+spring=webservice CXF 应用开发" 暗示了我们将讨论如何结合Apache CXF和Spring框架来创建Web服务。Apache CXF是一个开源的Java框架,主要用于构建和部署SOAP和RESTful Web服务。Spring框架则是一个广泛...

    CXF实现简单的WebService接口开发

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

    webService(基于cxf)的完整例子

    总结来说,基于CXF的Web服务示例提供了一个完整的流程,从创建服务接口、实现服务逻辑、配置服务到测试服务,涵盖了Web服务开发的各个方面。通过学习这个例子,开发者可以掌握CXF的基本使用方法,进一步拓展到更复杂...

    webservice cxf集成servlet

    - **项目命名**:首先,在开发环境中创建一个新的Web项目,并将其命名为`cxf_bigdata`。 ##### 2. 目录结构 - 项目的目录结构应该包括以下几个主要部分: - `WEB-INF` - `classes` - 包含POJO类、接口和服务实现...

    webservice cxf.jar 相关包

    1. 服务端开发:CXF允许开发者使用Java编程模型(如JAX-WS或JAX-RS)来定义服务接口,然后自动生成服务实现和WSDL(Web Services Description Language)。 2. 客户端调用:CXF也支持生成客户端代理代码,使得Java...

    cxf框架的webservice,传递json,xml

    CXF框架提供了基于Java的接口来定义和实现WebService,这些接口基于JAX-WS(Java API for XML Web Services)标准。开发者可以通过CXF快速地创建服务端点和服务客户端,实现服务的发布和调用。 2. **XML处理** 在...

    CXF框架开发WebService概述及代码

    ### CXF框架开发WebService概述及代码 #### WebService概念与CXF框架 WebService技术使得不同系统之间能够通过网络进行通信,而无需关心底层的具体实现细节。这种基于HTTP协议的组件服务,强调的是分布式应用程序...

    eclipse+CXF开发webService

    eclipse+CXF开发webService 本文档主要介绍了使用eclipse和CXF开发webService的步骤,涵盖了准备工作、配置eclipse上的CXF插件、开发代码和生成WSDL文件等方面的内容。 一、准备工作 在开发webService之前,需要...

    Java cxf开发webservice,分别有客户端和服务端

    2.用cxf开发webservice 3.这个服务端和客户端的小demo 在服务端 对外开放接口服务,然后在客户端 调用服务端的方法, 实现客户端(一个javaweb项目)对服务端(javaweb项目)方法的调用, 实际上就是发送和接收消息...

Global site tag (gtag.js) - Google Analytics