Moxy error with Karaf

I use MOXy under an ESB fuse (based on karaf), I converted org.eclipse.persistence.jar to a package, I deployed this package under an ESB fuse, and I got this error

 Error : "org.apache.cxf.interceptor.Fault: property "eclipselink-oxm-xml" is not supported" 

When I try to create a new instance of JAXBContext my code tries to convert the Java model to XML, and the model is deployed in a separate kit under the ESB fuse, and I added the jaxb.properties file to the same model package

Note. The same code successfully works without problems when running from the main method in the main class.

Below is my code, and the error occurs on line line number 6 .

  Map<String, Source> metadataSourceMap = new HashMap<String, Source>(); InputStream is = getClass().getClassLoader().getResourceAsStream ("com/syngenta/mint/security/service/transformation/User.xml"); metadataSourceMap.put("com.syngenta.mint.security.model",new StreamSource(is)); 1. Map<String, Object> properties = new HashMap<String, Object>(); 2. properties.put(JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY, metadataSourceMap); 3. properties.put("javax.xml.bind.context.factory", "org.eclipse.persistence.jaxb.JAXBContextFactory"); 4. Class[] classes = new Class[1]; 5. classes[0] = User.class; 6. JAXBContext jc = JAXBContext.newInstance(classes, properties); 

Any idea?

Update

Stack trace:

 org.apache.cxf.interceptor.Fault: property "eclipselink.oxm.metadata-source" is not supported at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:155)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:121)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:167)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:94)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:123)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:344)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:310)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:72)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:943)[72:org.eclipse.jetty.server:7.5.4.v20111024] at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:879)[72:org.eclipse.jetty.server:7.5.4.v20111024] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)[72:org.eclipse.jetty.server:7.5.4.v20111024] at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)[72:org.eclipse.jetty.server:7.5.4.v20111024] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)[72:org.eclipse.jetty.server:7.5.4.v20111024] at org.eclipse.jetty.server.Server.handle(Server.java:349)[72:org.eclipse.jetty.server:7.5.4.v20111024] at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441)[72:org.eclipse.jetty.server:7.5.4.v20111024] at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:919)[72:org.eclipse.jetty.server:7.5.4.v20111024] at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:582)[73:org.eclipse.jetty.http:7.5.4.v20111024] at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218)[73:org.eclipse.jetty.http:7.5.4.v20111024] at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51)[72:org.eclipse.jetty.server:7.5.4.v20111024] at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586)[68:org.eclipse.jetty.io:7.5.4.v20111024] at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44)[68:org.eclipse.jetty.io:7.5.4.v20111024] at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)[76:org.eclipse.jetty.util:7.5.4.v20111024] at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)[76:org.eclipse.jetty.util:7.5.4.v20111024] at java.lang.Thread.run(Thread.java:619)[:1.6.0_12] Caused by: javax.xml.bind.JAXBException: property "eclipselink.oxm.metadata-source" is not supported at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:118) at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:202) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.6.0_12] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0_12] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_12] at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_12] at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:143)[:2.0.0.fuse-70-084] at javax.xml.bind.ContextFinder.find(ContextFinder.java:269)[:2.0.0.fuse-70-084] at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:412)[:2.0.0.fuse-70-084] at com.syngenta.transport1.security.transformation.Transformer.fromJavaToXML(Transformer.java:72)[311:com.syngenta.transport1.security.transformation:1.0.0.SNAPSHOT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.6.0_12] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0_12] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_12] at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_12] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) at org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:58) at org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:62) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:56) at org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:39) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.osgi.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:59) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.Cglib2AopProxy$FixedChainStaticTargetInterceptor.intercept(Cglib2AopProxy.java:572) at com.syngenta.transport1.security.transformation.Transformer$$EnhancerByCGLIB$$1aed98eb.fromJavaToXML(<generated>) at com.syngenta.transport1.security.restservice.UserRestService.handleGetUserRequest(UserRestService.java:53)[310:com.syngenta.transport1.security.restservice:1.0.0.SNAPSHOT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.6.0_12] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0_12] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_12] at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_12] at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)[131:org.apache.cxf.bundle:2.5.0.fuse-70-084] ... 25 more 
+4
source share
2 answers

