CXF部署到WebLogic上时碰到的问题

本文详细记录了解决在部署CXF WebService到WebLogic时遇到的多个问题的过程,包括配置weblogic.xml文件以解决类转换问题、解决部署描述符解析错误、处理Spring上下文加载器冲突、解决WSL读取WSDL类路径冲突及最终解决接口调用失败的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CXF部署到WebLogic的时候,碰到一堆问题,真是困难重重啊
问题1、项目部署到WebLogic后,调用cxf生成的WebService出现以下错误
java.lang.ClassCastException: com.sun.xml.ws.client.sei.SEIStub cannot be cast to org.apache.cxf.frontend.ClientProxy
	at org.apache.cxf.frontend.ClientProxy.getClient(ClientProxy.java:93)

解决方法:在项目的WEB-INF目录下,增加weblogic.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.2/weblogic-web-app.xsd">
	<container-descriptor>
		<prefer-application-packages>
			<package-name>org.apache.commons.lang.*</package-name>
			<package-name>antlr.*</package-name>
			<package-name>javax.persistence.*</package-name>
			<package-name>org.hibernate.*</package-name>
			<package-name>org.apache.xerces.*</package-name>
		</prefer-application-packages>
	</container-descriptor>
</weblogic-web-app>

问题2、上述问题1中的解决方法,在Windows系统下的Weblogic里没有问题,但是在Linux系统下的Weblogic(版本:WebLogic Server 10.3.0.0)里部署,就出现以下新的错误。
<2016-3-9 上午10时30分39秒 CST> <Error> <J2EE> <BEA-160197> <Unable to load descriptor /opt/bea/user_projects/domains/domain7006/MYPRG/WEB-INF/weblogic.xml of module MYPRG. The error is weblogic.descriptor.DescriptorException: Unmarshaller failed
	at weblogic.descriptor.internal.MarshallerFactory$1.createDescriptor(MarshallerFactory.java:152)
	at weblogic.descriptor.BasicDescriptorManager.createDescriptor(BasicDescriptorManager.java:306)
	at weblogic.application.descriptor.AbstractDescriptorLoader2.getDescriptorBeanFromReader(AbstractDescriptorLoader2.java:788)
	at weblogic.application.descriptor.AbstractDescriptorLoader2.createDescriptorBean(AbstractDescriptorLoader2.java:409)
	at weblogic.application.descriptor.AbstractDescriptorLoader2.loadDescriptorBeanWithoutPlan(AbstractDescriptorLoader2.java:759)
	at weblogic.application.descriptor.AbstractDescriptorLoader2.loadDescriptorBean(AbstractDescriptorLoader2.java:768)
	at weblogic.servlet.internal.WebAppDescriptor.getWeblogicWebAppBean(WebAppDescriptor.java:170)
	at weblogic.servlet.internal.WebAppModule.loadDescriptor(WebAppModule.java:1194)
	at weblogic.servlet.internal.WebAppModule.prepare(WebAppModule.java:350)
	at weblogic.application.internal.flow.ScopedModuleDriver.prepare(ScopedModuleDriver.java:176)
	at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:93)
	at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:387)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37)
	at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:58)
	at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:42)
	at weblogic.application.internal.BaseDeployment$1.next(BaseDeployment.java:615)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37)
	at weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:191)
	at weblogic.application.internal.SingleModuleDeployment.prepare(SingleModuleDeployment.java:16)
	at weblogic.application.internal.DeploymentStateChecker.prepare(DeploymentStateChecker.java:155)
	at weblogic.deploy.internal.targetserver.AppContainerInvoker.prepare(AppContainerInvoker.java:60)
	at weblogic.deploy.internal.targetserver.AppDeployment.prepare(AppDeployment.java:141)
	at weblogic.management.deploy.internal.DeploymentAdapter$1.doPrepare(DeploymentAdapter.java:39)
	at weblogic.management.deploy.internal.DeploymentAdapter.prepare(DeploymentAdapter.java:187)
	at weblogic.management.deploy.internal.AppTransition$1.transitionApp(AppTransition.java:21)
	at weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments.java:233)
	at weblogic.management.deploy.internal.ConfiguredDeployments.prepare(ConfiguredDeployments.java:165)
	at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:122)
	at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:173)
	at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:89)
	at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
