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

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

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

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

IN 參數是 JAVA 因有的參數, OUT , INOUT 參數不是 JAVA 固有的。

復制傳遞:IN參數

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

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

在作如下調用時

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

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

引用傳遞 : INOUT 參數 OUT 參數 .

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

Holder 類:

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

從 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參數,如果part是一個OUT參數,part標記會列在operation元素的parameterOrder屬性中.OUT參數也需要Holder類型.

Javax.xml.rpc.holders包中提供了一個Holder類,用于映射到java原始類型的INOUT參數和OUT參數。如IntHolder等,同時也提供了一組為nillable內置類型定義的Holder類型,如IntegerWrapperHolder等.

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

  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 類型的具體實現 , 采用 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. }   

接口的實現類 :

  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 文件并發布

客戶端的調用 :

  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開發中的Web服務通信Holder類型就介紹完了。

【編輯推薦】

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

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應用快速開發

2009-06-22 10:04:00

J2EE web se

2009-06-18 16:13:14

J2EE開發

2009-06-23 08:06:46

J2EE體系架構J2EE模型J2EE設計模式

2009-06-10 14:10:23

J2EE學習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項目開發流程

2009-06-23 16:48:26

J2EE常見問題J2EE平臺

2009-06-22 17:05:41

Java EEJava企業應用

2009-06-22 17:34:40

J2EE架構

2009-06-18 15:54:57

J2EE下使用JNDI

2009-06-23 08:12:48

J2EE調用存儲過程

2009-06-22 16:21:02

J2EE線程

2009-06-16 11:14:00

Hibernate+SJ2EE應用開發

2009-06-22 11:24:00

J2EE Weblog
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99国产精品久久久久老师 | 国产黄a一级 | 一区二区三区四区国产精品 | 国产精品日韩一区 | 91欧美精品成人综合在线观看 | 日韩精品无码一区二区三区 | 免费看国产片在线观看 | 中文字幕一区在线观看视频 | 人人看人人干 | 久久久久国产视频 | 美女天堂在线 | 一区二区三区在线播放 | 日本精品一区二区三区四区 | 亚洲男人天堂 | 欧美中文字幕在线观看 | 久久中文字幕av | 亚洲国产日韩欧美 | 久久美国| 国产一区二区三区 | 欧美日本一区 | 国产成人免费一区二区60岁 | 亚洲第一av网站 | 日韩视频一区二区 | 综合久久久久 | 国内精品久久久久久久影视简单 | 国产免费观看一区 | 日韩精品在线视频 | 欧美精品成人一区二区三区四区 | 亚洲第一在线视频 | 91视在线国内在线播放酒店 | 在线观看免费黄色片 | 九九九久久国产免费 | 精品二区 | 午夜精品久久久久久 | 国产精品国产三级国产aⅴ中文 | 国产乡下妇女做爰 | 欧美精品一区久久 | 伊人艹 | 久一久| 精品伦精品一区二区三区视频 | 精品国产91乱码一区二区三区 |