我正在开发一个自动化框架,并且遇到了wsadmin
工具的奇怪行为。这个问题在WAS 6.1、7.0和8.0中是可重现的(我没有尝试过使用8.5)。
我想知道这是否是wsadmin中的错误(很奇怪,可能从WAS 5开始,还没有人注意到它!)...
可以在任何WAS环境中安全地执行示例脚本,而不会造成任何伤害。
try:
# this line throws WAS exception
AdminConfig.list('NonExistentType')
except:
# exception is being handled
print 'Handled wsadmin exception'
print 'Raising another exception'
# eventually the script throws a non-WAS exception
x = 1/0
如果我理解正确,则以上脚本在零分时会失败。但是
wsadmin
的输出有点令人困惑:Handled wsadmin exception
Raising another exception
WASX7017E: Exception received while running file "ex.py"; exception information: com.ibm.websphere.management.exception.InvalidConfigDataTypeException
com.ibm.websphere.management.exception.InvalidConfigDataTypeException: ADMG0007E: The configuration data type NonExistentType is not valid.
真正有趣的是,Jacl似乎有同样的问题:
if [catch { puts [$AdminConfig list NonExistentType] } result] {
puts "Handled wsadmin exception"
}
puts "Raising another exception"
set x [expr 1 / 0]
wsadmin
也不显示有关终止脚本的实际异常的任何信息:Handled wsadmin exception
Raising another exception
WASX7017E: Exception received while running file "ex.jacl"; exception information: com.ibm.websphere.management.exception.InvalidConfigDataTypeException
com.ibm.websphere.management.exception.InvalidConfigDataTypeException: ADMG0007E: The configuration data type NonExistentType is not valid.
在稍稍更改了两个脚本(以避免引发WAS异常)之后,两个脚本的输出都是正确的。
try:
# this line does not throw any exception
AdminConfig.list('Cell')
except:
# exception is being handled
print 'Handled wsadmin exception'
print 'Raising another exception'
# eventually the script throws a non-WAS exception
x = 1/0
如果脚本未引发/处理WAS异常,则输出将按预期进行:
Raising another exception
WASX7017E: Exception received while running file "ex1.py"; exception information: com.ibm.bsf.BSFException: exception from Jython:
Traceback (innermost last):
File "<string>", line 9, in ?
ZeroDivisionError: integer division or modulo
与Jacl相同:
if [catch { puts [$AdminConfig list Cell] } result] {
puts "Handled wsadmin exception"
}
puts "Raising another exception"
set x [expr 1 / 0]
wsadmin
输出以下内容,这也是很期望的:wdrCell(cells/wdrCell|cell.xml#Cell_1)
Raising another exception
WASX7017E: Exception received while running file "ex1.jacl"; exception information: com.ibm.bsf.BSFException: error while eval'ing Jacl expression:
divide by zero
while executing
"expr 1 / 0"
invoked from within
"set x [expr 1 / 0]"
我不得不坦白:我问这个问题的原因是我实际上已将问题报告给WebSphere支持。我对他们的答复并不完全满意。 Wsadmin / Jython / Jacl / Python / Tcl专家:您对此有何看法?
难道我做错了什么?
是
wsadmin
中的错误吗?它是预期的行为吗???
最佳答案
该问题将在即将推出的WSAS 6.1、7.0、8.0和8.5修订包中得到解决。
IBM支持有点担心破坏与先前实现的兼容性(这是有争议的,但是某些脚本可能依赖于此错误),因此需要使用com.ibm.ws.scripting.exceptionPropagation=thrown
JVM属性显式启用适当的行为。
我知道将属性传递给wsadmin的JVM的两种方法:javaOption
环境变量javaoption
选项
环境变量的方式:
export javaOption=-Dcom.ibm.ws.scripting.exceptionPropagation=thrown
./wsadmin.sh -lang jython -f script.py
命令行选项方式:
./wsadmin.sh -javaoption -Dcom.ibm.ws.scripting.exceptionPropagation=thrown-lang jython -f script.py
该修复程序解决了Jython和Jacl的问题。
链接到官方文件:http://www-01.ibm.com/support/docview.wss?uid=swg1PM80400
关于python - wsadmin脚本中未处理的异常后的误导性错误消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14128294/