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

来源:互联网 发布:知金教育好吗 编辑:程序博客网 时间:2024/06/11 18:50
CXF部署到WebLogic的时候,碰到一堆问题,真是困难重重啊
问题1、项目部署到WebLogic后,调用cxf生成的WebService出现以下错误
java.lang.ClassCastException: com.sun.xml.ws.client.sei.SEIStub cannot be cast to org.apache.cxf.frontend.ClientProxyat 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 failedat 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-appat 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 failedat 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 stacktracecom.bea.xml.XmlException: failed to load java type corresponding to e=weblogic-web-app@http://xmlns.oracle.com/weblogic/weblogic-web-appat 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 failedat 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-appat 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 typeat 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 stacktracejava.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 typeat 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 stacktracejava.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 typeat 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成功,调用接口成功。















0 0
原创粉丝点击