带有CXF和JAX-WS的XmlJavaTypeAdapter
发布时间:2020-12-15 08:43:41 所属栏目:Java 来源:网络整理
导读:我有一个类X,它在用Apache CXF和JAX-WS构建的Web服务的Service接口中使用.这个类X没有默认构造函数,我想避免使用这个默认构造函数.我想知道我是否可以使用@Xml JavaTypeAdapter注释作为解决方案. ClassXService中的方法: @WebMethod@XmlJavaTypeAdapter(Cla
我有一个类X,它在用Apache CXF和JAX-WS构建的Web服务的Service接口中使用.这个类X没有默认构造函数,我想避免使用这个默认构造函数.我想知道我是否可以使用@Xml
JavaTypeAdapter注释作为解决方案.
ClassXService中的方法: @WebMethod @XmlJavaTypeAdapter(ClassXAdapter.class) public void myMethod(ClassX arg0); @WebMethod @XmlJavaTypeAdapter(ClassXAdapter.class) public ClassX myMethod2(); 适配器扩展XmlAdapter并正确定义marshal和unmarshal方法. 但是,无论是否使用XmlJavaTypeAdapter注释,我总是得到相同的错误: Exception in thread "main" org.apache.cxf.service.factory.ServiceConstructionException at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:292) at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:438) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:682) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:501) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:241) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:202) at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101) at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:157) at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:202) at my.package.Main.main(Main.java:35) Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions my.package.ClassX does not have a no-arg default constructor. this problem is related to the following location: at my.package.ClassX at private my.package.ClassX my.package.jaxws_asm.MyMethod.arg0 at my.package.jaxws_asm.MyMethod2 at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:102) at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:472) at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:302) at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1140) at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154) at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:121) 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:616) at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:222) at javax.xml.bind.ContextFinder.find(ContextFinder.java:383) at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:594) at org.apache.cxf.jaxb.JAXBContextCache.createContext(JAXBContextCache.java:258) at org.apache.cxf.jaxb.JAXBContextCache.getCachedContextAndSchemas(JAXBContextCache.java:167) at org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBinding.java:418) at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:290) ... 10 more 是否无法使用适配器来避免提供默认的无参数构造函数?如果是,即使使用XmlJavaTypeAdapter注释,有人也知道为什么我会得到异常? 解决方法
将其更改为:
@WebMethod public void myMethod(@XmlJavaTypeAdapter(ClassXAdapter.class) ClassX arg0); @WebMethod @XmlJavaTypeAdapter(ClassXAdapter.class) public ClassX myMethod2(); 需要在参数上定义适配器,而不是方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |