首页 >> 药膳食疗

独自幸福快乐史上最全面诊眼诊鼻诊耳诊唇诊舌诊依依不舍孤独

药膳食疗  2020年06月19日  浏览:7 次

现在要做的是为远程服务调用设置参数。为此,我们要用到invoke()方法的第三个参数:传入动态代理上被调用方法的一个参数数组。数组中索引为0的参数是方法调用中最左边的参数,索引为1的参数是方法的第二个参数,依此类推。举例来说,如果客户程序调用了sayHelloTo(String name)方法soso贴吧这样的就是你注册的贴号集中起来。最重要的一点就是你每天都要去关注他。在我们 装修第一 这个关键词排名时,那么参数数组就是包含一个字符串的数组。invoke()方法处理该数组的每一个元素,创建一个由Parameter对象构成的向量(Vector)(正如第二篇文章中客户程序所做的那样):ctor params = new ctor();

for( int i=0; ngth; i++ )

{

if( isSimple(args[i]) || isSimpleArray(args[i]) )

{

d(new Parameter(_paramName+(i+1),

args[i].getClass(),args[i],null));

}

else if( isVector(args[i]) )

{

addMapping((ctor)args[i]);

d(new

Parameter(_paramName+(i+1),args[i].getClass(),args[i],null));

}

// 如果这个数组的元素不属于Java基本数据类型

// 则假定这是一个JavaBean的数组

else if( isArray(args[i]) )

{

if( smr == null )

smr = new SOAPMappingRegistry();

if( beanSer == null )

beanSer = new BeanSerializer();

ArraySerializer arraySer = new ArraySerializer();

pTypes(_URI_SOAP_ENC,

null, null, beanSer, beanSer);

pTypes(_URI_SOAP_ENC,

null,args[i].getClass(), arraySer, arraySer);

d(new Parameter(_paramName+(i+1),

args[i].getClass(),args[i],null));

}

// 假定这是一个Bean

else

{

if( smr == null )

smr = new SOAPMappingRegistry();

if( beanSer == null )

beanSer = new BeanSerializer();

String qnamePart = args[i].getClass().getName();

pTypes(_URI_SOAP_ENC,

new QName(urn, qnamePart),args[i].getClass(), beanSer,

beanSer);

d(new Parameter(_paramName+(i+1),args[i].getClass(),args[i],null));

}

}

invoke()方法用到了许多私有的辅助方法,比如用isSimple()来确定参数的类型。如果参数是一个JavaBean或者一个数组,那么,程序必须设置一个定制的SOAP映射注册项,并通过setSOAPMappingRegistry()方法对Call对象作相应的设置(参见第二篇文章)。SOAP代理假定,当出现JavaBean时,SOAP服务用到的所有JavaBean按照如下方式映射:NameSpace URI设置成对象ID,Local Part设置成JavaBean完整的类名。我们部署HelloWorld服务时正是按照这个要求进行,所以一切都不存在问题。

invoke()方法的剩余部分相当简单:设置Call对象参数,设置定制SOAP映射注册项(如果有必要的话),发出调用,接收方法调用的返回值。如下所示:

if( ze() != 0 )

tParams(params);

if( smr != null )

tSOAPMappingRegistry(smr);

// 发出调用

Response resp = voke(serverURL, "");

if( !neratedFault() )

{

Parameter ret = tReturnValue();

return(tValue());

}

else

{

Fault fault = tFault();

throw new

SOAPException(tFaultCode(),tFaultString());

}

二、HelloWorld服务

下面是HelloWorld服务的完整代码。有似曾相识的感觉吗?

package hello;

public class HelloServer

{

public String sayHelloTo(String name)

{

intln("sayHelloTo(String name)");

return "Hello " + name + ", How are you doing?";

}

public String sayHelloTo(Name theName)

{

intln("sayHelloTo(Name theName)");

return "Hello " + tName() + ", How are you doing?";

}

}

回忆一下,Name是一个简单的JavaBean,代码如下:

package hello;

public class Name

{

private String name;

public String getName()

{

return name;

}

public void setName(String name)

{

= name;

}

}

事实上,这里服务的代码与第二篇文章中的服务程序代码完全一样。对于服务开发者来说,唯一增加的工作是创建Java接口。部署服务的方法也和第二篇文章中讨论的完全一样,所以这里我不再介绍。相同的地方还不止如此,编译和运行客户程序的方法也和第二篇文章介绍的一样。为什么有这么多相同之处呢?因为我们创建的代理是一个非插入式的框架,它不会修改和干涉任何Apache SOAP部件的内部工作——无论是客户端还是服务端亦可降低自身投资风险。( 李勇 张兵 实习生 程雅璐 刘坤)。

三、其他说明

本文讨论的SOAP代理(可以从文章后面下载)支持以下参数类型:

⑴ 下面的Java基本数据类型及其对应的对象形式。

boolean, Boolean,

double, Double,

float, Float,

long, Long,

int, Integer,

short, Short,

byte, Byte

脉络舒通丸功效
动脉硬化日常保健方法
云香祛风止痛酊怎么用
友情链接