Caused by: com.bea.xml.XmlException: failed to load java type corresponding to e=weblogic-web-app@http://xmlns.oracle.com/weblogic/weblogic-web-app
	at com.bea.staxb.runtime.internal.UnmarshalResult.getPojoBindingType(UnmarshalResult.java:361)
	at com.bea.staxb.runtime.internal.UnmarshalResult.determineTypeForGlobalElement(UnmarshalResult.java:316)
	at com.bea.staxb.runtime.internal.UnmarshalResult.determineTypeForGlobalElement(UnmarshalResult.java:326)
	at com.bea.staxb.runtime.internal.UnmarshalResult.determineRootType(UnmarshalResult.java:307)
	at com.bea.staxb.runtime.internal.UnmarshalResult.unmarshalDocument(UnmarshalResult.java:158)
	at com.bea.staxb.runtime.internal.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:65)
	at weblogic.descriptor.internal.MarshallerFactory$1.createDescriptor(MarshallerFactory.java:141)
	... 32 more
.> 
<2016-3-9 上午10时30分39秒 CST> <Error> <HTTP> <BEA-101064> <[WebAppModule(MYPRG:MYPRG)] Error parsing descriptor in Web appplication "/opt/bea/user_projects/domains/domain7006/MYPRG"
weblogic.application.ModuleException: Unmarshaller failed
	at weblogic.servlet.internal.WebAppModule.loadDescriptor(WebAppModule.java:1201)
	at weblogic.servlet.internal.WebAppModule.prepare(WebAppModule.java:350)
	at weblogic.application.internal.flow.ScopedModuleDriver.prepare(ScopedModuleDriver.java:176)
	at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:93)
	at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:387)
	Truncated. see log file for complete stacktrace
com.bea.xml.XmlException: failed to load java type corresponding to e=weblogic-web-app@http://xmlns.oracle.com/weblogic/weblogic-web-app
	at com.bea.staxb.runtime.internal.UnmarshalResult.getPojoBindingType(UnmarshalResult.java:361)
	at com.bea.staxb.runtime.internal.UnmarshalResult.determineTypeForGlobalElement(UnmarshalResult.java:316)
	at com.bea.staxb.runtime.internal.UnmarshalResult.determineTypeForGlobalElement(UnmarshalResult.java:326)
	at com.bea.staxb.runtime.internal.UnmarshalResult.determineRootType(UnmarshalResult.java:307)
	at com.bea.staxb.runtime.internal.UnmarshalResult.unmarshalDocument(UnmarshalResult.java:158)
	Truncated. see log file for complete stacktrace
