`

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插件配置 开发及代码说明

    WebService CXF 对象传递 附

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

    cxf+spring=webservice CXF 应用开发

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

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

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

    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协议的组件服务,强调的是分布式应用程序...

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

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

Global site tag (gtag.js) - Google Analytics