1.4emapWS


用于处理webservice的发布。

1.4.1发布的webservice查询地址

[root]/sys/emapWS/list.do

访问以上地址可以查询所有应用已发布的webservice。

1.4.2定义webservice

如果需要将一个类发布成webservice,首先需要将这个类注册到应用的spring中,然后再添加WebService标注。相关标注的说明可查阅如下文档:

http://docs.oracle.com/javaee/6/api/javax/jws/package-summary.html

目前可以使用的只有:WebService、WebMethod、WebParam这3个。

注:WebParam的header和mode暂不支持。

如果你使用的JDK低于1.7,则可以引入emapWS的发布类,里面有这3个标注。另外还有一些公共类型,这些会在后面的规范中提到。

1.4.3webservice定义规范

WebService标注只有设置在可注册到spring中的类上才有效。

默认生成的名称为“应用名_类名”,当然也可以通过WebService标注的name属性来设置名称。

如果是设置的名称,不会在前面自动添加应用名称,这样可以自行定义一些短名称。但必需保证此名称全局唯一,即不能与其他应用中的webservice名称有重复。

被WebService标注的类中,所有公共的非静态方法(不包括Object类中的方法),都会自动发布成webservice中的操作。如果有哪些方法不需要发布,则可在方法上添加WebMethod标注,将exclude属性设置为true。

1.4.4可解析模型的webservice规范

如果需要让设计器能够通过发布的webservice解析模型,那么方法的入参或出参必需符合以下规范。

1.4.4.1入参规范

入参为以下4个参数:

config:QueryConfig

param:POJO or POJO[]

setting:String

userInfo:UserInfo

根据不同的处理情况,可不定义任何参数,也可定义部分参数,没有先后顺序要求。但是,定义的参数名称和类型必须与要求的完全一致。

a.查询的配置参数

参数名称:config

参数类型:QueryConfig

是否可选:是

作用:设置查询的分页,排序等。执行时会将DaoParam中的相关数据填入这个参数。

QueryConfig的结构如下:

pageNumber:Integer,起始页,如果该属性的值为-1表示不需要分页

pageSize:Integer,每页记录数

order:String,排序配置

defaultCondition:boolean,是否需要默认条件(字典表需要判断的属性)

dicType:String,字典表的分类(字典表需要判断的属性)

b.参数对象

参数名称:param

参数类型:POJO对象或POJO数组对象

是否可选:是

作用:设置调用时所需要的参数。设计器会根据此参数解析入参模型。

POJO对象的所有成员可用的类型如下:

int,Integer,long,Long,double,Double,byte[],String,Date

除了POJO类型,还可以设置带ModelInfo标注的Map类型,如:

queryXxx1(@ModelInfo("USER_INFO") Map<String, Object> param) {

}

queryXxx2(@ModelInfo("biz:userCondition") Map<String, Object>[] param) {

}

ModelInfo标注在com.wisedu.emap.ws包下,里面的值可以直接设置数据模型的名称,如果需要使用业务模型,需要以“biz:”起始。

c.条件的配置

参数名称:setting

参数类型:String

是否可选:是

作用:设置动态的查询条件。执行时会将高级查询生成的querySetting传入这个参数。

动态的查询条件是JSON格式的字符串,具体格式参考“3.7.6”中的“提交条件的数据格式”。

d.用户信息

参数名称:userInfo

参数类型:UserInfo

是否可选:是

作用:获取调用方当前登录的用户信息、所属应用等。

可调用UserInfo.verify(boolean throwInvalid)方法验证用户信息是否有效。

注:验证方法只有在验证字符串正确,且两台服务器的时间相差在5分钟内才会返回true。

另外,还需要注意,带有用户信息参数的WS方法动作将会被判断为需要数据权限的动作。如果这个方法只是需要获取用户信息,并不需要数据权限,那需要再创建一个用户信息对象(可以继承原有的用户信息对象),并在新的用户信息对象中添加一个boolean类型的成员变量,名称为:unrequiredPermission。

