websphere8.5部署war包,项目中带有cxf-webservice,解决冲突问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/su1573/article/details/84248172

1.后台报错信息

[18-11-16 15:00:19:561 CST] 000000b7 webapp        E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet 閿欒]-[SpringMVC]: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'businessReceiveServices': Invocation of init method failed; nested exception is javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
	at org.springfra
	...
	Caused by: javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException
	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:323)
	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:234)
	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:466)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
	at java.lang.reflect.Method.invoke(Method.java:508)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1681)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1620)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
	... 128 more
Caused by: org.apache.cxf.service.factory.ServiceConstructionException
	at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:411)
	at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:467)
	at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:615)
	at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:530)
	at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:278)
	at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:179)
	at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:99)
	at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:105)
	at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:175)
	at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:395)
	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:302)
	... 137 more
Caused by: javax.xml.bind.JAXBException
 - with linked exception:
[java.lang.reflect.InvocationTargetException]
	at org.apache.cxf.jaxb.JAXBUtils.createRIContext(JAXBUtils.java:562)
	at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:408)
	... 147 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
	at java.lang.reflect.Method.invoke(Method.java:508)
	at org.apache.cxf.jaxb.JAXBUtils.createRIContext(JAXBUtils.java:560)
	... 148 more
Caused by: java.lang.ClassCastException: com.sinosoft.controller.business.intefacemanagement.MapConvertor$MapEntry$JaxbAccessorM_getKey_setKey_java_lang_String incompatible with com.sun.xml.internal.bind.v2.runtime.reflect.Accessor
	at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.instanciate(OptimizedAccessorFactory.java:202)
	at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:141)
	at com.sun.xml.internal.bind.v2.runtime.reflect.Accessor$GetterSetterReflection.optimize(Accessor.java:400)
	at com.sun.xml.internal.bind.v2.runtime.property.SingleElementLeafProperty.<init>(SingleElementLeafProperty.java:89)

2.解决问题

问题分析:

JAXB API是java EE 的API,而在websphere没有这个,因此需要通过共享库在引入。

1、引入jar包:

需要导入下面四个Jar包:

javax.activation-1.2.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar

jaxb-api-2.3.0.jar
http://search.maven.org/remotecontent?filepath=javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar

jaxb-core-2.3.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-core/2.3.0/jaxb-core-2.3.0.jar

jaxb-impl-2.3.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-impl/2.3.0/jaxb-impl-2.3.0.jar

把以上下载的jar包放到websphere安装目录下,新建一个文件夹shareJar,创建共享库指定这个文件夹;

2、修改cxf-servlet.xml

在其中需要添加

  <import resource="classpath:META-INF/cxf/cxf.xml" />
  <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
  <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

完整文档为:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    					   http://www.springframework.org/schema/beans/spring-beans.xsd
    					   http://cxf.apache.org/jaxws
    					   http://cxf.apache.org/schemas/jaxws.xsd">
  <import resource="classpath:META-INF/cxf/cxf.xml" />
  <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
  <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
  
  <jaxws:server id="businessReceiveServices" serviceClass="com.su.controller.business.intefacemanagement.BusinessReceiveServices" address="/businessReceiveServices">
    <jaxws:serviceBean>
        <bean class="com.su.controller.business.intefacemanagement.BusinessReceiveServicesImpl"/>
    </jaxws:serviceBean>
  </jaxws:server>
	<jaxws:server id="OpCustIfTechnologyFeedback" serviceClass="com.su.service.business.custodianinterface.ws.services.OpCustIfTechnologyFeedbackServices" address="/opCustIfTechnologyFeedback">
		<jaxws:serviceBean>
			<bean class="com.su.service.business.custodianinterface.ws.services.OpCustIfTechnologyFeedbackImpl" />
		</jaxws:serviceBean>
	</jaxws:server>
</beans>

2、替换低版本cxfjar包

        原项目中使用的是cxf2.5.2.jar,会报一些error create bean Name 'cxf’诸如此类的错误信息,因此降低cxf版本即可,项目中引入cxf-2.2.9.jar后,再启动无此错误。

下载链接:https://download.csdn.net/download/su1573/10796810


创建共享库:

1.选择环境->共享库,选择作用域
在这里插入图片描述

2.点击新建,填入名称,类路径填上新建的shareJar名称
在这里插入图片描述
3.点击应用,之后点击保存到主配置。


引入共享库:

1.选择应用程序->应用程序类型->WebSphere 企业应用程序,点击项目名
在这里插入图片描述

2.点击“共享库引用”
在这里插入图片描述
3.勾选上面的应用程序,点击“引入共享库”
在这里插入图片描述
4.在可用项中选择需要的共享库添加
在这里插入图片描述

5.确定,保存到主配置。
6.然后启动,进入系统,以上问题即可解决


author:su1573

猜你喜欢

转载自blog.csdn.net/su1573/article/details/84248172