You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Pierre Buyle <pi...@irislink.com> on 2007/11/08 10:40:18 UTC

Cannot use classes marked as final as WebMethod parameters.

Hi,

I'm trying to expose existing internal service beans as WebService using the
default JAXB databinding. Some of my data classes are marked as final in
Java. With JAXB, this translate to a complexType with the value "extension
restriction" for the "final" attribute. According to the W3C Schema
validator, this constructs is valid. But XmlSchema cannot parse this
construct, leading the JaxWsServerFactoryBean to fail in it's create method
when reading the schema generated earlier (at runtime) by CXF's JAXB.

I reported a bug in XmlSchema last week (see
https://issues.apache.org/jira/browse/WSCOMMONS-273). But it hasn't been
reviewed or accepted yet. Since it prevents CXF to work using valid Java
artifacts, should I also report it as a CXF issue ?


Here is the revelant stacktrace

Related cause:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error
creating bean with name 'MyWebService': Unsatisfied dependency expressed
through constructor argument with index 2 of type
[org.apache.cxf.jaxws.JaxWsServerFactoryBean]: Ambiguous constructor
argument types - did you specify the correct bean references as constructor
arguments?
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1318)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
	at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
	at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
	at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
	at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:168)
	at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:404)
	at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:735)
	at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:369)
	at
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:245)
	at
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:188)
	at
org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
	at
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764)
	at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4216)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.startup.Embedded.start(Embedded.java:822)
	at
com.irislink.doccenter.server.helperservicesimpl.WebApplicationService.afterPropertiesSet(WebApplicationService.java:114)
	at
com.irislink.doccenter.server.ServerLauncher.main(ServerLauncher.java:199)
Caused by: org.apache.ws.commons.schema.constants.Enum$EnumValueException:
Bad Enumeration value 'extension restriction'
	at org.apache.ws.commons.schema.constants.Enum.setValue(Enum.java:49)
	at org.apache.ws.commons.schema.constants.Enum.<init>(Enum.java:27)
	at
org.apache.ws.commons.schema.XmlSchemaDerivationMethod.<init>(XmlSchemaDerivationMethod.java:46)
	at
org.apache.ws.commons.schema.SchemaBuilder.handleComplexType(SchemaBuilder.java:657)
	at
org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:157)
	at
org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:347)
	at
org.apache.cxf.databinding.source.AbstractDataBinding.addSchemaDocument(AbstractDataBinding.java:73)
	at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:231)
	at
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:244)
	at
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:272)
	at
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:146)
	at
org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:89)
	at
org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint(AbstractEndpointFactory.java:83)
	at
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:107)
	at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:147)
	at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:287)
	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:227)
	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:179)
	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:340)
	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
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1383)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1352)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1315)
	... 20 more
-- 
View this message in context: http://www.nabble.com/Cannot-use-classes-marked-as-final-as-WebMethod-parameters.-tf4769950.html#a13643971
Sent from the cxf-user mailing list archive at Nabble.com.


Re: Cannot use classes marked as final as WebMethod parameters.

