我正在开发一个自动化框架,并且遇到了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/

10-10 09:23