2016-11-28 6 views
0

Я запускаю свое приложение в Apache Karaf, и мы используем Apache CXF 2.7.6, JAXB api версии 2.2 и JDK составляет 1,7,0_80. И при установке нашего приложения в karaf, мы получим следующее сообщение об ошибке:javax.xml.bind.JAXBException: свойство «com.sun.xml.bind.defaultNamespaceRemap» не поддерживается

Exception in thread "SpringOsgiExtenderThread-71" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myBean': 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:1482) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:69) 
    at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:355) 
    at org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) 
    at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320) 
    at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:132) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException 
    at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:371) 
    at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:251) 
    at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:539) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1608) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1549) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479) 
    ... 14 more 
Caused by: org.apache.cxf.service.factory.ServiceConstructionException 
    at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:338) 
    at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86) 
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:446) 
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:548) 
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:265) 
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:204) 
    at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102) 
    at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:159) 
    at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:211) 
    at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:456) 
    at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:334) 
    ... 23 more 
Caused by: javax.xml.bind.JAXBException 
- with linked exception: 
[javax.xml.bind.JAXBException: property "com.sun.xml.bind.defaultNamespaceRemap" is not supported] 
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:237) 
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:396) 
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:618) 
    at org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:329) 
    at org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:327) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.apache.cxf.common.jaxb.JAXBContextCache.createContext(JAXBContextCache.java:327) 
    at org.apache.cxf.common.jaxb.JAXBContextCache.getCachedContextAndSchemas(JAXBContextCache.java:228) 
    at org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBinding.java:479) 
    at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:336) 
    ... 33 more 
Caused by: javax.xml.bind.JAXBException: property "com.sun.xml.bind.defaultNamespaceRemap" is not supported 
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:115) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:222) 
    ... 42 more 

могли бы вы, пожалуйста, дайте мне знать, что можно сделать здесь, чтобы решить эту проблему? Любая помощь в этом отношении очень ценится.

enter image description here

ответ

1

com.sun.xml.internal.bind.defaultNamespaceRemap Попробуйте вместо этого.

Возможно, вы используете JAXB RI в комплекте с JDK, а не отдельно. Этот пакет JAXB получает «переупакован» от com.sun.xml.bind до com.sun.xml.internal.bind. Вероятно, они также изменяют константу при переупаковке. Как круто.

com.sun.xml.internal.bind.api.JAXBRIContext

+0

Спасибо Lexicore для вашего комментария. Я просмотрел этот файл, который находится внутри jar в моем каталоге .m2 repo. C: \ Users \ имя пользователя \ .m2 \ репозиторий \ COM \ ВС \ XML \ связать \ JAXB-осущ \ 2,2 \ JAXB-осущ-2.2.jar. Итак, как вы можете отредактировать этот файл. Это файл класса, уже связанный и доступный в maven repo. Я не мог понять, как применить ваше предложение. Я имею в виду, что в моем исходном коде нет упоминания об этом свойстве. Это просто зависимость, которую использует мой код. Заранее благодарим за ваш ответ. – skyblue2323

+0

Вероятно, лучшим вариантом будет использование JAXB RI, который вы предоставляете. Для этого вам необходимо точно настроить, какой JAXB RI использовать. Проверьте этот ответ: http://stackoverflow.com/a/10002848/303810 – lexicore

+0

Большое спасибо @lexicore. Ваш подход к использованию каталога lib/endorsed действительно сработал. – skyblue2323

0

условии пользователю CentOS все разрешения для karaf каталога и изменен файл .bash_profile содержать JAVA_HOME и добавил karaf и Maven в PATH. Кроме того, изменения функции запуска в файле karaf-client, расположенном в директории karaf бен содержать следующее:

JAVA_ENDORSED_DIRS="${JAVA_HOME}/jre/lib/endorsed:${JAVA_HOME}/lib/endorsed:${KARAF_HOME}/lib/endorsed" 

exec "$JAVA" $JAVA_OPTS -Djava.endorsed.dirs="${JAVA_ENDORSED_DIRS}" -Djava.ext.dirs="${JAVA_EXT_DIRS}" -Dkaraf.instances="${KARAF_HOME}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.io.tmpdir="$KARAF_DATA/tmp" -Djava.util.logging.config.file="$KARAF_BASE/etc/java.util.logging.properties" $KARAF_OPTS $OPTS -classpath "$CLASSPATH" org.apache.karaf.client.Main "[email protected]" 

Важной эталонной ссылки на Lib/одобренный подход:

https://jaxb.java.net/guide/Migrating_JAXB_2_0_applications_to_JavaSE_6.html

How to specify a particular JAXB implementation?