1.4.4.2出参规范

结果对象可以继承AbstractResult,并根据需要添加result属性。

结果对象的结构如下:

code:int,状态码,0表示没有错误

msg:String,返回的信息,如出错信息等

logId:String,日志编号,用于查询相关日志的编号

pageNumber:int,起始页

pageSize:int,每页记录数

totalCount:int,总记录数或受影响的记录数,如果没有统计总记录数,此值可以是-1

result:POJO[] or POJO,结果数组,每行为一个POJO对象,所有成员可用的类型同前面的参数对象

注:设计器会根据result属性解析出参模型。

除了继承AbstractResult类型,还可以设置带ModelInfo标注的ModelResult类型,或其继承类型,如:

public @ModelInfo("USER_INFO") ModelResult queryXxx1(…) {

}

ModelResult类在com.wisedu.emap.ws包下。

1.4.5webservice的监听

1.4.5.1应用内切面

如果需要对应用内的webservice方法调用进行切面编程,可以实现IServiceAspect接口,并将这个实现类注册到应用的spring中。

如果是注册在父应用中,那么所有子应用都会使用这个切面。如果父应用和子应用都注册了切面,那在子应用中将使用自己的切面。

注:一个应用的spring中只能注册一个实现此接口的对象。如果注册了多个实现此接口的对象,那此应用内的切面将无法生效。

1.4.5.2对所有webservice的监控

如果需要对系统中所有的webservice方法调用进行监控,可以实现IServiceSupervisor接口,并将这个实现类注册到应用的spring中。

然后需要在配置文件emap.properties中的配置项emap.ws.supervisors中注册这个对象,注册样例如下:

emap.ws.supervisors=app1/beanId1,app2/beanId2

应用名称和bean的编号间用“/”分隔,多个监控者之间用“,”分隔,配置列表中的先后顺序即执行时的调用顺序。如果还存在应用内切面,那切面会在最后执行。

配置文件的具体位置及说明见《EMAP运行环境的配置说明》。

另外,调用参数IServiceInfo的process(Object[] args)方法,可以继续执行webservice的调用过程。

还有,如果希望自动将监控对象设置到配置中,而不需要在实施时调整配置,可以在bean的初始化方法中调用下面这段代码:

1.4.6对象成员信息的设置

要设置成员的信息,可以使用FieldInfo标注。

如果WSDL定义中的名称和成员的名称不一致,则可通过此标注的name来设置WSDL中定义的名称。

1.4.6.1字典搜索参数的获取

如果webservice服务作为字典表,那首先需要存在名称为param的参数用于接收字典的搜索条件。之后这个类需要继承AbstractDicSearchInfo,用于接收搜索条件的值。如果无法继承AbstractDicSearchInfo,那可以参考此类的定义,将需要的成员定义到你的类中。

如果只需要接收特定的参数,那也可以直接定义成参数,通过WebParam标注来指定参数名称,样例如下:

public XxxResult getXxxCode(@WebParam(name=AbstractDicSearchInfo.NAME_PREFIX + "pId") String parentId) {

}

可接收的参数说明如下:

AbstractDicSearchInfo.NAME_PREFIX + "id",根据字典中的代码值进行全等匹配
AbstractDicSearchInfo.NAME_PREFIX + "name",根据字典中的显示值进行匹配(匹配方式见 mathType)
AbstractDicSearchInfo.NAME_PREFIX + "pId",树型字典有效,对父节点代码值进行全等匹配
AbstractDicSearchInfo.NAME_PREFIX + "matchType",匹配方式
           0,根据name参数对显示值进行全等匹配
           1,根据name参数对显示值进行模糊匹配
           2,根据name参数对代码值或显示值进行模糊匹配

AbstractDicSearchInfo.NAME_PREFIX + "searchValue",格式同高级查询的数据提交格式,用于设置字典对应的表中其它列相关的查询条件

具体说明见“3.7.6”及“3.7.7”。

results matching ""

    No results matching ""