欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

jax-ws handler 的詳解及簡(jiǎn)單實(shí)例

 更新時(shí)間:2017年09月18日 11:41:57   作者:chyroger  
這篇文章主要介紹了 jax-ws handler 的詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下

 jax-ws handler 的詳解及簡(jiǎn)單實(shí)例

aop技術(shù)一般用于某個(gè)對(duì)象的函數(shù)調(diào)用的日志,認(rèn)證等。

webservice是遠(yuǎn)程的函數(shù)調(diào)用,也需要類(lèi)似的aop方法,舉例jax-ws的webservice,handler就相當(dāng)于aop。

舉一例jax-ws handler例子

先寫(xiě)個(gè)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 + "."; 
  } 
} 

超級(jí)傻瓜的webservice,唯一特別的就是@HandlerChain標(biāo)注,其中的handlers.xml是一個(gè)描述jax-ws 的handler鏈的xml文件,這個(gè)文件可以放在與此源文件同一目錄下。

來(lái)看一下handlers.xml的內(nèi)容

<?xml version="1.0" encoding="UTF-8"?> 
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"> 
  <handler-chain> 
    <handler> 
      <handler-name>ServiceSOAPHandler</handler-name> 
      <handler-class>com.ws.handler.HelloHandler</handler-class> 
    </handler> 
  </handler-chain> 
</handler-chains> 

其中定義了handler鏈,鏈里只有一個(gè)handler,也可以包括多個(gè)handler

再看看handler的具體實(shí)現(xiàn):

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<SOAPMessageContext> { 
 
 
  @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<QName> getHeaders() 
  { 
    // TODO Auto-generated method stub 
    return null; 
  } 
 
} 

一個(gè)handler必須實(shí)現(xiàn)SOAPHandler或LogicalHandler接口,至于他們兩者的區(qū)別,與Handler接口的關(guān)系,以及<>中的XXXContext的意義,請(qǐng)參考jaxws的spec,這里只是helloworld例子。

所有接口定義的方法實(shí)際上我就實(shí)現(xiàn)了一個(gè),打印了被調(diào)用的webservice的名字,實(shí)際上可以在這里做很多事情,比如修改soap中的內(nèi)容,添加或刪除xml的標(biāo)簽,添加刪除soap附件,獲取soap相關(guān)的字段,更形象的功能可以有加解密,日志等等。

最后還要做一些相關(guān)配置文件修改:

在web.xml中添加:

<listener> 
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class> 
  </listener> 
  <servlet> 
     
    <servlet-name>wsservlet</servlet-name> 
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
  </servlet> 
  <servlet-mapping> 
    <servlet-name>wsservlet</servlet-name> 
    <url-pattern>/helloservice</url-pattern> 
  </servlet-mapping> 

實(shí)際上當(dāng)有類(lèi)標(biāo)有@webservice的標(biāo)注,容器會(huì)自動(dòng)把他變成一個(gè)webservice,但是我試過(guò)這里必須要用上面這種方法,也就是利用jaxws的運(yùn)行時(shí)以wsservlet來(lái)匹配請(qǐng)求,并且在之前就通過(guò)wsservletcontextlistener在初始上下文時(shí)就指定加載某個(gè)類(lèi)作為webservice,這個(gè)listener會(huì)自動(dòng)檢測(cè)webroot下(和web.xml同一目錄)的名為sun-jaxws.xml的文件,其中包含了webservice具體實(shí)現(xiàn)的表述。

在這里sun-jaxws.xml的內(nèi)容為:

<endpoints 
  xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" 
  version="2.0"> 
 
  <endpoint 
    name="helloservice" 
    implementation="com.ws.service.Hello" 
    url-pattern="/helloservice" /> 
 
</endpoints> 

這其中指定的那個(gè)實(shí)現(xiàn)可以是一個(gè)有@Webservice的類(lèi),也可以是實(shí)現(xiàn)Provider接口的類(lèi),相關(guān)Provider可以查看官方spec,它是jax-rs的基礎(chǔ)。

 打包,部署,我是部署在glassfish里的,找個(gè)webservice的測(cè)試工具,eclipse jee套裝里有自帶的webservice客戶(hù)端測(cè)試的。