Posted by Glen Mazza <gl...@verizon.net>.
Am Donnerstag, den 08.11.2007, 01:40 -0800 schrieb Pierre Buyle:
> Hi,
> 
> I'm trying to expose existing internal service beans as WebService using the
> default JAXB databinding. Some of my data classes are marked as final in
> Java. With JAXB, this translate to a complexType with the value "extension
> restriction" for the "final" attribute. According to the W3C Schema
> validator, this constructs is valid. But XmlSchema cannot parse this
> construct, leading the JaxWsServerFactoryBean to fail in it's create method
> when reading the schema generated earlier (at runtime) by CXF's JAXB.
> 
> I reported a bug in XmlSchema last week (see
> https://issues.apache.org/jira/browse/WSCOMMONS-273). But it hasn't been
> reviewed or accepted yet. Since it prevents CXF to work using valid Java
> artifacts, should I also report it as a CXF issue ?
> 
> 

I wouldn't think so, because we can't fix the code.  BTW "CXF's" JAXB is
Sun's--it's the same one used by Metro.

Glen



Re: Cannot use classes marked as final as WebMethod parameters.

Posted by Daniel Kulp <dk...@apache.org>.
sigh.......   

We're already tracking a couple xmlschema bugs in our Jira, what's 
another one?   :-(

https://issues.apache.org/jira/browse/CXF-1160
https://issues.apache.org/jira/browse/CXF-1159

That said, I added myself to the watch for that issue so I'll see when 
something happens with it.


Dan


On Thursday 08 November 2007, Pierre Buyle wrote:
> Hi,
>
> I'm trying to expose existing internal service beans as WebService
> using the default JAXB databinding. Some of my data classes are marked
> as final in Java. With JAXB, this translate to a complexType with the
> value "extension restriction" for the "final" attribute. According to
> the W3C Schema validator, this constructs is valid. But XmlSchema
> cannot parse this construct, leading the JaxWsServerFactoryBean to
> fail in it's create method when reading the schema generated earlier
> (at runtime) by CXF's JAXB.
>
> I reported a bug in XmlSchema last week (see
> https://issues.apache.org/jira/browse/WSCOMMONS-273). But it hasn't
> been reviewed or accepted yet. Since it prevents CXF to work using
> valid Java artifacts, should I also report it as a CXF issue ?
>
>
> Here is the revelant stacktrace
>
> Related cause:
> org.springframework.beans.factory.UnsatisfiedDependencyException:
> Error creating bean with name 'MyWebService': Unsatisfied dependency
> expressed through constructor argument with index 2 of type
> [org.apache.cxf.jaxws.JaxWsServerFactoryBean]: Ambiguous constructor
> argument types - did you specify the correct bean references as
> constructor arguments?
> 	at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanF
>actory.initializeBean(AbstractAutowireCapableBeanFactory.java:1318) at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanF
>actory.createBean(AbstractAutowireCapableBeanFactory.java:522) at
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObj
>ect(AbstractBeanFactory.java:249) at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
>.getSingleton(DefaultSingletonBeanRegistry.java:169) at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(
>AbstractBeanFactory.java:246) at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(
>AbstractBeanFactory.java:168) at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.p
>reInstantiateSingletons(DefaultListableBeanFactory.java:404) at
> org.springframework.context.support.AbstractApplicationContext.finishB
>eanFactoryInitialization(AbstractApplicationContext.java:735) at
> org.springframework.context.support.AbstractApplicationContext.refresh
>(AbstractApplicationContext.java:369) at
> org.springframework.web.context.ContextLoader.createWebApplicationCont
>ext(ContextLoader.java:245) at
> org.springframework.web.context.ContextLoader.initWebApplicationContex
>t(ContextLoader.java:188) at
> org.springframework.web.context.ContextLoaderListener.contextInitializ
>ed(ContextLoaderListener.java:45) at
> org.apache.catalina.core.StandardContext.listenerStart(StandardContext
>.java:3764) at
> org.apache.catalina.core.StandardContext.start(StandardContext.java:42
>16) at
> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
> at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
> at
> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
> at
> org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
> at org.apache.catalina.startup.Embedded.start(Embedded.java:822) at
> com.irislink.doccenter.server.helperservicesimpl.WebApplicationService
>.afterPropertiesSet(WebApplicationService.java:114) at
> com.irislink.doccenter.server.ServerLauncher.main(ServerLauncher.java:
>199) Caused by:
> org.apache.ws.commons.schema.constants.Enum$EnumValueException: Bad
> Enumeration value 'extension restriction'
> 	at org.apache.ws.commons.schema.constants.Enum.setValue(Enum.java:49)
> 	at org.apache.ws.commons.schema.constants.Enum.<init>(Enum.java:27)
> 	at
> org.apache.ws.commons.schema.XmlSchemaDerivationMethod.<init>(XmlSchem
>aDerivationMethod.java:46) at
> org.apache.ws.commons.schema.SchemaBuilder.handleComplexType(SchemaBui
>lder.java:657) at
> org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(Sche
>maBuilder.java:157) at
> org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollect
>ion.java:347) at
> org.apache.cxf.databinding.source.AbstractDataBinding.addSchemaDocumen
>t(AbstractDataBinding.java:73) at
> org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:23
>1) at
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServi
>ceFromClass(ReflectionServiceFactoryBean.java:244) at
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initialize
>ServiceModel(ReflectionServiceFactoryBean.java:272) at
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(Ref
>lectionServiceFactoryBean.java:146) at
> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServi
>ceFactoryBean.java:89) at
> org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint(Abstrac
>tEndpointFactory.java:83) at
> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.jav
>a:107) at
> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryB
>ean.java:147) at
> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:287) at
> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:227) at
> org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:179) at
> org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:340) at
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.j
>ava:39) at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccess
>orImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585)
> 	at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanF
>actory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1
>383) at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanF
>actory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1352)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanF
>actory.initializeBean(AbstractAutowireCapableBeanFactory.java:1315) ...
> 20 more



-- 
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727    C: 508-380-7194
daniel.kulp@iona.com
http://www.dankulp.com/blog