12月
08
背景
某项目中间件环境部署应用时出现错误,错误日志如下:
<2020-12-7 下午04时04分48秒 CST> <Error> <Management> <BEA-141244> <Schema validation errors while parsing config/config.xml - Expected elements 'staging-mode@http://xmlns.oracle.com/weblogic/domain alt-descriptor-path@http://xmlns.oracle.com/weblogic/domain alt-wls-descriptor-path@http://xmlns.oracle.com/weblogic/domain application-identifier@http://xmlns.oracle.com/weblogic/domain application-name@http://xmlns.oracle.com/weblogic/domain' instead of 'cache-in-app-directory@http://xmlns.oracle.com/weblogic/domain' here in element app-deployment@http://xmlns.oracle.com/weblogic/domain> Caused By: java.io.IOException: [Management:141245]Schema Validation Error in config/config.xml see log for details. Schema validation can be disabled by starting the server with the command line option: -Dweblogic.configuration.schemaValidationEnabled=false at weblogic.management.provider.internal.EditAccessImpl.checkErrors(EditAccessImpl.java:2340) at weblogic.management.provider.internal.RuntimeAccessDeploymentReceiverService.handleConfigTreeLoad(RuntimeAccessDeploymentReceiverService.java:968) at weblogic.management.provider.internal.RuntimeAccessDeploymentReceiverService.updateDeploymentContext(RuntimeAccessDeploymentReceiverService.java:599) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doUpdateDeploymentContextCallback(DeploymentReceiverCallbackDeliverer.java:147) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.updateDeploymentContext(DeploymentReceiverCallbackDeliverer.java:28) Truncated. see log file for complete stacktrace
排查
从日志上看是domain/config/config.xml文件导致部署失败,并根据日志提示在所有server的启动参数加入以下参数:
-Dweblogic.configuration.schemaValidationEnabled=false
添加方式是通过 console/server/Server Start界面进行添加

重启后并未解决问题,也尝试过以下方案,问题也并未解决
- 在集群内手动进行config.xml文件同步
- 删除237domain数据重新同步集群数据
根据错误日志的描述
Schema validation errors while parsing config/config.xml - Expected elements 'staging-mode@http://xmlns.oracle.com/weblogic/domain ..... instead of 'cache-in-app-directory
config.xml
是一个xml文件,weblogic会使用xsd规则文件进行验证,这个错误的意思是,cache-in-app-directory节点并未在xsd中定义,通过查看config.xml文件,确实在app-deployment下有一个cache-in-app-directory的参数

其他app-deployment并没有该参数,因此问题的根本原因就是多了该参数导致config.xml文件验证不通过,而且新部署的应用都会有该参数,怀疑是该环境打过补丁,但补丁失败了,导致一些新特性进入到环境里,那么有两个解决方案
- 修改config.xml文件,去掉cache-in-app-directory参数
- 添加-Dweblogic.configuration.schemaValidationEnabled=false参数,关闭验证
虽然修改config.xml文件能达到目的,但是新部署的应用还是会有一样的问题,治标不治本,添加参数的方式一开始也尝试过,但并未生效,未生效的原因在于
在console添加的参数必须通过nodemanager启动才会生效,但admin server是手动在后台启动的所以该参数并未生效
,从启动日志上看也验证了这一点,admin server启动参数需要在setDomainEnv.sh上进行添加
JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.configuration.schemaValidationEnabled=false" export JAVA_OPTIONS
重启后问题解决
总结
其实该问题weblogic错误日志已经提示的很清楚,只要关闭验证就行,在增加参数后未生效也未去找原因,也重温了一个重要的知识点,在console上配置的启动参数必须通过nodemanager启动也就是控制台启动才能生效,后台手动启动是无效的。
Address: https://zhengjianfeng.cn/?p=495
no comment untill now