成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

J2EE web service開發(fā)(六)Web服務(wù)通信Holder類型

開發(fā) 后端
本文講述J2EE web service開發(fā)中的Web服務(wù)通信Holder類型。Holder 是一個接口,它只是提供了一個補救措施,以在 java 中支持引用傳遞。這樣就使得需要用 java 與支持 INOUT,OUT 參數(shù)的編程語言寫的 web 服務(wù)進行通信。

要弄清楚什么是 Holder 類型,得先搞清楚 IN 參數(shù), OUT 參數(shù), INOUT 參數(shù)的概念。

IN 參數(shù)是 JAVA 因有的參數(shù), OUT , INOUT 參數(shù)不是 JAVA 固有的。

復(fù)制傳遞:IN參數(shù)

java 編程語言對作為參數(shù)傳遞給方法調(diào)用的所有原始值采用復(fù)制傳遞的方式,即傳遞的值是方法調(diào)用中所使用變量的復(fù)制,而不是原始值本身。比如定義一個方法

  1. test(int intValue,Date dateValue){   
  2. intValue=5;   
  3. dateValue=new Date(0);   
  4. }   

在作如下調(diào)用時

  1. int intValue=1;   
  2. Date dateValue=new Date();   
  3. test(intVlaue,dateValue);   
  4. System.out.println(intValue) // 打印1   
  5. System.out.pritnln(dateValue) // 打印現(xiàn)在的時間。  

但是在 test 方法中對參數(shù)的值作了修改。而實際的參數(shù)值并未發(fā)生改變。

引用傳遞 : INOUT 參數(shù) OUT 參數(shù) .

在實現(xiàn)引用傳遞的編程語言中,如果 test 方法的兩面?zhèn)€參數(shù)定義為引用傳遞 , 對上述 test 方法調(diào)用后,再打印 intValue 跟 dateValue 的值,會發(fā)現(xiàn)這兩個值已經(jīng)發(fā)生了改變。但是 OUT 參數(shù)更象一個返回值,因為值要從方法中傳出而不是傳入。使用 OUT 參數(shù)數(shù),激活方法前不訪問變量的值,即傳入的值被忽略了。

Holder 類:

在 JAX-RPC 中支持 INOUT,OUT 參數(shù)。 Holder 是一個接口,它只是提供了一個補救措施,以在 java 中支持引用傳遞。這樣就使得需要用 java 與支持 INOUT,OUT 參數(shù)的編程語言寫的 web 服務(wù)進行通信 .

從 WSDL 映射 HOLDER 類型 :

接口定義

  1. public interface HolderTestBeanInterface1 extends Remote {   
  2.     public void echoCalendar(CalendarHolder val, Date date) throws   
  3.             RemoteException;   
  4.     public void echoBeanHolder(BeanTestHolder beanTestHolder,BeanTest beanTest) throws   
  5.             RemoteException;   
  6. }   

WSDL 文檔

  1. < ?xml version="1.0" encoding="UTF-8"?>   
  2. < definitions name='HolderTestBeanInterface1' targetNamespace='http://holder' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:tns='http://holder' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>   
  3. < message name='HolderTestBeanInterface1_echoCalendar'>   
  4.   < part name='Calendar_1' type='xsd:dateTime'/>   
  5.   < part name='Date_2' type='xsd:dateTime'/>   
  6.  < /message>   
  7.  < message name='HolderTestBeanInterface1_echoCalendarResponse'>   
  8.   < part name='Calendar_1' type='xsd:dateTime'/>   
  9.  < /message>   
  10.   < operation name='echoCalendar' parameterOrder='Calendar_1 Date_2'>   
  11.    < input message='tns:HolderTestBeanInterface1_echoCalendar'/>   
  12.    < output message='tns:HolderTestBeanInterface1_echoCalendarResponse'/>   
  13.   < /operation>   
  14. < /portType>   
  15. …   

標記為 Calendar_1 的 part 元素既在 input 消息中又在 ouput 消息中 ,jax-rpc 編譯器知道它是一個 INOUT 類型 , 同時也需要 Holer 類型。如果在output消息定義一個part元素,這表示它是一個返回值或者一個OUT參數(shù),如果part是一個OUT參數(shù),part標記會列在operation元素的parameterOrder屬性中.OUT參數(shù)也需要Holder類型.

Javax.xml.rpc.holders包中提供了一個Holder類,用于映射到j(luò)ava原始類型的INOUT參數(shù)和OUT參數(shù)。如IntHolder等,同時也提供了一組為nillable內(nèi)置類型定義的Holder類型,如IntegerWrapperHolder等.

自定義Holder類型。必須實現(xiàn)Holder標志接口, 其屬性變量名必須為 value 并且必須定義一個空的構(gòu)造函數(shù)就象下面這樣:

  1. public  class BeanTestHolder implements javax.xml.rpc.holders.Holder {   
  2.     public BeanTest value;   
  3.     public BeanTestHolder(){   
  4.     }   
  5.     public BeanTestHolder(BeanTest beanTest){   
  6.         value=beanTest;   
  7.     }   
  8. }   

