2012-10-17 29 views
4

我用下保险丝ESB(基于karaf)莫西莫西错误,我转换org.eclipse.persistence.jar到捆绑,我部署下保险丝ESB这个包,我得到这个错误与Karaf

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

当试图创建JAXBContext我的代码试图Java模型转换为XML,以及模型部署下保险丝ESB独立的包和我在同一个包模式的加入jaxb.properties文件新实例

注:同代码从main运行时运行顺利,没有问题方法在主类中。

以下是我的代码,错误发生在第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); 

任何想法?

更新

堆栈跟踪:

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 

回答

1

问题已经通过更换这个解决一段代码

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"); 

随着

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); 
2

转换eclipselink.jar到束相反的,你可以从以下位置下载我们的预建的OSGi包:

EclipseLink 2.4.1套装

对于EclipseLink JAXB (MOXy)你需要以下软件包:

  • 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

如果您使用的莫西的JSON绑定(见:http://blog.bdoughan.com/2011/08/json-binding-with-eclipselink-moxy.html),你还需要下面的包:

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

UPDATE #1

在OSGi环境中,您需要确保导入MOXy软件包或org.eclipse.persistence.jaxb软件包。

在我的代码另一个问题上面第2行,我发现 JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY是你在你的答案中提到的 日食束弃用,没有任何 更换呢?

我们引入了新的类,以使其更容易找到JAXBContextMarshallerUnmarshaller属性。这些类称为JAXBContextProperties,MarshallerPropertiesUnmarshallerProperties,可在org.eclipse.persistence.jaxb包中找到。

  • 以下:JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY
  • 被替换为:JAXBContextProperties.OXM_METADATA_SOURCE

更新#2

我没有使用Karaf,但下面是一个OSGi的例子我能在Eclipse Equinox中运行:

exa mple/Activator.java

我觉得你需要使用上下文路径创建JAXBContext。这允许你通过一个ClassLoader。该类加载器需要了解EclipseLink JAXB(MOXy)实现。我还包括了一个指定MOXy的外部映射文档的例子。

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; 
    } 

} 

例如/ jaxb.in​​dex

当你需要从包括在上下文路径称为jaxb.index以回车分开的短类名列表文件中的上下文路径创建JAXBContext 。你需要

Customer 

例如/ jaxb.properties

要指定莫西为您的JAXB提供者包括在同一封装称为jaxb.properties与以下条目域模型文件:

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

示例/ oxm.xml

下面是一个MOXy映射文档的例子。

<?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

下面是清单的一个例子。在这个例子中我已经使用束进口:

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 

输出

下面是输出从运行Activator

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

我来代替转换eclipselink.jar到束先前三束和我得到了相同的错误(org.apache.cxf.interceptor.Fault:属性“ eclipselink-oxm-xml“不支持”),任何想法? – eman

+0

@eman - 您使用的是哪个版本的EclipseLink软件包? –

+0

我使用以下软件包: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和我从这个链接下载它们http://www.eclipse.org/downloads/download.php?file=/rt/eclipselink/releases/2.4.1/eclipselink-plugins-2.4.1.v20121003-ad44345。 zip – eman