论坛首页 Java企业应用论坛

自己动手写淘宝开放平台:Rop(将WebService REST进行到底!!)

浏览 99907 次
该帖已经被评为精华帖
作者 正文
   发表时间:2012-05-25   最后修改:2012-05-25
如何指定Rop配置文件

Rop框架默认配置文件位于 :

/WEB-INF/<ropServletName>.properties


可以通过RopServlet的ropConfigLocation初始化参数手工指定配置文件的地址,如下所示:
    
<servlet>
        <servlet-name>rop</servlet-name>
        <servlet-class>
            com.rop.RopServlet
        </servlet-class>

        <!-- 如果不配置,默认为/WEB-INF/rop.properties -->
        <init-param>
            <param-name>ropConfigLocation</param-name>
            <param-value>/WEB-INF/sampleRop.properties</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>rop</servlet-name>
        <url-pattern>/router</url-pattern>
    </servlet-mapping>

这里,指定的Rop配置文件的地址为:
/WEB-INF/sampleRop.properties

地址支持Spring的资源表达式前缀,如
classpath:sampleRop.properties


Rop配置文件内容

Rop配置文件配置内容包括三部分,分别是自定义组件、应用错误码国际化资源、框架其它属性,下面分别说明。

Rop自定义组件

Rop框架允许定义多个组件,包括:
  1.会话检查组件:com.rop.SessionChecker
  2.服务安全检查组件:com.rop.SecurityManager
  3.应用密钥管理组件:com.rop.AppSecretManager
  4.拦截器组件:com.rop.Interceptor

Rop采用如下顺序加载组件实例:
引用

     1.首先查看Rop配置文件是否指定的组件实现类,如果配置文件没有指定,到下一步;
     2.按组件类型匹配的方式,查找Spring容器是否有对应的组件Bean,如果有,装配之,否则到一步;
     3.使用组件的默认实现,一般情况下,默认实现只是为了让Rop顺利跑起来,不太具体实际应用的功能。如com.rop.SessionChecker组件的默认实现为com.rop.validation.DefaultSessionChecker,接口方法直接返回为true,这相当于没有进行会话校验,因此开发者应当指定自定义的SessionChecker实现者。


以下是通过Rop配置文件指定自定义组件的配置片断:
##配置组件实现类
#########################################################################
##会话检查组件,默认为com.rop.validation.DefaultSessionChecker,即不对会话进行检查
sessionCheckerClassName=com.rop.sample.SampleSessionChecker

##安全校验组件,默认为com.rop.impl.DefaultSecurityManager,即不进行安全控制
securityManagerClassName=com.rop.sample.SampleSecurityManager

##应用密钥管理组件,默认为com.rop.validation.FileBaseAppSecretManager,
#即通过类路径下的rop.appSecret.properties属性文件管理appKey/secret对
appSecretManagerClassName=com.rop.sample.SampleAppSecretManager

#########################################################################

#拦截器名称,指定拦截器的类名,多个使用逗号分隔
interceptorClassNames=com.rop.sample.MyInterceptor


拦截器是可选的,可以不配置,也可以配置多个。

应用的错误码国际化资源

如请求数据校验,会话不正确,appKey不正确等错误消息,Rop框架会自动产生并进行国际化翻译,这些统一的错误码国际化资源文件随Rop框架的JAR一并发布,国际化资源位于类路径:
i18n/rop/error


除了这些统一的错误码之外,每个应用的开发框架都会有自己业务相关的错误码,如用户登录时,用户不存在,删除一条不能删除的记录等。这些业务错误码的国际化资源必须用户自己在应用中提供。

Rop默认假设您的业务相关的错误码国际化资源为:
ii18n/rop/ropError


你可以通过Rop配置文件手工显式指定业务错误码的国际化资源,如下所示:

##应用错误国际化信息(相对于类路径)
errorResourceBaseName=i18n/rop/sampleRopError


