背景

某项目中间件环境部署应用时出现错误,错误日志如下:

<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启动也就是控制台启动才能生效,后台手动启动是无效的。

Trackback

no comment untill now

Add your comment now