forked from webx/citrus
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCHANGES.txt
227 lines (169 loc) · 11.2 KB
/
CHANGES.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
-- Changes in 3.0.1
* 改进FormResolver:将空白表单看作invalid,等同于验证失败,当skipIfInvalid=true时,避免执行action。
* 改进WebxFrameworkFilter:添加excludes参数,使它可以快速排除不需要处理的requestURI
<filter>
<filter-name>webx</filter-name>
<filter-class>com.alibaba.citrus.webx.servlet.WebxFrameworkFilter</filter-class>
<init-param>
<param-name>excludes</param-name>
<param-value>/otherservlet, *.jpg</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>webx</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet-mapping>
<servlet-name>other</servlet-name>
<url-pattern>/otherservlet/*</url-pattern>
</servlet-mapping>
* 改进CsrfToken,使它的生成算法可以被别的模块所覆盖。
* 改变CsrfToken.getHiddenField()的默认行为 ── 默认生成longLiveToken而不是原来的uniqueToken。
* Bugfix:当fileItem为空时,uploaded-file-validator抛NPE的问题
* Bugfix:当redirect时,不要执行action
* 改变<parser/> request context中利用getBeanByType取得upload service的方式:
由于<request-contexts>和<parser>会在BeanFactoryPostProcessor中初始化,而此时aop post processor还未被创建。
而getBeanByType可能导致某些FactoryBean抢在aop post processor之前被初始化,导致这部分的bean无法被aop拦截。
* 改进<data-resolver>服务获取parameter annotations的方式:
由于aop可能会运行时派生一个新的类,而这个类并没有包含parameter annotations,导致data resolver无法解析该参数。
改进以后,data-resolver会从super class的被覆盖方法中取得annotation。
* Bugfix:解决URIBroker.toString()然后再fork(),intercepters会被重复执行的问题。
* Bugfix:ModuleLoaderService中产生ClassCastException的问题。
* 改进:在ExceptionUtil中增加throwExceptionOrError()和throwRuntimeExceptionOrError()方法(用来解决上一个bug)。
* Bugfix: escape-support对于#define block会多重escape。
* 改进:对于noescape,返回value object,避免调用value.toString(),合后续的handler可以被正确执行。
* 改进:<set-local inputCharsetParam="" outputCharsetParam="" >支持多个参数,用|分隔,例如:"_input_charset|ie"
* 改进:LocaleUtil.isCharsetSupported(null)返回false,而不是异常
* 改进:添加configuration point: rewrite/handlers,将beans:bean的引用改成handlers:handler。
注意:这会引起xml格式的不兼容,但是这个问题可以在应用启动时立刻发现,并且很容易修改。
step1: 引入namespace: xmlns:rewrite-handlers="http://www.alibaba.com/schema/services/request-contexts/rewrite/handlers"
step2: 指定schema location: http://www.alibaba.com/schema/services/request-contexts/rewrite/handlers http://localhost:8080/schema/services-request-contexts-rewrite-handlers.xsd
step3: 将<handlers><beans:bean>改成:<handlers><rewrite-handlers:handler>
* 改进pom使项目可在默认的maven repository下build
* 改进mail service,使之在javamail 1.4.1和1.4.2下有一致的表现。
-- Changes in 3.0.2
* 改进SessionRequestContext,当attributes未改变,并且invalidate未调用时,不提交store,以免产生不必要之cookies。
注意:session store不保证对象的内部属性的改变会被保存到store中,例如,下面的代码不一定可行:
MyObject myObject = session.getAttribute("myObject");
myObject.setValue(value);
// next request of the same session
assertEquals(value, ((MyObject) session.getAttribute("myObject")).getValue()); // 可能不等
* Bugfix: 在解析query参数时,对“Justin%A1%A4Bieber”进行URL unescape时(GBK),得到乱码。
* 改进WebxComponentsContext接口,使开发者有机会继承并设置额外的参数。例如:允许bean definition重复定义。
* Bugfix: 当RequestContext未扩展子接口时,将对RequestContext创建singleton proxy,从而导致注入RequestContext接口时出错。
解决步骤:1. 避免对创建RequestContext接口本身创建singleton proxy
2. 不使用spring本身的ObjectFactory作为proxy的接口,而是创建一个新的接口:ProxyTargetFactory
* Bugfix: 在Servlet 3.0/Tomcat 7.0中,对Cookie.isHttpOnly创建FastClass时出ClassNotFoundException。解决步骤,指定正确的classLoader。
* 改进:添加ExceptionUtil.getStackTraceForHtmlComment()方法,使包含“--”的异常信息可被正确输出HTML comment中。
* 改进:(Servlet|Turbine|)ContentURIBroker.getURI("xxx?a=1&b=2#ref")支持query和ref
* 改进:URIBroker.setServerURI("xxx?a=1&b=2#ref")支持query和ref
* 改进:支持导出control context中的值到调用者。
* 临时导出:$controlTool.export("var1", "var2", ...)
* 导出全部(不推荐,默认为false):<control-tool exportAll="true" />
* 改进:支持在模板中指定layout:$rundata.setLayout(xxx)
* 改进:使error pipeline中可以取得应用context中的对象(但是不包括pull tools)。
* 删除过期的ExceptionRecoveryValve
* Bugfix: 当<input type=file>字段存在,但未上传文件时,ValueListSupport.getFileItems()不能取得正确的结果。
-- Changes in 3.0.3
* 改进: new LocaleInfo(locale, charset)时,即使charset为非法的,也不报错。把判断charset合法性的任务交给LocaleUtil.isCharsetSupported()方法。
(但在setDefault和setContext时会判断charset的合法性)
这样改进避免了setLocaleRequestContext中出现UnsupportedCharsetException异常。
* 相关改进:添加方法:LocaleInfo.isCharsetSupported(), assertCharsetSupported()。
* 改进:修改TurbineRunDataInternal接口,将get/setContextForControl的功能和push/popContext合并,简化了control中创建context的逻辑。
注意:应用不应该依赖于TurbineRunDataInternal接口,如果依赖了,并用到了修改的方法,有可能受影响。
* 改进:添加了ControlParameters接口,它可以通过参数注入到control module类中。Control通过它可以修改或取消template。
* 改进:添加了@ContextValue注解,可以通过参数直接注入Context中的值,或传递给control的参数。
* 改进:添加VisitorInvocationErrorHandler接口,使templatelite可以选择抛出visitor的异常,或者由visitor来自己处理异常。
* 改进并bugfix:让TextWriter实现VisitorInvocationError,默认显示root cause异常并记录日志,但不抛出错误。
注解:由于request attributes中存在turbine rundata proxy的引用,而在detailed error环境中不存在rundata,因此导致显示detailed error页面时出错。
然而这种错误完全是无谓的,重要的是显示应用的异常。此改进使detailed error页面不会因为visitor的失败而失败。
* 改进:简化StaticFunctionDelegatorBuilder所生成对象的toString方法,使之更易读;
* 改进:添加ExceptionUtil.getRootCause()方法。
-- Changes in 3.0.4
* bugfix: 把/index重写(rewrite)成/index.htm时,变成了/index/.htm。
* 改进:让form service和uris service支持import,这样,就可以把form.xml和uris.xml分割成多个文件,便于管理。
需要注意,由于有多个form和uris实例存在,所以需要指定primary参数,否则注入会出错。
<form id="common" />
<form primary="true">
<import form="common" />
</form>
<uris id="common" />
<uris primary="true">
<import uris="common" />
</uris>
* 改进TemplateLite工具,并将它从internal包开发到common-util中,可供外部使用。
* 新增explorer开发工具,在开发模式下,可以:
× 列出所有context中的spring beans,以帮助开发者了解schema所生成的beans结构。
× 查看resource loading服务中资源。
× 查看uri brokers。
× 查看pull tools。
* 改进:resourceLoadingService.trace()时,如果成功的话,能够取得resource对象。
* 改进:pullService,可以取得tool-set的信息,以方便explorer查看。
* 改进:允许application context中出现重复定义的bean,合并重复定义的bean definition的内容。这样做的目的是为了可以覆盖bean的默认配置。
* 改进:支持从classpath*:中查找webx子应用的配置文件。例如:
<webx-configuration>
<components componentConfigurationLocationPattern="classpath*:META-INF/mycomponent/*.xml" />
</webx-configuration>
* 改进:如果指定了-DskipValidation启动参数,则跳过schema验证,以加快启动速度。请勿在生产环境使用这个功能。
-- Changes in 3.0.5
* Bugfix: CsrfToken.getLongLiveToken在集群机器上产生不一致的结果。
* 改进:当指定-DskipValidation时,beans定义中的参数可取得正确的默认值,例如:default-autowire,default-dependency-check等。
-- Changes in 3.0.6
* 改进:让webx同时支持spring2/3。
(修改了一处代码,使resource loading机制可在spring3下运行;修改了若干单元测试,使它们在spring3下可以通过测试。)
虽然webx仍以spring 2.5.6.SEC02编译,但只需要将项目的pom.xml中的spring依赖改成3.0.6.RELEASE就可以工作。
如希望以spring3来编译webx,只需要指定参数:mvn ... -Pspring3 即可。这样编译所生成的citrus-webx-all包将依赖于spring 3。
注意:spring3和spring2的代码是不完全兼容的。在spring2上编译的代码,未必能直接在spring3上运行,反之亦然。
下面的命令确保webx同时兼容于spring的两个版本。
mvn clean install -- 在spring2中编译并测试
mvn surefire:test -Pspring3 -- 在spring3中测试但不编译
* 在开发者首页中显示webx版本、spring版本;改进取得webx版本的方法,使用META-INF/MANIFEST.MF中的信息。
* 安全改进:为dev mode下的explorer添加安全控制。默认只能从本机访问。当从非授权的主机访问时,显示友好的提示信息。支持下面的property:
-DdevelopmentMode.allowedHosts=192.168.1.*
* 改进:增加MDC: %X{productionMode},在日志中自动显示当前的生产模式或开发模式。
* 新增功能:将webx当作filter使用,filter chain的下游可以使用webx所提供的request contexts功能。配置方法如下(WEB-INF/web.xml):
<filter>
<filter-name>webx</filter-name>
<filter-class>com.alibaba.citrus.webx.servlet.WebxFrameworkFilter</filter-class>
<init-param>
<param-name>excludes</param-name>
<param-value>*.html</param-value><!-- 让servlet引擎来处理静态页面 -->
</init-param>
<init-param>
<param-name>passthru</param-name>
<param-value>/myservlet/*, *.xxx</param-value><!-- 将以上url转给servlet处理,但在servlet中可用request contexts。 -->
</init-param>
</filter>
<servlet-mapping>
<servlet-name>...</servlet-name>
<url-pattern>/myservlet/*</url-pattern>
<url-pattern>*.xxx</url-pattern>
</servlet-mapping>
* 改进:当uribroker.toString()时,不执行interceptors,确保intercepters总在render时被调用,而不会因为某些情况(如输出日志时)被调用。
解决了如下问题:原来pull service在初始化时会调用uribroker.toString(),从而调用interceptors。但此时调用interceptors可能会得到不正确的结果。
* 修改URI broker service中requestAware的默认值,原来是true,现在改为false。
* 当requestAware为true时,所生成的URL会自动加上当前request的server信息。这个在绝大多数情况下是不需要的。故修改之。
* 将原petstore示例中的页面验证组件PageAuthorizationService和PageAuthorizationValve移植到turbine中。
* 新增pull tool:<context-exposer>可将context中的bean直接暴露到pull tools中,供模板使用。
* 增加对于spring-test的支持。
* 增加测试工具:SpringextContextLoader和ServletTestContainer,使用方法参见citrus-test-webx单元测试。
* 改进:将读取action参数的任务由performAction valve移到analyzeURL valve,从而使其它的valve也能通过rundata取得action参数。例如安全检验的valve。
* 注意:很少有应用程序会去修改action参数。但如果有人这样做了,在新的实现下,代码可能会失效。
* 改进:rundata.setRedirectTarget()以后,自动清除action,避免执行action。
* 改进:JspService支持jspx后缀。
* 将util.internal.regex.*和util.internal.ToStringBuilder等内部类升级至非internal类,以方便其它应用使用。
* bugfix: ClassLoaderUtil.getResources(name)中的小问题。
* bugfix:InheritableListableBeanFactory.registerResolvableDependency()只阻止对parent context中已注册的ProxyTargetFactory对象的覆盖,
使ResourceLoader和ApplicationContext等对象的注入方式仍然和spring原来相同。
* 确保在java7下面可以编译并测试通过。
-- Changes in 3.0.7
* 删除citrus-springext-all-in-one项目。
* 修改项目的名称:
citrus-webx-all-in-one -> citrus-webx-all
citrus-test-all-in-one -> citrus-test-all
所有依赖这两个包的应用需要修改一下pom.xml。
* 改进pom.xml,以便发布到central maven repository中:
* 添加javadocs
* 修改pom参数
* 升级jexl到2.0.1,使之支持可变参数,例如:$messageUtil.formatMessage(format, args...)
-- Changes in 3.0.8