the problem was resolved by replacing this piece of code

 Map<String, Source> metadataSourceMap = new HashMap<String, Source>(); InputStream is = getClass().getClassLoader().getResourceAsStream("com/syngenta/mint/security/service/transformation/User.xml"); metadataSourceMap.put("com.syngenta.mint.security.model",new StreamSource(is)); Map<String, Object> properties = new HashMap<String, Object>(); properties.put(JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY,metadataSourceMap); properties.put("javax.xml.bind.context.factory","org.eclipse.persistence.jaxb.JAXBContextFactory"); 

WITH

 InputStream is = getClass().getClassLoader().getResourceAsStream("com/syngenta/mint/security/service/transformation/User.xml"); Map<String, Object> properties = new HashMap<String, Object>(); properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, is); 
+1
source

Instead of converting eclipselink.jar to a package, you can download our ready-made OSGi packages from the following location:

EclipseLink 2.4.1 Bundles

For EclipseLink JAXB (MOXy) you will need the following packages:

  • org.eclipse.persistence.moxy_2.4.1.v20121003-ad44345.jar
  • org.eclipse.persistence.core_2.4.1.v20121003-ad44345.jar
  • org.eclipse.persistence.asm_3.3.1.v201206041142.jar

If you use MOXy JSON binding (see http://blog.bdoughan.com/2011/08/json-binding-with-eclipselink-moxy.html ), you will also need the following package:

  • org.eclipse.persistence.antlr_3.2.0.v201206041011.jar

UPDATE # 1

In an OSGi environment, you need to make sure that you import the MOXy package or the org.eclipse.persistence.jaxb packages.

another question in my code above on line 2, I found that JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY is deprecated in eclipse that you mentioned in your answer, are there any replace it?

We introduced new classes to simplify property searches on JAXBContext , Marshaller and Unmarshaller . These classes are called JAXBContextProperties , MarshallerProperties and UnmarshallerProperties and can be found in the org.eclipse.persistence.jaxb package.

  • Next: JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY
  • Replaced by: JAXBContextProperties.OXM_METADATA_SOURCE

UPDATE # 2

I have not used Karaf, but below is an example of OSGi that I can run in Eclipse Equinox:

Example /Activator.java

I believe you need to create a JAXBContext using the context path. This allows you to pass a ClassLoader . This classloader should be aware of the EclipseLink JAXB (MOXy) implementation. I also included an example specifying an external MOXy mapping document.

 package example; import java.util.*; import javax.xml.bind.*; import org.eclipse.persistence.jaxb.JAXBContextProperties; import org.osgi.framework.*; public class Activator implements BundleActivator { private static BundleContext context; static BundleContext getContext() { return context; } public void start(BundleContext bundleContext) throws Exception { Activator.context = bundleContext; Map<String, Object> properties = new HashMap<String, Object>(1); properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "example/oxm.xml"); JAXBContext jc = JAXBContext.newInstance("example", Customer.class.getClassLoader(), properties); Customer customer = new Customer(); customer.setName("Jane Doe"); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(customer, System.out); } public void stop(BundleContext bundleContext) throws Exception { Activator.context = null; } } 

Example /jaxb.index

When creating a JAXBContext in a context path, you need to include a file named jaxb.index in the context path in which the carriage returns a separate list of short class names.

 Customer 

Example /jaxb.properties

To specify MOXy as the JAXB provider, you need to include a file named jaxb.properties in the same package as your domain model, with the following entry:

 javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 

Example /oxm.xml

The following is an example of a MOXy mapping document.

 <?xml version="1.0" encoding="UTF-8"?> <xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" package-name="example"> <java-types> <java-type name="Customer"> <xml-root-element/> <java-attributes> <xml-element java-attribute="name" xml-path="personal-info/name/text()"/> </java-attributes> </java-type> </java-types> </xml-bindings> 

META-INF / MANIFEST.MF

The following is an example manifest. In this example, I used package import:

 Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Example Bundle-SymbolicName: Example Bundle-Version: 1.0.0.qualifier Bundle-Activator: example.Activator Import-Package: org.osgi.framework;version="1.3.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Require-Bundle: org.eclipse.persistence.antlr, org.eclipse.persistence.asm, org.eclipse.persistence.core, org.eclipse.persistence.moxy, javax.xml.bind 

Output

The following is the result of launching Activator :

 <?xml version="1.0" encoding="UTF-8"?> <customer> <personal-info> <name>Jane Doe</name> </personal-info> </customer> 
+2
source

Source: https://habr.com/ru/post/1440394/


All Articles