public abstract class ServerRequest extends Object
Request
DII中的Request
对象。
ORB负责创建请求的实施例,并将其传递给动态实现例程(DIR)。 通过实现DynamicImplementation
类创建一个动态服务器(DIR),该类具有单个invoke
方法。 此方法接受一个ServerRequest
对象。 抽象类ServerRequest
定义了访问方法名称,参数和请求上下文的方法,以及将请求结果设置为返回值或异常的方法。
访问请求参数的微妙之处在于,DIR需要提供有关预期参数的类型信息,因为没有关于这些参数的编译信息。 该信息通过一个提供NVList
,这是一个列表NamedValue
对象。 每个NamedValue
对象包含一个Any
对象,这反过来又具有TypeCode
表示参数的类型的对象。
类似地,需要为响应提供类型信息,对于预期结果或异常,因此方法result
和except
将Any
对象作为参数。
DynamicImplementation
, NVList
, NamedValue
Constructor and Description |
---|
ServerRequest() |
Modifier and Type | Method and Description |
---|---|
void |
arguments(NVList args)
指定方法参数类型并检索“in”和“inout”参数值。
|
abstract Context |
ctx()
当操作不是属性访问并且操作的IDL定义包含上下文表达式时,返回IDL中为操作指定的上下文信息;
否则返回零 Context 参考。
|
void |
except(Any any)
已弃用
使用set_exception()
|
String |
op_name()
已弃用
使用操作()
|
String |
operation()
抛出
org.omg.CORBA.NO_IMPLEMENT 异常。
|
void |
params(NVList params)
已弃用
使用方法
arguments
|
void |
result(Any any)
已弃用
使用方法
set_result
|
void |
set_exception(Any any)
抛出
org.omg.CORBA.NO_IMPLEMENT 例外。
|
void |
set_result(Any any)
抛出
org.omg.CORBA.NO_IMPLEMENT 例外。
|
@Deprecated public String op_name()
_get_<attribute_name>
和_set_<attribute_name>
分别。
public String operation()
org.omg.CORBA.NO_IMPLEMENT
异常。
检索被调用的操作的名称。 根据OMG IDL的规则,这些名称在此对象的“最为传统”界面支持的所有操作中必须是唯一的。 注意,用来获取和设置属性的操作名称为_get_<attribute_name>
和_set_<attribute_name>
分别。
CORBA
package comments for unimplemented features
@Deprecated public void params(NVList params)
arguments
请注意,此方法已弃用; 使用方法arguments
它的位置。
除非调用方法set_exception
,DIR必须正确调用此方法一次,即使方法签名不包含参数。 一旦方法arguments
或set_exception
被调用,调用arguments
在同一个ServerRequest
对象将导致一个BAD_INV_ORDER
系统异常。 DIR必须以方法arguments
按照描述操作参数类型的TypeCodes和Flags初始化的NVList,按照它们在IDL规范中显示的顺序(从左到右)。 一个潜在-不同的NVList将从返回arguments
,用“在”和“INOUT”提供的参数值。 如果不调用方法set_exception
,DIR必须在返回之前为返回的NVList提供任何“out”参数的返回值,并且还可以更改任何“inout”参数的返回值。
params
- 该方法的参数,以
NVList
对象的形式
public void arguments(NVList args)
set_exception
,否则DIR必须正确调用此方法一次,即使方法签名不包含参数。
一旦方法arguments
或set_exception
被调用,调用arguments
在同一个ServerRequest
对象将导致一个BAD_INV_ORDER
系统异常。
DIR必须按照它们以IDL规范(从左到右)显示的顺序, arguments
一个用TypeCodes和Flags初始化的NVList方法,描述操作的参数类型。
一个潜在-不同的NVList将从返回arguments
,用“在”和“INOUT”提供的参数值。
如果没有调用方法set_exception
,DIR必须在返回之前提供返回的NVList返回值,并返回任何“out”参数,并且还可以更改任何“inout”参数的返回值。
args
- 该方法的参数,以NVList的形式
CORBA
package comments for unimplemented features
@Deprecated public void result(Any any)
set_result
请注意,此方法已弃用; 使用方法set_result
在它的位置。
除非调用方法set_exception
,否则如果调用的方法具有非空结果类型,那么方法set_result
必须在DIR返回之前被精确调用一次。 如果操作具有无效结果类型,方法set_result
可以可选地被调用一次,其类型为tk_void
的Any
对象。 调用方法set_result
方法之前arguments
被称为或方法之后set_result
或set_exception
被称为将导致BAD_INV_ORDER异常。 当IDL操作包含上下文表达式时,或当传递给参数的NVList没有描述客户端传递的所有参数时,调用方法set_result
而不先前调用方法ctx
,可能会导致MARSHAL系统异常。
any
- 一个
Any
要设置的返回值的
Any
对象
public void set_result(Any any)
org.omg.CORBA.NO_IMPLEMENT
异常。
指定调用的任何返回值。 除非调用方法set_exception
,否则调用的方法具有非空结果类型,那么方法set_result
必须在DIR返回之前被精确调用一次。 如果操作具有无效结果类型,方法set_result
可以可选地被调用一次,其类型为tk_void
的Any
对象。 调用方法set_result
之前方法arguments
已被调用或方法set_result
或set_exception
已被调用将导致BAD_INV_ORDER异常。 当IDL操作包含上下文表达式时,或者当传递给参数的NVList没有描述客户端传递的所有参数时,调用方法set_result
而不先前调用方法ctx
,可能会导致MARSHAL系统异常。
any
- 一个
Any
要设置的返回值的
Any
对象
CORBA
package comments for unimplemented features
@Deprecated public void except(Any any)
any
- 包含
Any
对象
public void set_exception(Any any)
org.omg.CORBA.NO_IMPLEMENT
异常。
将给定的异常返回给客户端。 该方法由DIR调用,可以随时调用该方法。 传递给此方法的Any
对象必须包含系统异常或调用操作的IDL定义中指定的用户异常之一。 传递不包含异常的Any
对象将导致抛出BAD_PARAM系统异常。 传递未列出的用户异常将导致DIR接收到BAD_PARAM系统异常,或者在客户端中接收到UNKNOWN_EXCEPTION系统异常。
any
- 包含
Any
对象
BAD_PARAM
- 如果给定的
Any
对象不包含异常,或异常是不公开的用户异常
UNKNOWN_EXCEPTION
- 如果给定的异常是未列出的用户异常,并且DIR没有收到BAD_PARAM异常
CORBA
package comments for unimplemented features
public abstract Context ctx()
Context
参考。
调用方法ctx
方法之前arguments
被称为或方法之后ctx
, set_result
,或set_exception
被称为将导致BAD_INV_ORDER系统异常。
BAD_INV_ORDER
-如果(1)的方法
ctx
方法之前被调用
arguments
或(2)所述的方法
ctx
被称为主叫后
set_result
或
set_exception