> 
<2016-3-9 上午10时30分39秒 CST> <Error> <Deployer> <BEA-149205> <Failed to initialize the application 'MYPRG' due to error weblogic.application.ModuleException: [HTTP:101064][WebAppModule(MYPRG:MYPRG)] Error parsing descriptor in Web appplication "/opt/bea/user_projects/domains/domain7006/MYPRG"
weblogic.application.ModuleException: Unmarshaller failed
	at weblogic.servlet.internal.WebAppModule.loadDescriptor(WebAppModule.java:1201)
	at weblogic.servlet.internal.WebAppModule.prepare(WebAppModule.java:350)
	at weblogic.application.internal.flow.ScopedModuleDriver.prepare(ScopedModuleDriver.java:176)
	at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:93)
	at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:387)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37)
	at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:58)
	at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:42)
	at weblogic.application.internal.BaseDeployment$1.next(BaseDeployment.java:615)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37)
	at weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:191)
	at weblogic.application.internal.SingleModuleDeployment.prepare(SingleModuleDeployment.java:16)
	at weblogic.application.internal.DeploymentStateChecker.prepare(DeploymentStateChecker.java:155)
	at weblogic.deploy.internal.targetserver.AppContainerInvoker.prepare(AppContainerInvoker.java:60)
	at weblogic.deploy.internal.targetserver.AppDeployment.prepare(AppDeployment.java:141)
	at weblogic.management.deploy.internal.DeploymentAdapter$1.doPrepare(DeploymentAdapter.java:39)
	at weblogic.management.deploy.internal.DeploymentAdapter.prepare(DeploymentAdapter.java:187)
	at weblogic.management.deploy.internal.AppTransition$1.transitionApp(AppTransition.java:21)
	at weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments.java:233)
	at weblogic.management.deploy.internal.ConfiguredDeployments.prepare(ConfiguredDeployments.java:165)
	at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:122)
	at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:173)
	at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:89)
	at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
Caused by: com.bea.xml.XmlException: failed to load java type corresponding to e=weblogic-web-app@http://xmlns.oracle.com/weblogic/weblogic-web-app
	at com.bea.staxb.runtime.internal.UnmarshalResult.getPojoBindingType(UnmarshalResult.java:361)
	at com.bea.staxb.runtime.internal.UnmarshalResult.determineTypeForGlobalElement(UnmarshalResult.java:316)
	at com.bea.staxb.runtime.internal.UnmarshalResult.determineTypeForGlobalElement(UnmarshalResult.java:326)
	at com.bea.staxb.runtime.internal.UnmarshalResult.determineRootType(UnmarshalResult.java:307)
	at com.bea.staxb.runtime.internal.UnmarshalResult.unmarshalDocument(UnmarshalResult.java:158)
	at com.bea.staxb.runtime.internal.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:65)
	at weblogic.descriptor.internal.MarshallerFactory$1.createDescriptor(MarshallerFactory.java:141)
	at weblogic.descriptor.BasicDescriptorManager.createDescriptor(BasicDescriptorManager.java:306)
	at weblogic.application.descriptor.AbstractDescriptorLoader2.getDescriptorBeanFromReader(AbstractDescriptorLoader2.java:788)
	at weblogic.application.descriptor.AbstractDescriptorLoader2.createDescriptorBean(AbstractDescriptorLoader2.java:409)
	at weblogic.application.descriptor.AbstractDescriptorLoader2.loadDescriptorBeanWithoutPlan(AbstractDescriptorLoader2.java:759)
	at weblogic.application.descriptor.AbstractDescriptorLoader2.loadDescriptorBean(AbstractDescriptorLoader2.java:768)
	at weblogic.servlet.internal.WebAppDescriptor.getWeblogicWebAppBean(WebAppDescriptor.java:170)
	at weblogic.servlet.internal.WebAppModule.loadDescriptor(WebAppModule.java:1194)
	... 25 more

解决方法:修改weblogic.xml文件为以下形式:
<?xml version="1.0" encoding="UTF-8"?>  
<weblogic-web-app  
	xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
						http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">  
     <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>  
</weblogic-web-app>  

问题3、上述问题2中的解决方法,启动weblogic时候,又出现以下新的错误。
<2016-3-9 下午01时30分33秒 CST> <Warning> <HTTP> <BEA-101162> <User defined listener org.springframework.web.context.ContextLoaderListener failed: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from file [/opt/bea/user_projects/domains/domain7006/MYPRG/WEB-INF/classes/applicationContext-cxf.xml]; nested exception is java.lang.LinkageError: loader constraint violation: when resolving field "DATETIME" the class loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) of the referring class, javax/xml/datatype/DatatypeConstants, and the class loader (instance of <bootloader>) for the field's resolved type, javax/xml/namespace/QName, have different Class objects for that type.
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from file [/opt/bea/user_projects/domains/domain7006/MYPRG/WEB-INF/classes/applicationContext-cxf.xml]; nested exception is java.lang.LinkageError: loader constraint violation: when resolving field "DATETIME" the class loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) of the referring class, javax/xml/datatype/DatatypeConstants, and the class loader (instance of <bootloader>) for the field's resolved type, javax/xml/namespace/QName, have different Class objects for that type
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:420)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
	Truncated. see log file for complete stacktrace