Jboss Web Service 的 Holder 類型的具體實現(xiàn) , 采用 Jboss 4.04 版本 .

定義一個 bean 類 :

  1. public class BeanTest {   
  2.     private String beanName;   
  3.     public BeanTest(){   
  4.     }   
  5.     public String getBeanName() {   
  6.         return beanName;   
  7.     }   
  8.     public void setBeanName(String beanName) {   
  9.         this.beanName = beanName;   
  10.     }   
  11. }   

給 bean 定制一個 Holder:

  1. package holder;   
  2. public  class BeanTestHolder implements javax.xml.rpc.holders.Holder {   
  3.     public BeanTest value;   
  4.     public BeanTestHolder(){   
  5.     }   
  6.     public BeanTestHolder(BeanTest beanTest){   
  7.         value=beanTest;   
  8.     }   
  9. }   

定義一個接口 :

  1. public interface HolderTestBeanInterface1 extends Remote {   
  2.     public void echoCalendar(CalendarHolder val, Date date) throws   
  3.             RemoteException;   
  4.     public void echoBeanHolder(BeanTestHolder beanTestHolder,BeanTest beanTest) throws   
  5.             RemoteException;   
  6. }   

接口的實現(xiàn)類 :

  1. import javax.xml.rpc.holders.*;   
  2. import java.util.Date;   
  3. public class HolderTestBean implements HolderTestBeanInterface1 {   
  4.     public void echoCalendar(CalendarHolder val,Date date) {   
  5.         System.out.println("echoCalendar: " + val.value.getTime());   
  6.         val.value.setTime(new Date());   
  7.         System.out.println(date);   
  8.     }   
  9.     public void echoBeanHolder(BeanTestHolder beanTestHolder,BeanTest beanTest){   
  10.         BeanTest beantest=beanTestHolder.value;   
  11.         System.out.println(beantest.getBeanName()+ " holder ");   
  12.         beantest.setBeanName(" new name ");   
  13.         System.out.println(beantest.getBeanName()+ " holder ");   
  14.         System.out.println(beanTest.getBeanName()+ " bean ");   
  15.         beanTest.setBeanName(" new name too ");   
  16.         System.out.println(beanTest.getBeanName()+" bean ");   
  17.     }   
  18. }   

用于 jboss 自帶的 wstools 工具的配置文件 wstools-config.xml

  1. < ?xml version="1.0" encoding="UTF-8"?>   
  2. < !--   
  3.   wstools -cp classes -config wstools-config.xml   
  4. -->   
  5. < configuration xmlns="http://www.jboss.org/jbossws-tools"   
  6.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  7.    xsi:schemaLocation="http://www.jboss.org/jbossws-tools http://www.jboss.org/jbossws-tools/schema/jbossws-tool_1_0.xsd">   
  8.   < java-wsdl>   
  9.     < service name="HolderTestBeanInterface1" style="rpc" endpoint="holder.HolderTestBeanInterface1"/>   
  10.     < namespaces target-namespace="http://holder" type-namespace="http://holder"/>   
  11.     < mapping file="HolderTestBeanInterface1.xml"/>   
  12.     < webservices servlet-link="HolderTestBeanInterface1"/>   
  13.   < /java-wsdl>   
  14. < /configuration>  

生成所需的 webservices.xml,jax-rpc 映射文件 , 及 wsdl 文檔

wstools -config wstools-config.xml

把生成的 wsdl 文件夾 ,webservices.xml 及映射文件放到 web-inf 目錄下。

