cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Freeman Fang <freeman.f...@iona.com>
Subject Re: XmlSchemaComplexType exception
Date Fri, 25 May 2007 08:04:08 GMT
Hi Tog,
My next commit will meet your requirement. You can define class without 
@XmlRootElement for input parameter class of rest binding.

Cheers

Freeman

tog wrote:
> Hi Jim,
>
> Ok but I was kind of obliged to process like this - see [1] since I am 
> using
> groovy which generates additional properties / fields / methods  (non
> business one) to my bean. And I want to get rid of them ...
>
> So the question is:
>   Is there a way to achieve the same result as what I get when using
> @XmlRootElement by only using annotations on the properties ?
>
> When I use @XmlRootElement on my groovy bean I got the following 
> exception
> because of the interface and extra fields.
>
> Cheers
> Tog
>
> INFO: Creating Service {http://book.acme.com/}BookServiceService from 
> class
> com.acme.book.BookService
> Exception in thread "main"
> org.apache.cxf.service.factory.ServiceConstructionException
>        at org.apache.cxf.jaxb.JAXBDataBinding.initialize(
> JAXBDataBinding.java:255)
>        at
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass 
>
> (ReflectionServiceFactoryBean.java:220)
>        at
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel 
>
> (ReflectionServiceFactoryBean.java:248)
>        at
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(
> ReflectionServiceFactoryBean.java:136)
>        at org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint(
> AbstractEndpointFactory.java:83)
>        at org.apache.cxf.frontend.ServerFactoryBean.create(
> ServerFactoryBean.java:84)
>        at com.acme.book.Main.createRestService(Main.java:57)
>        at com.acme.book.Main.main(Main.java:36)
> Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 
> counts
> of IllegalAnnotationExceptions
> groovy.lang.MetaClass is an interface, and JAXB can't handle interfaces.
>        this problem is related to the following location:
>                at groovy.lang.MetaClass
>                at public groovy.lang.MetaClass
> com.acme.book.GetBook.getMetaClass()
>                at com.acme.book.GetBook
> groovy.lang.MetaClass does not have a no-arg default constructor.
>        this problem is related to the following location:
>                at groovy.lang.MetaClass
>                at public groovy.lang.MetaClass
> com.acme.book.GetBook.getMetaClass()
>                at com.acme.book.GetBook
>
>        at
> com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(
> IllegalAnnotationsException.java:66)
>        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(
> JAXBContextImpl.java:422)
>        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(
> JAXBContextImpl.java:270)
>        at com.sun.xml.bind.v2.ContextFactory.createContext(
> ContextFactory.java:103)
>        at com.sun.xml.bind.v2.ContextFactory.createContext(
> ContextFactory.java:81)
>        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:585)
>        at 
> javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:210)
>        at javax.xml.bind.ContextFinder.find(ContextFinder.java:366)
>        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
>        at org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContext(
> JAXBDataBinding.java:381)
>        at org.apache.cxf.jaxb.JAXBDataBinding.initialize(
> JAXBDataBinding.java:253)
>        ... 7 more
>
>
> [1] http://www.nabble.com/Newbie-question-%21-tf3753790.html
>
> On 5/24/07, Jim Ma <ema@iona.com> wrote:
>>
>> Hi Tog,
>>
>> Restful_http_bindings sample use JaxwsServiceFactoryBean to create
>> service info by reflecting the classes. JaxwsServiceFactoryBean generate
>> the schema information with default JaxbDataBinding .
>> The classes you modified is used to generate schema by JaxbDataBinding .
>> When @XmlRootElement is removed from the GetBook class , JaxbDataBinding
>> will only generate the schema type for this class. See [1] and [2]
>> A XmlSchemaComplexType will be bound to the message part instead of a
>> XmlSchemaElement , so it will cause the cast exception .
>>
>> I do not think this is an issue or unsupported. Jaxb need this
>> annotation to generate the appropriate schema.
>>
>> [1] JAXB spec 8.7.2
>>
>> [2]
>> http://weblogs.java.net/blog/kohsuke/archive/2006/03/why_does_jaxb_p.html 
>>
>>
>> Cheers
>>
>> Jim
>>
>>
>> Freeman Fang wrote:
>> > Hi Tog,
>> >
>> > Class defined as method input para need @XmlRootElement now. Besides
>> > the GetBook.java, I also remove @XmlRootElement from Book.java, which
>> > is input para for addBook method, I also get the same exception, would
>> > you please verify it?
>> >
>> > The reason is in CXF URIParameterInInterceptor.java, we check input
>> > paras (MessagePartInfo of cxf service model), we do type cast here, so
>> > if class has no @XmlRootElement, part.getXmlSchema() in following code
>> > will return XmlSchemaComplexType, but not XmlSchemaElement, which
>> > cause type cast exception as you see.
>> >
>> > if ("POST".equals(method) || "PUT".equals(method)) {
>> >             doc = IriDecoderHelper.interopolateParams(doc,
>> >
>> > (XmlSchemaElement)part.getXmlSchema(),
>> >                                                      schemas,
>> >                                                      params);
>> >        } else {
>> >            doc =
>> > IriDecoderHelper.buildDocument((XmlSchemaElement)part.getXmlSchema(),
>> >                                                 schemas,
>> >                                                 params);
>> >        }
>> >
>> > Cheers
>> > Freeman
>> >
>> >
>> > tog wrote:
>> >> Hi Freeman,
>> >>
>> >> Here is my GetBook class. So I changed the @XmlRootElement by
>> >> @XmlElement.
>> >> Actually I did it for the classes and only this one is causing 
>> problem.
>> >> Can you explain what is the problem in that case ?
>> >>
>> >> Cheers
>> >> Tog
>> >>
>> >> package com.acme.book
>> >>
>> >> //import javax.xml.bind.annotation.XmlAttribute
>> >> import javax.xml.bind.annotation.XmlElement
>> >> import javax.xml.bind.annotation.XmlAccessorType
>> >> import javax.xml.bind.annotation.XmlAccessType
>> >>
>> >> //@XmlRootElement(name = "Book", namespace="http://book.acme.com/")
>> >>
>> >> @XmlAccessorType(XmlAccessType.NONE)
>> >> //@XmlRootElement(name = "GetBook")
>> >> public class GetBook {
>> >>    @XmlElement
>> >>    long id
>> >> }
>> >>
>> >>
>> >> On 5/24/07, Freeman Fang <freeman.fang@iona.com> wrote:
>> >>>
>> >>> Hi  Tog,
>> >>>
>> >>> I believe you remove @XmlRootElement(name = "GetBook") from you
>> >>> GetBook.java, right?
>> >>> I can reproduce your problem by means of removing
>> >>> @XmlRootElement(name =
>> >>> "GetBook")
>> >>>
>> >>> I think we should support your scenario.
>> >>> Other guys, any thought?
>> >>>
>> >>> I fill a jira to track it
>> >>> https://issues.apache.org/jira/browse/CXF-680
>> >>> Thanks very much
>> >>>
>> >>> Freeman
>> >>>
>> >>>
>> >>> tog wrote:
>> >>> > Dan
>> >>> >
>> >>> > I moved to trunk and get the same exception :-)
>> >>> > Does the stack trace help ?
>> >>> >
>> >>> > Cheers
>> >>> > Guillaume
>> >>> >
>> >>> > INFO: Interceptor has thrown exception, unwinding now
>> >>> > java.lang.ClassCastException:
>> >>> > org.apache.ws.commons.schema.XmlSchemaComplexType
>> >>> >        at
>> >>> >
>> >>>
>> org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor.mergeParams 
>>
>> >>>
>> >>> >
>> >>> > (URIParameterInInterceptor.java:129)
>> >>> >        at
>> >>> >
>> >>>
>> org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor.handleMessage 
>>
>> >>>
>> >>> >
>> >>> > (URIParameterInInterceptor.java:105)
>> >>> >        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(
>> >>> > PhaseInterceptorChain.java:147)
>> >>> >        at 
>> org.apache.cxf.transport.ChainInitiationObserver.onMessage
>> (
>> >>> > ChainInitiationObserver.java:63)
>> >>> >        at
>> >>> >
>> >>>
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(
>> >>>
>> >>> > JettyHTTPDestination.java:220)
>> >>> >        at
>> >>> > 
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(
>> >>> > JettyHTTPDestination.java:180)
>> >>> >        at
>> >>> org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(
>> >>> > JettyHTTPHandler.java:54)
>> >>> >        at org.mortbay.jetty.handler.ContextHandler.handle(
>> >>> > ContextHandler.java:690)
>> >>> >        at 
>> org.mortbay.jetty.handler.ContextHandlerCollection.handle(
>> >>> > ContextHandlerCollection.java:191)
>> >>> >        at org.mortbay.jetty.handler.HandlerWrapper.handle(
>> >>> > HandlerWrapper.java:139)
>> >>> >        at org.mortbay.jetty.Server.handle(Server.java:285)
>> >>> >        at org.mortbay.jetty.HttpConnection.handleRequest(
>> >>> > HttpConnection.java:457)
>> >>> >        at
>> >>> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete
>> >>> (
>> >>> > HttpConnection.java:751)
>> >>> >        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java
>> :500)
>> >>> >        at
>> >>> > org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209)
>> >>> >        at
>> >>> > org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:357)
>> >>> >        at org.mortbay.io.nio.SelectChannelEndPoint.run(
>> >>> > SelectChannelEndPoint.java:329)
>> >>> >        at org.mortbay.thread.BoundedThreadPool$PoolThread.run(
>> >>> > BoundedThreadPool.java:475)
>> >>> > 23 mai 2007 21:35:04 sun.reflect.NativeMethodAccessorImpl invoke0
>> >>> > GRAVE: EXCEPTION
>> >>> > java.util.ConcurrentModificationException
>> >>> >        at java.util.AbstractList$Itr.checkForComodification(
>> >>> > AbstractList.java:449)
>> >>> >        at
>> >>> java.util.AbstractList$ListItr.previous(AbstractList.java:463)
>> >>> >        at
>> >>> >
>> >>>
>> org.apache.cxf.phase.PhaseInterceptorChain$PhaseInterceptorIterator.previous 
>>
>> >>>
>> >>> >
>> >>> > (PhaseInterceptorChain.java:438)
>> >>> >        at org.apache.cxf.phase.PhaseInterceptorChain.unwind(
>> >>> > PhaseInterceptorChain.java:231)
>> >>> >        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(
>> >>> > PhaseInterceptorChain.java:161)
>> >>> >        at 
>> org.apache.cxf.transport.ChainInitiationObserver.onMessage
>> (
>> >>> > ChainInitiationObserver.java:63)
>> >>> >        at
>> >>> >
>> >>>
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(
>> >>>
>> >>> > JettyHTTPDestination.java:220)
>> >>> >        at
>> >>> > 
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(
>> >>> > JettyHTTPDestination.java:180)
>> >>> >        at
>> >>> org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(
>> >>> > JettyHTTPHandler.java:54)
>> >>> >        at org.mortbay.jetty.handler.ContextHandler.handle(
>> >>> > ContextHandler.java:690)
>> >>> >        at 
>> org.mortbay.jetty.handler.ContextHandlerCollection.handle(
>> >>> > ContextHandlerCollection.java:191)
>> >>> >        at org.mortbay.jetty.handler.HandlerWrapper.handle(
>> >>> > HandlerWrapper.java:139)
>> >>> >        at org.mortbay.jetty.Server.handle(Server.java:285)
>> >>> >        at org.mortbay.jetty.HttpConnection.handleRequest(
>> >>> > HttpConnection.java:457)
>> >>> >        at
>> >>> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete
>> >>> (
>> >>> > HttpConnection.java:751)
>> >>> >        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java
>> :500)
>> >>> >        at
>> >>> > org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209)
>> >>> >        at
>> >>> > org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:357)
>> >>> >        at org.mortbay.io.nio.SelectChannelEndPoint.run(
>> >>> > SelectChannelEndPoint.java:329)
>> >>> >        at org.mortbay.thread.BoundedThreadPool$PoolThread.run(
>> >>> > BoundedThreadPool.java:475)
>> >>> >
>> >>> >
>> >>> > On 5/21/07, Daniel Kulp <dkulp@apache.org> wrote:
>> >>> >>
>> >>> >>
>> >>> >> Guillaume,
>> >>> >>
>> >>> >> Based on that stack trace, your using an older version of the

