日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
J2EEwebservice開(kāi)發(fā)(六)Web服務(wù)通信Holder類(lèi)型

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

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),卓資網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:卓資等地區(qū)。卓資做網(wǎng)站價(jià)格咨詢:13518219792

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

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

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

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

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

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

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

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

在實(shí)現(xiàn)引用傳遞的編程語(yǔ)言中,如果 test 方法的兩面?zhèn)€參數(shù)定義為引用傳遞 , 對(duì)上述 test 方法調(diào)用后,再打印 intValue 跟 dateValue 的值,會(huì)發(fā)現(xiàn)這兩個(gè)值已經(jīng)發(fā)生了改變。但是 OUT 參數(shù)更象一個(gè)返回值,因?yàn)橹狄獜姆椒ㄖ袀鞒龆皇莻魅?。使?OUT 參數(shù)數(shù),激活方法前不訪問(wèn)變量的值,即傳入的值被忽略了。

Holder 類(lèi):

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

從 WSDL 映射 HOLDER 類(lèi)型 :

接口定義

 
 
 
  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; 

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. … 

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

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

自定義Holder類(lèi)型。必須實(shí)現(xiàn)Holder標(biāo)志接口, 其屬性變量名必須為 value 并且必須定義一個(gè)空的構(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.     } 

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

定義一個(gè) bean 類(lèi) :

 
 
 
  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.     } 

給 bean 定制一個(gè) 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.     } 

定義一個(gè)接口 :

 
 
 
  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; 

接口的實(shí)現(xiàn)類(lèi) :

 
 
 
  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.     } 

用于 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. public class ClientTest { 
  9.     private HolderTestBeanInterface1 getPort() throws Exception { 
  10.         ServiceFactoryImpl factory = new ServiceFactoryImpl(); 
  11.         URL wsdlURL = new File( 
  12.                 "holderTest/WEB-INF/wsdl/HolderTestBeanInterface1.wsdl").toURL(); 
  13.         URL mappingURL = new File( 
  14.                 "holderTest/WEB-INF/HolderTestBeanInterface1.xml").toURL(); 
  15.         QName qname = new QName("http://holder", "HolderTestBeanInterface1"); 
  16.         Service service = factory.createService(wsdlURL, qname, mappingURL); 
  17.         HolderTestBeanInterface1 port = (HolderTestBeanInterface1) service.getPort(HolderTestBeanInterface1.class); 
  18.         return port; 
  19.     } 
  20.     public static void main(String[] args) throws Exception{ 
  21.         ClientTest clienttest = new ClientTest(); 
  22.             HolderTestBeanInterface1 h=clienttest.getPort(); 
  23.         Date date=new Date(); 
  24.         System.out.println(date+  " date begin...  "); 
  25.         GregorianCalendar value = new GregorianCalendar(2006, 1, 1, 23, 59, 59); 
  26.         CalendarHolder holder = new CalendarHolder(value); 
  27.         System.out.println(holder.value.getTime()+" calendarHolder begin... "); 
  28.         h.echoCalendar(holder,date); 
  29.         System.out.println(holder.value.getTime()+" calendarHolder end ... "); 
  30.         System.out.println(date+ "  date end ... "); 
  31.         BeanTest beanTest=new BeanTest(); 
  32.         beanTest.setBeanName("test"); 
  33.         BeanTest beanTest2=new BeanTest(); 
  34.         beanTest2.setBeanName("test2"); 
  35.         System.out.println(beanTest.getBeanName()+" holder begin.. "); 
  36.         System.out.println(beanTest2.getBeanName()+" bean begin.."); 
  37.         BeanTestHolder beanTestHolder = new BeanTestHolder(beanTest); 
  38.         h.echoBeanHolder(beanTestHolder,beanTest2); 
  39.         System.out.println(beanTest2.getBeanName() + "  bean end.."); 
  40.         System.out.println(beanTestHolder.value.getBeanName()+" holder end.. "); 
  41.     } 

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


網(wǎng)站題目:J2EEwebservice開(kāi)發(fā)(六)Web服務(wù)通信Holder類(lèi)型
分享URL:http://m.5511xx.com/article/copdegp.html