wsadmin脚本中未处理的异常后出现误导性错误消息

时间:2013-01-02 19:54:44

标签: python websphere jython wsadmin jacl

我正在开发一个自动化框架,我遇到了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 Support报告了这个问题。我对他们的回复并不完全满意。 Wsadmin / Jython / Jacl / Python / Tcl专家:您对此有何看法?

我做错了吗?

这是wsadmin中的错误吗?

预期的行为是什么?

1 个答案:

答案 0 :(得分:1)

问题将在即将推出的WSAS 6.1,7.0,8.0和8.5的FixPack中修复。

IBM支持部门有点担心破坏与先前实现的兼容性(嗯,这是有争议的,但有些脚本可能依赖于此错误),因此需要使用com.ibm.ws.scripting.exceptionPropagation=thrown JVM属性显式启用正确的行为。 / p>

我知道将这个属性传递给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