配置 web.xml 文件

  1. < servlet>   
  2.   < display-name>HolderTestBeanInterface1 Servlet   
  3.   < servlet-name>HolderTestBeanInterface1   
  4.   < servlet-class>holder.HolderTestBean   
  5. < /servlet>   
  6. < servlet-mapping>   
  7.   < servlet-name>HolderTestBeanInterface1   
  8.   < url-pattern>/HolderTestBeanInterface1   
  9. < /servlet-mapping>   
  10. < servlet-mapping>   
  11.   < servlet-name>HolderTestBeanInterface1   
  12.   < url-pattern>/services/*   
  13. < /servlet-mapping>   

打包成 war 文件并發(fā)布

客戶端的調(diào)用 :

  1. import java.net.URL;   
  2. import javax.xml.rpc.*;   
  3. import javax.xml.namespace.QName;   
  4. import java.util.*;   
  5. import java.io.File;   
  6. import javax.xml.rpc.holders.CalendarHolder;   
  7. import org.jboss.ws.jaxrpc.ServiceFactoryImpl;   
  8.  
  9. public class ClientTest {   
  10.     private HolderTestBeanInterface1 getPort() throws Exception {   
  11.         ServiceFactoryImpl factory = new ServiceFactoryImpl();   
  12.         URL wsdlURL = new File(   
  13.                 "holderTest/WEB-INF/wsdl/HolderTestBeanInterface1.wsdl").toURL();   
  14.         URL mappingURL = new File(   
  15.                 "holderTest/WEB-INF/HolderTestBeanInterface1.xml").toURL();   
  16.         QName qname = new QName("http://holder""HolderTestBeanInterface1");   
  17.         Service service = factory.createService(wsdlURL, qname, mappingURL);   
  18.         HolderTestBeanInterface1 port = (HolderTestBeanInterface1) service.getPort(HolderTestBeanInterface1.class);   
  19.         return port;   
  20.     }   
  21.     public static void main(String[] args) throws Exception{   
  22.         ClientTest clienttest = new ClientTest();   
  23.             HolderTestBeanInterface1 h=clienttest.getPort();   
  24.         Date date=new Date();   
  25.         System.out.println(date+  " date begin...  ");   
  26.         GregorianCalendar value = new GregorianCalendar(200611235959);   
  27.         CalendarHolder holder = new CalendarHolder(value);   
  28.         System.out.println(holder.value.getTime()+" calendarHolder begin... ");   
  29.         h.echoCalendar(holder,date);   
  30.         System.out.println(holder.value.getTime()+" calendarHolder end ... ");   
  31.         System.out.println(date+ "  date end ... ");   
  32.         BeanTest beanTest=new BeanTest();   
  33.         beanTest.setBeanName("test");   
  34.         BeanTest beanTest2=new BeanTest();   
  35.         beanTest2.setBeanName("test2");   
  36.         System.out.println(beanTest.getBeanName()+" holder begin.. ");   
  37.         System.out.println(beanTest2.getBeanName()+" bean begin..");   
  38.         BeanTestHolder beanTestHolder = new BeanTestHolder(beanTest);   
  39.         h.echoBeanHolder(beanTestHolder,beanTest2);   
  40.         System.out.println(beanTest2.getBeanName() + "  bean end..");   
  41.         System.out.println(beanTestHolder.value.getBeanName()+" holder end.. ");   
  42.     }   
  43. }   
  44.  

這樣,J2EE web Service開發(fā)中的Web服務(wù)通信Holder類型就介紹完了。

【編輯推薦】

  1. j2ee web service開發(fā)(三)SAAJ帶附件的soap消息
  2. j2ee web service開發(fā)(二)動態(tài)代理與動態(tài)調(diào)用
  3. j2ee web service開發(fā)(一) 映射數(shù)組復(fù)雜類型
  4. j2ee web service開發(fā)(五)把ejb發(fā)布為web服務(wù)
  5. j2ee web service開發(fā)(四)soap報頭與處理
責(zé)任編輯:book05 來源: csdn
相關(guān)推薦

2009-06-22 10:14:00

J2EE web se

2009-06-22 09:48:00

J2EE web se

2009-06-22 10:09:00

J2EE web se

2009-06-22 09:56:00

J2EE web se

2009-06-22 11:50:00

J2EE Web應(yīng)用快速開發(fā)

2009-06-22 10:04:00

J2EE web se

2009-06-18 16:13:14

J2EE開發(fā)

2009-06-23 08:06:46

J2EE體系架構(gòu)J2EE模型J2EE設(shè)計模式

2009-06-10 14:10:23

J2EE學(xué)習(xí)J2EE是什么

2009-06-10 13:37:06

J2EE可伸縮性J2EE靈活性J2EE維護

2009-06-11 17:06:11

J2EE歷史Java EE概述

2009-06-22 17:09:00

J2EE項目開發(fā)流程

2009-06-23 16:48:26

J2EE常見問題J2EE平臺

2009-06-22 17:05:41

Java EEJava企業(yè)應(yīng)用

2009-06-22 16:21:02

J2EE線程

2009-06-22 17:34:40

J2EE架構(gòu)

2009-06-18 15:54:57

J2EE下使用JNDI

2009-06-23 08:12:48

J2EE調(diào)用存儲過程

2011-07-21 14:23:03

J2EE

2009-06-16 11:14:00

Hibernate+SJ2EE應(yīng)用開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 色资源在线视频 | 狠狠操av| 久久精品视频9 | 国产精品污www一区二区三区 | 狠狠综合久久av一区二区老牛 | 国产一级电影网 | 日韩av免费在线观看 | 欧美成人二区 | 玖玖国产精品视频 | 天天想天天干 | 免费a网| 免费观看www7722午夜电影 | 天天干b | 亚洲高清免费观看 | 亚洲精品日韩在线观看 | 天天干夜夜操视频 | 国产精品久久久久久久久久久免费看 | 久久久精品一区二区三区 | h在线 | 国产成人综合网 | 高清免费在线 | 欧美精品在线一区二区三区 | a视频在线 | 国产午夜精品久久久久 | 中文字幕亚洲欧美 | 免费观看成人鲁鲁鲁鲁鲁视频 | 亚洲精品一区二区 | 亚洲精品自在在线观看 | 欧美一区二区三区在线视频 | 免费观看一级特黄欧美大片 | 国产精品日韩一区二区 | 91久久国产 | 久久综合入口 | 天天操天天舔 | 久久99精品久久久 | 亚洲精品久久久 | 日韩视频一区二区在线 | 精品96久久久久久中文字幕无 | 欧美日韩国产一区二区三区 | 久久99精品国产 | 亚洲精品国产成人 |