java.lang.LinkageError: loader constraint violation: when resolving field "DATETIME" the class loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) of the referring class, javax/xml/datatype/DatatypeConstants, and the class loader (instance of <bootloader>) for the field's resolved type, javax/xml/namespace/QName, have different Class objects for that type
	at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl.<clinit>(RuntimeBuiltinLeafInfoImpl.java:224)
	at com.sun.xml.bind.v2.model.impl.RuntimeTypeInfoSetImpl.<init>(RuntimeTypeInfoSetImpl.java:61)
	at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createTypeInfoSet(RuntimeModelBuilder.java:127)
	at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createTypeInfoSet(RuntimeModelBuilder.java:79)
	at com.sun.xml.bind.v2.model.impl.ModelBuilder.<init>(ModelBuilder.java:152)
	Truncated. see log file for complete stacktrace
> 
<2016-3-9 下午01时30分33秒 CST> <Error> <Deployer> <BEA-149231> <Unable to set the activation state to true for the application 'MYPRG'.
weblogic.application.ModuleException: 
	at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1373)
	at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:468)
	at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:204)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37)
	at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:60)
	Truncated. see log file for complete stacktrace
java.lang.LinkageError: loader constraint violation: when resolving field "DATETIME" the class loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) of the referring class, javax/xml/datatype/DatatypeConstants, and the class loader (instance of <bootloader>) for the field's resolved type, javax/xml/namespace/QName, have different Class objects for that type
	at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl.<clinit>(RuntimeBuiltinLeafInfoImpl.java:224)
	at com.sun.xml.bind.v2.model.impl.RuntimeTypeInfoSetImpl.<init>(RuntimeTypeInfoSetImpl.java:61)
	at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createTypeInfoSet(RuntimeModelBuilder.java:127)
	at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createTypeInfoSet(RuntimeModelBuilder.java:79)
	at com.sun.xml.bind.v2.model.impl.ModelBuilder.<init>(ModelBuilder.java:152)
	Truncated. see log file for complete stacktrace

解决方法:这个是因为包冲突的问题。查看环境中是否有rt.jar、 jaxrpc.jar、 xmlbeans-qname.jar几个jar文件。查看结果:
a、weblogic的自带的jar文件,没找到相关文件
b、rt.jar在jdk里有
c、jaxrpc.jar我的项目MYPRG里的包里有
d、xmlbeans-qname.jar没找到

冲突就删除一个,删除jdk里的rt.jar,则启动不了weblogic,出现以下异常:
java/lang/NoClassDefFoundError: java/lang/Object

删除我的项目MYPRG里的jaxrpc.jar、启动weblogic成功
(jaxrpc.jar:是eclipse自动生成.net作的webservic代码,在编译需要调用的jar包,还好项目不用受影响的这个class)

问题4、上述问题3中的解决方法,虽然启动weblogic终于成功了,但是在调用webservice的时候,出现以下错误:
java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition;
	at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:237)
	at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:186)
	at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:91)
	at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:203)
	at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:147)
	Truncated. see log file for complete stacktrace
解决方法:这又是一个包冲突的问题,原因是你的容器中有多个wsdl4j*.jar包,发现我的项目里有wsdl4j.jar.和wsdl4j-1.6.2.jar两个包,我删除wsdl4j.jar,只保留wsdl4j-1.6.2.jar

再次启动weblogic,阿弥陀佛,终于启动weblogic成功,调用接口成功。















评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值