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