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

2024-10-02 10:29:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个自动化框架,我经历过wsadmin工具的奇怪行为。这个问题在was6.1、7.0和8.0中是可重复的(我还没有尝试过was8.5)。在

我想知道这是否是wsadmin中的一个bug(很奇怪,还没有人注意到它,可能是从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输出有点混乱:

^{pr2}$

真正有趣的是,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 exception,则输出看起来与预期的一样:

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中的错误吗?在

是预期行为吗???在


Tags: 脚本comexceptionanotherlistprintwasexpr
1条回答
网友
1楼 · 发布于 2024-10-02 10:29:57

这个问题将在即将到来的wsas6.1、7.0、8.0和8.5的补丁包中修复。在

ibmsupport有点担心破坏与以前实现的兼容性(这是有争议的,但是有些脚本可能依赖于这个bug),因此需要使用com.ibm.ws.scripting.exceptionPropagation=thrownJVM属性显式地启用正确的行为。在

我知道有两种方法可以将此属性传递给wsadmin的JVM:

  • javaOption环境变量
  • javaoption选项

环境变量方式:

export javaOption=-Dcom.ibm.ws.scripting.exceptionPropagation=thrown
./wsadmin.sh -lang jython -f script.py

命令行选项方式:

^{pr2}$

该修复程序解决了Jython和Jacl的问题。在

官方文件链接:http://www-01.ibm.com/support/docview.wss?uid=swg1PM80400

相关问题 更多 >

    热门问题