热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

jax-wshandler的详解及简单实例

这篇文章主要介绍了jax-wshandler的详解及简单实例的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

 jax-ws handler 的详解及简单实例

aop技术一般用于某个对象的函数调用的日志,认证等。

webservice是远程的函数调用,也需要类似的aop方法,举例jax-ws的webservice,handler就相当于aop。

举一例jax-ws handler例子

先写个webservice

import javax.jws.HandlerChain; 
import javax.jws.WebMethod; 
import javax.jws.WebService; 
 
 
@WebService 
@HandlerChain(file="handlers.xml") 
public class Hello { 
 
  @WebMethod() 
  public String sayHello(String name) { 
    return "Hello " + name + "."; 
  } 
} 

超级傻瓜的webservice,唯一特别的就是@HandlerChain标注,其中的handlers.xml是一个描述jax-ws 的handler链的xml文件,这个文件可以放在与此源文件同一目录下。

来看一下handlers.xml的内容

<&#63;xml version="1.0" encoding="UTF-8"&#63;> 
 
   
     
      ServiceSOAPHandler 
      com.ws.handler.HelloHandler 
     
   
 

其中定义了handler链,链里只有一个handler,也可以包括多个handler

再看看handler的具体实现:

import java.util.Set; 
 
import javax.xml.namespace.QName; 
import javax.xml.ws.handler.MessageContext; 
import javax.xml.ws.handler.soap.SOAPHandler; 
import javax.xml.ws.handler.soap.SOAPMessageContext; 
 
public class HelloHandler implements SOAPHandler { 
 
 
  @Override 
  public boolean handleMessage(SOAPMessageContext context) { 
    System.out.println(context.get(MessageContext.WSDL_SERVICE).toString()); 
    return true; 
  } 
 
  @Override 
  public boolean handleFault(SOAPMessageContext context) { 
    // TODO Auto-generated method stub 
    return true; 
  } 
 
  @Override 
  public void close(MessageContext context) { 
    // TODO Auto-generated method stub 
     
  } 
 
  @Override 
  public Set getHeaders() 
  { 
    // TODO Auto-generated method stub 
    return null; 
  } 
 
} 

一个handler必须实现SOAPHandler或LogicalHandler接口,至于他们两者的区别,与Handler接口的关系,以及<>中的XXXContext的意义,请参考jaxws的spec,这里只是helloworld例子。

所有接口定义的方法实际上我就实现了一个,打印了被调用的webservice的名字,实际上可以在这里做很多事情,比如修改soap中的内容,添加或删除xml的标签,添加删除soap附件,获取soap相关的字段,更形象的功能可以有加解密,日志等等。

最后还要做一些相关配置文件修改:

在web.xml中添加:

 
    com.sun.xml.ws.transport.http.servlet.WSServletContextListener 
   
   
     
    wsservlet 
    com.sun.xml.ws.transport.http.servlet.WSServlet 
    1 
   
   
    wsservlet 
    /helloservice 
   

实际上当有类标有@webservice的标注,容器会自动把他变成一个webservice,但是我试过这里必须要用上面这种方法,也就是利用jaxws的运行时以wsservlet来匹配请求,并且在之前就通过wsservletcontextlistener在初始上下文时就指定加载某个类作为webservice,这个listener会自动检测webroot下(和web.xml同一目录)的名为sun-jaxws.xml的文件,其中包含了webservice具体实现的表述。

在这里sun-jaxws.xml的内容为:

 
 
   
 
 

这其中指定的那个实现可以是一个有@Webservice的类,也可以是实现Provider接口的类,相关Provider可以查看官方spec,它是jax-rs的基础。

 打包,部署,我是部署在glassfish里的,找个webservice的测试工具,eclipse jee套装里有自带的webservice客户端测试的。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


推荐阅读
  • Flowable 6.6.0 表单引擎在Web应用中的集成与使用
    本文档提供了Flowable 6.6.0版本中表单引擎在Web应用程序中的配置和使用指南,包括表单引擎的初始化、配置以及在Web环境下的具体实现方法。 ... [详细]
  • Eclipse 中 JSP 开发环境配置指南
    本文详细介绍了如何在 Eclipse 集成开发环境中配置 JSP 运行环境,包括必要的软件下载、Tomcat 服务器的配置以及常见问题的解决方法。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 烤鸭|本文_Spring之Bean的生命周期详解
    烤鸭|本文_Spring之Bean的生命周期详解 ... [详细]
  • 本文详细介绍了如何正确安装Java EE SDK,并解决在安装过程中可能遇到的问题,特别是关于servlet代码在Apache Tomcat 10中无法运行的情况。 ... [详细]
  • 本文探讨如何利用Java反射技术来模拟Webwork框架中的URL解析过程。通过这一实践,读者可以更好地理解Webwork及其后续版本Struts2的工作原理,尤其是它们在MVC架构下的角色。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • Java EE CDI:解决依赖关系冲突的实例
    在本教程中,我们将探讨如何在Java EE的CDI(上下文和依赖注入)框架中有效解决依赖关系的冲突问题。通过学习如何使用限定符,您将能够为应用程序的不同客户端提供多种接口实现,并确保每个客户端都能正确调用其所需的实现。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 初探Java编程:从入门到实践
    本文旨在为初学者提供Java编程的基础知识,涵盖程序、算法、流程图的概念,以及JDK环境的配置和Eclipse的使用方法。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • 本文将指导您如何在Docker环境中高效地搜索、下载Redis镜像,并通过指定或不指定配置文件的方式启动Redis容器。同时,还将介绍如何使用redis-cli工具连接到您的Redis实例。 ... [详细]
  • Lua编程进阶:数组与迭代器详解
    本文深入探讨了Lua语言中的数组和迭代器,通过实例讲解了一维数组、多维数组的使用方法及迭代器的工作原理。 ... [详细]
author-avatar
mobiledu2502931893
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有