>> http
>> >>> >> binding jar.   Code at that line changed drastically on May
>> >>> 2nd.    I
>> >>> >> can see how the pre-May 2nd code would generate that exception,
>> >>> but not
>> >>> >> the post May 2nd code.
>> >>> >>
>> >>> >> Dan
>> >>> >>
>> >>> >>
>> >>> >> On Monday 21 May 2007 09:18, tog wrote:
>> >>> >> > Me again ...
>> >>> >> > Any idea what could be causing the following exception
 in  a
>> >>> >> > restful_http_binding  type snipplet ?
>> >>> >> >
>> >>> >> > Cheers
>> >>> >> > Guillaume
>> >>> >> >
>> >>> >> > 21 mai 2007 13:53:27
>> >>> >> >
>> >>> 
>> org.apache.cxf.binding.http.interceptor.URIParameterInInterceptorhandl
>> >>> >> >eMessage INFO: URIParameterInterceptor handle message on
path
>> >>> >> > [/books/123] with content-type [null]
>> >>> >> > 21 mai 2007 13:53:27 org.apache.cxf.phase.PhaseInterceptorChain
>> >>> >> > doIntercept INFO: Interceptor has thrown exception, 
>> unwinding now
>> >>> >> > java.lang.ClassCastException:
>> >>> >> > org.apache.ws.commons.schema.XmlSchemaComplexType
>> >>> >> >         at
>> >>> >> >
>> >>> 
>> org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor.merg
>> >>> >> >eParams (URIParameterInInterceptor.java:122)
>> >>> >> >         at
>> >>> >> >
>> >>> 
>> org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor.hand
>> >>> >> >leMessage (URIParameterInInterceptor.java:103)
>> >>> >> >         at 
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept
>> (
>> >>> >> > PhaseInterceptorChain.java:148)
>> >>> >> >         at
>> >>> org.apache.cxf.transport.ChainInitiationObserver.onMessage
>> >>> (
>> >>> >> > ChainInitiationObserver.java:63)
>> >>> >> >         at
>> >>> >> >
>> >>> 
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceReques
>> >>> >> >t( JettyHTTPDestination.java:200)
>> >>> >> >         at
>> >>> >> >
>> >>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(
>> >>> >> > JettyHTTPDestination.java:161)
>> >>> >> >         at
>> >>> >> > org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(
>> >>> >> > JettyHTTPHandler.java:54)
>> >>> >> >         at org.mortbay.jetty.handler.ContextHandler.handle(
>> >>> >> > ContextHandler.java:690)
>> >>> >> >         at
>> >>> org.mortbay.jetty.handler.ContextHandlerCollection.handle(
>> >>> >> > ContextHandlerCollection.java:191)
>> >>> >> >         at org.mortbay.jetty.handler.HandlerWrapper.handle(
>> >>> >> > HandlerWrapper.java:139)
>> >>> >> >         at org.mortbay.jetty.Server.handle(Server.java:285)
>> >>> >> >         at org.mortbay.jetty.HttpConnection.handleRequest(
>> >>> >> > HttpConnection.java:457)
>> >>> >> >         at
>> >>> >> > org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(
>> >>> >> > HttpConnection.java:751)
>> >>> >> >         at 
>> org.mortbay.jetty.HttpParser.parseNext(HttpParser.java
>> >>> :500)
>> >>> >> >         at
>> >>> >> >
>> >>> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209) at
>> >>> >> >
>> >>> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:357) at
>> >>> >> > org.mortbay.io.nio.SelectChannelEndPoint.run(
>> >>> >> > SelectChannelEndPoint.java:329)
>> >>> >> >         at org.mortbay.thread.BoundedThreadPool$PoolThread.run(
>> >>> >> > BoundedThreadPool.java:475)
>> >>> >> >
>> >>> >> > On 5/17/07, tog <guillaume.alleon@gmail.com> wrote:
>> >>> >> > > Hiya
>> >>> >> > >
>> >>> >> > > I got the following exception when querying the following
URL
>> >>> of a
>> >>> >> > > modified version of the restful_http_binding sample.
>> >>> >> > >
>> >>> >> > > <ns1:XMLFault>
>> >>> >> > >     <ns1:faultstring>
>> >>> >> > > java.lang.ClassCastException :
>> >>> >> > > org.apache.ws.commons.schema.XmlSchemaComplexType
>> >>> >> > > </ns1:faultstring>
>> >>> >> > > </ns1:XMLFault>
>> >>> >> > >
>> >>> >> > > The only change I made between this faulty version
and a
>> working
>> >>> one
>> >>> >> > > is about the GetBook class that was rewriten and
compiled in
>> >>> Groovy.
>> >>> >> > >  The schema generated in now
>> >>> >> > >
>> >>> >> > > <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
>> >>> >> > > <xs:schema elementFormDefault="qualified" version="
1.0"
>> >>> >> > > targetNamespace=" http://book.acme.com" xmlns:xs="
>> >>> >> > > http://www.w3.org/2001/XMLSchema">
>> >>> >> > >
>> >>> >> > >   <xs:complexType name="getBook">
>> >>> >> > >     <xs:sequence>
>> >>> >> > >       <xs:element name="id" type="xs:long"/>
>> >>> >> > >     </xs:sequence>
>> >>> >> > >   </xs:complexType>
>> >>> >> > > </xs:schema>
>> >>> >> > >
>> >>> >> > >
>> >>> >> > > instead of
>> >>> >> > >
>> >>> >> > >
>> >>> >> > > <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
>> >>> >> > > <xs:schema elementFormDefault="qualified" version="1.0"
>> >>> >> > > targetNamespace=" http://book.acme.com" xmlns:tns="
>> >>> >> > > http://book.acme.com"
>> >>> xmlns:xs="http://www.w3.org/2001/XMLSchema ">
>> >>> >> > >
>> >>> >> > >   <xs:element name="GetBook" type="tns:getBook"/>
>> >>> >> > >
>> >>> >> > >   <xs:complexType name="getBook">
>> >>> >> > >     <xs:sequence>
>> >>> >> > >       <xs:element name="id" type="xs:long"/>
>> >>> >> > >     </xs:sequence>
>> >>> >> > >   </xs:complexType>
>> >>> >> > > </xs:schema>
>> >>> >> > >
>> >>> >> > > would these changes lead to that error ? My feeling
is *no*
>> >>> since I
>> >>> >> > > did the same change for other classes and this did
not cause
>> the
>> >>> >> > > same exception.
>> >>> >> > >
>> >>> >> > > Thoughts ?
>> >>> >> > >
>> >>> >> > > Cheers
>> >>> >> > > Guillaume
>> >>> >>
>> >>> >> --
>> >>> >> J. Daniel Kulp
>> >>> >> Principal Engineer
>> >>> >> IONA
>> >>> >> P: 781-902-8727    C: 508-380-7194
>> >>> >> daniel.kulp@iona.com
>> >>> >> http://www.dankulp.com/blog
>> >>> >>
>> >>> >
>> >>>
>> >>>
>> >>
>> >
>> >
>>
>


Mime
View raw message