如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Java全能工具類(lèi)之Hutool的用法詳解

    Java全能工具類(lèi)之Hutool的用法詳解

    Hutool是一個(gè)Java工具類(lèi)庫(kù),由國(guó)內(nèi)的程序員loolly開(kāi)發(fā),目的是提供一些方便、快捷、實(shí)用的工具類(lèi)和工具方法,本文就來(lái)詳細(xì)聊聊它的使用吧
    2023-03-03
  • java 中二分法查找的應(yīng)用實(shí)例

    java 中二分法查找的應(yīng)用實(shí)例

    這篇文章主要介紹了java 中二分法查找的應(yīng)用實(shí)例的相關(guān)資料,希望通過(guò)本文大家能掌握二分法的使用方法,需要的朋友可以參考下
    2017-09-09
  • Intellij IDEA 2017.3使用Lombok及常用注解介紹

    Intellij IDEA 2017.3使用Lombok及常用注解介紹

    這篇文章主要介紹了Intellij IDEA 2017.3使用Lombok及常用注解介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Spring Boot 動(dòng)態(tài)數(shù)據(jù)源示例(多數(shù)據(jù)源自動(dòng)切換)

    Spring Boot 動(dòng)態(tài)數(shù)據(jù)源示例(多數(shù)據(jù)源自動(dòng)切換)

    本篇文章主要介紹了Spring Boot 動(dòng)態(tài)數(shù)據(jù)源示例(多數(shù)據(jù)源自動(dòng)切換),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • Java跨域問(wèn)題的幾種后端解決方式舉例詳解

    Java跨域問(wèn)題的幾種后端解決方式舉例詳解

    跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本,它是由瀏覽器的同源策略造成的,是瀏覽器對(duì)JavaScript實(shí)施的安全限制,這篇文章主要給大家介紹了關(guān)于Java跨域問(wèn)題的幾種后端解決方式的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • MyBatis實(shí)戰(zhàn)之Mapper注解的示例

    MyBatis實(shí)戰(zhàn)之Mapper注解的示例

    本文主要介紹了MyBatis實(shí)戰(zhàn)之Mapper注解的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • java中struts2實(shí)現(xiàn)簡(jiǎn)單的文件上傳與下載

    java中struts2實(shí)現(xiàn)簡(jiǎn)單的文件上傳與下載

    這篇文章主要為大家詳細(xì)介紹了java中struts2實(shí)現(xiàn)簡(jiǎn)單的文件上傳與下載的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 如何獲取Maven項(xiàng)目的版本號(hào)

    如何獲取Maven項(xiàng)目的版本號(hào)

    最近需要在項(xiàng)目中獲取項(xiàng)目的版本號(hào),最笨的方法莫過(guò)于硬編碼一個(gè)版本號(hào),當(dāng)然之前我也是這么干的。不過(guò)閑下來(lái)的時(shí)候突發(fā)奇想Spring Boot項(xiàng)目中pom.xml定義的版本號(hào)(也就是project.version的值)能不能通過(guò)API獲得呢?于是利用摸魚(yú)的時(shí)間研究了這種無(wú)聊透頂?shù)臇|西。
    2021-05-05
  • SpringBoot中的maven插件spring-boot-maven-plugin使用

    SpringBoot中的maven插件spring-boot-maven-plugin使用

    這篇文章主要介紹了SpringBoot中的maven插件spring-boot-maven-plugin使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java?代碼本地設(shè)置Hadoop用戶(hù)名密碼的方法

    Java?代碼本地設(shè)置Hadoop用戶(hù)名密碼的方法

    在Hadoop環(huán)境中,通常使用Kerberos進(jìn)行身份驗(yàn)證,這篇文章主要介紹了Java?代碼本地設(shè)置Hadoop用戶(hù)名密碼的方法,需要的朋友可以參考下
    2024-08-08

最新評(píng)論