===== Bekannte Probleme bei der Verwendung von jameica.soap mit Java 1.6 ===== Der folgende Text beschreibt ein bekanntes Problem, welches auftreten kann, wenn das Plugin "jameica.soap" auf einem System mit SUN Java 1.6 verwendet wird. Das Plugin verwendet die SOAP-Implementierung [[http://cxf.apache.org|CXF]] aus dem Apache-Projekt. Ursache des Fehler ist ein Versionskonflikt zwischen der von CXF verwendeten JAXB-Implementierung und der von SUN Java 1.6 bereits mitgelieferten Version. Das Problem ist bekannt und unter [[https://issues.apache.org/activemq/browse/SMX4-98]] beschrieben. Das Problem äussert sich durch folgende Fehlermeldung im Jameica-Log bzw. auf der Konsole: [][ERROR][de.willuhn.jameica.messaging.NamedQueue$Worker.send] consumer de.willuhn.jameica.soap.messaging.PublishServiceMessageConsumer$1 produced an error (javax.xml.ws.WebServiceException: javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException) while consuming message [Fri May 15 13:18:49 CEST 2009] web server deployed [][INFO][de.willuhn.jameica.messaging.NamedQueue$Worker.send] error while processing message javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:265) at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:201) at org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:84) at javax.xml.ws.Endpoint.publish(Endpoint.java:170) at de.willuhn.jameica.soap.messaging.PublishServiceMessageConsumer.publish(PublishServiceMessageConsumer.java:137) at de.willuhn.jameica.soap.messaging.PublishServiceMessageConsumer.access$200(PublishServiceMessageConsumer.java:29) at de.willuhn.jameica.soap.messaging.PublishServiceMessageConsumer$1.handleMessage(PublishServiceMessageConsumer.java:61) at de.willuhn.jameica.messaging.NamedQueue$Worker.send(NamedQueue.java:245) at de.willuhn.jameica.messaging.NamedQueue$Worker.run(NamedQueue.java:268) Caused by: org.apache.cxf.service.factory.ServiceConstructionException at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:307) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:345) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:513) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:396) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:181) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:163) at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:79) at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:114) at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:164) at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:334) at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:251) ... 8 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:78) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202) at javax.xml.bind.ContextFinder.find(ContextFinder.java:376) at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574) at org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContext(JAXBDataBinding.java:532) at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:287) ... 18 more Derzeit existieren folgende Lösungsmöglichkeiten für dieses Problem: ==== Update von Java und jameica.soap ==== **Empfohlene Lösung** * Aktualisieren Sie Ihre Installation von SUN Java auf die Version 1.6.0_14 (oder höher) * Aktualisieren Sie das Plugin "jameica.soap" auf eine [[http://www.willuhn.de/products/jameica/download_ext.php|aktuelle Version]] (Build-Datum ab 03.06.2009). Diese Version enthält eine aktuelle Release von Apache CXF (2.2.2 statt wie bisher 2.1.1). ==== Downgrade auf Java 1.5 ==== ==== Nutzung des Endorsed-Mechanismus von Java ==== * Öffnen Sie das Verzeichnis [jameica|hibiscus-server]/plugins/jameica.soap/lib * Erstellen Sie dort ein Unterverzeichnis mit dem Namen "endorsed" * Verschieben Sie jetzt die drei Jar-Dateien, deren Name mit "jaxb-" beginnt in dieses neue Unterverzeichnis. lib   |- endorsed   |    jaxb-api-2.1.jar   |    jaxb-impl-2.1.6.jar   |    jaxb-xjc-2.1.6.jar * Öffnen Sie nun das Shell-Script, mit dem Sie den Server starten ("jameicaserver.sh", "jameica.sh" oder "rcjameica") in einem Texteditor. - Falls jameicaserver.sh oder jameica.sh:\\ Fügen Sie zwischen "$_JCONSOLE" und "-Djava.library..." folgendes ein: -Djava.endorsed.dirs=plugins/jameica.soap/lib/endorsed - Falls rcjameica:\\ Fügen Sie hinter "-Xmx256m" folgendes ein: -Djava.endorsed.dirs=plugins/jameica.soap/lib/endorsed * Starten Sie Jameica jetzt neu. Die Webservices sollten nun deployed und unter "https://:8080/soap/" samt WSDL-Dateien aufgelistet werden. ==== Deinstallation des Plugins "jameica.soap" ==== Entfernen Sie die SOAP-Plugins, falls diese nicht benötigt werden. Löschen Sie hierzu die Verzeichnisse "jameica.soap" und "hibiscus.soap" aus dem Verzeichnis "[jameica|hibiscus-server]/plugins".