框架其它属性

目前Rop仅有一个其它的属性,即needCheckSign,该属性控制服务端是否要对请求的数据进行签名校验,默认为true。你可以将其设置为false,关闭服务端的请求数据签名校验,如下所示:

##是否有请求的签名进行校验,默认为true
needCheckSign=false

0 请登录后投票
   发表时间:2012-05-29  
问大家一个问题,
1.如何在rop框架指定客户端调用服务方法的超时时间设置呢?,如果是cxf指定connectionTimeout熟悉就可以了。
2.调用服务方法超时了rop又该如何处理呢?
0 请登录后投票
   发表时间:2012-05-29  
kelloKitty 写道
问大家一个问题,
1.如何在rop框架指定客户端调用服务方法的超时时间设置呢?,如果是cxf指定connectionTimeout熟悉就可以了。
2.调用服务方法超时了rop又该如何处理呢?


请到http://rop.group.iteye.com/中讨论,这儿不讨论,谢谢!
0 请登录后投票
   发表时间:2012-06-04  
注释写的不从.代码看的很舒服
0 请登录后投票
   发表时间:2012-06-04  
luyuwww 写道
注释写的不从.代码看的很舒服


谢谢,最近正在对Rop进行重大重构和升级,敬请等待。
0 请登录后投票
   发表时间:2012-06-04  
看不懂。。。。。。。。额啊
0 请登录后投票
   发表时间:2012-06-10  
shenjc2008 写道
总是报这个警告:warning no match for this type name: within [Xlint:invalidAbsoluteTypeName]

2012-03-08 20:18:47,140  INFO [main] (AbstractHandlerMethodMapping.java:188) - Mapped "{[/sol],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public void com.rop.impl.AnnotationRopServiceRouter.test()
2012-03-08 20:18:47,141  INFO [main] (AbstractHandlerMethodMapping.java:188) - Mapped "{[/router],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public void com.rop.impl.AnnotationRopServiceRouter.service(org.springframework.web.context.request.WebRequest,javax.servlet.http.HttpServletResponse)

而且里面的没有一个值,不知道怎么回事

访问接口总是显示:

-<error solution="服务目前无法使用" message="服务不可用" code="1"> -<subErrors> -<subError> <code>isv.sample-user-add-service-unavailable</code> <message>调用后端服务sample.user.add抛异常,服务不可用</message> </subError> </subErrors> </error>



如果直接用URL应该需要下面类似的地址:
http://localhost:8080/rop-sample/router?method=user.add&v=2.0&appKey=00001&sessionId=mockSessionId1&sign=A046C3ADA49BD1324A2B1D9FCB5C7BC5DD3C6BABA7FC6
0 请登录后投票
   发表时间:2012-06-12  
这个是CXF有什么区别吗,能够支持异步吗
0 请登录后投票
   发表时间:2012-06-12  
eyeruby 写道
这个是CXF有什么区别吗,能够支持异步吗


看来大家对rop认识的还不够,lz可以普及一下这个框架和其他框架的异同点,另外rop最近还有更新的计划吗?

我可是rop的忠实fans,一直都在关注的哦,也希望从中学习spring的一些精髓。大家共勉,最后谢谢stamen的无私奉献精髓。
0 请登录后投票
   发表时间:2012-06-12  
kelloKitty 写道
eyeruby 写道
这个是CXF有什么区别吗,能够支持异步吗


看来大家对rop认识的还不够,lz可以普及一下这个框架和其他框架的异同点,另外rop最近还有更新的计划吗?

我可是rop的忠实fans,一直都在关注的哦,也希望从中学习spring的一些精髓。大家共勉,最后谢谢stamen的无私奉献精髓。


我最近一直在改Rop 新增了很多亮点功能:) 下午就把它提交上去。
另 最近我会出一个Rop的文档,希望大家支持!
请感兴趣的加入:http://rop.group.iteye.com/
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics