Re: Compatibilité Generics Java / Web Services
Rémi Forax <[email protected]> Wed, 14 Sep 2011 14:50:51 +0200
| Newsgroups | gmane.comp.java.french.general |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format.
--------------030103020705070001000007
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable
X-MIME-Autoconverted: from 8bit to quoted-printable by mailhost.u-strasbg.fr id p8EDbnZS082105
On 09/14/2011 02:39 PM, Sylvain RICHET wrote:
> Bonjour =E0 Tous,
>
> Je voudrais utiliser des Generics dans des objets faisant partie des=20
> signatures de m=E9thodes de mes WS (sous Jonas 5.1.5, via JAX-WS / CXF).
> Mes WS sont impl=E9ment=E9s sous forme d'EJB 3.0 / JAX-WS.
>
> Pas de souci pour g=E9n=E9rer les classes clientes et server (via=20
> wsgen/wsimport).
Erreur classique, si je ne m'abuse,
cela veut dire que DbiMusician ou une des classes r=E9f=E9renc=E9 dans l=
es=20
champs de DbiMusician
ne fait pas partie du sch=E9ma utilis=E9 par JAXB.
R=E9mi
>
> En revanche, au runtime, je me prends une erreur du genre :
>
>
> 2011-09-14 12:41:45,884 : LogUtils.log : Interceptor has thrown
> exception, unwinding now
> org.apache.cxf.interceptor.Fault: Marshalling Error: class
> com.anaolabs.generics.model.DbiMusician nor any of its super class
> is known to this context.
> at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.=
java:241)
> at
> org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:63)
> at
> org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeP=
arts(AbstractOutDatabindingInterceptor.java:102)
> at
> org.apache.cxf.interceptor.BareOutInterceptor.handleMessage(BareOut=
Interceptor.java:68)
> at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterce=
ptorChain.java:226)
> at
> org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(O=
utgoingChainInterceptor.java:74)
> at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterce=
ptorChain.java:226)
> at
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainIni=
tiationObserver.java:88)
> at
> org.ow2.jonas.ws.cxf.http.JOnASDestination.invoke(JOnASDestination.=
java:111)
> at
> org.ow2.jonas.ws.cxf.jaxws.CXFWSEndpoint.invoke(CXFWSEndpoint.java:=
151)
> at
> org.ow2.jonas.ws.jaxws.http.servlet.JAXWSServlet.invokeDestination(=
JAXWSServlet.java:113)
> at
> org.ow2.jonas.ws.jaxws.http.servlet.JAXWSServlet.doPost(JAXWSServle=
t.java:75)
> at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
> at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ap=
plicationFilterChain.java:290)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(Applicatio=
nFilterChain.java:206)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrappe=
rValve.java:233)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContex=
tValve.java:191)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve=
.java:127)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve=
.java:102)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineV=
alve.java:109)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.j=
ava:340)
> at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.ja=
va:857)
> at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.pro=
cess(Http11Protocol.java:588)
> at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:=
489)
> at java.lang.Thread.run(Thread.java:619)
> Caused by: javax.xml.bind.MarshalException
> - with linked exception:
> [javax.xml.bind.JAXBException: class
> com.anaolabs.generics.model.DbiMusician nor any of its super class
> is known to this context.]
> at
> com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.jav=
a:318)
> at
> com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.j=
ava:244)
> at
> javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarsh=
allerImpl.java:100)
> at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.writeObject(JAXBEncoderDecod=
er.java:397)
> at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.=
java:219)
> ... 25 more
> Caused by: javax.xml.bind.JAXBException: class
> com.anaolabs.generics.model.DbiMusician nor any of its super class
> is known to this context.
> at
> com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer=
.java:246)
> at
> com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer=
.java:261)
> at
> com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSeriali=
zer.java:653)
> at
> com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.seria=
lizeItem(ArrayElementNodeProperty.java:65)
> at
> com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serialize=
ListBody(ArrayElementProperty.java:168)
> at
> com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(=
ArrayERProperty.java:152)
> at
> com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBe=
anInfoImpl.java:332)
> at
> com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBe=
anInfoImpl.java:328)
> at
> com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSeriali=
zer.java:699)
> at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(Ele=
mentBeanInfoImpl.java:152)
> at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(Ele=
mentBeanInfoImpl.java:189)
> at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(Eleme=
ntBeanInfoImpl.java:315)
> at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(Eleme=
ntBeanInfoImpl.java:322)
> at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(Eleme=
ntBeanInfoImpl.java:72)
> at
> com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer=
.java:494)
> at
> com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.jav=
a:315)
> ... 29 more
> Caused by: javax.xml.bind.JAXBException: class
> com.anaolabs.generics.model.DbiMusician nor any of its super class
> is known to this context.
> at
> com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContext=
Impl.java:590)
> at
> com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSeriali=
zer.java:648)
> ... 42 more
>
>
> glurps !
>
> Il semblerait que JAXB (sous le capot de JAX-WS) ne marshalle pas=20
> correctement mes objets.
>
> Alors j'ai essay=E9 de jouer avec l'annotation JAXB *@XmlSeeAlso* (pour=
=20
> forcer JAXB =E0 binder mes classes),
> mais l=E0 bing ... c'est wsgen qui plante =E0 la g=E9n=E9ration de la=20
> plomberie WS !
>
>
> Cette probl=E8matique des Generics / WS a probablement =E9t=E9 d=E9j=E0=
=E9voqu=E9e ?
>
> Si vous avez de l'info =E0 ce sujet, je suis preneur
> Merci d'avance
> :-)
--------------030103020705070001000007
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
On 09/14/2011 02:39 PM, Sylvain RICHET wrote:
<blockquote
cite="mid:CAGn21GKGsfwLQezQtHGPwQ8mwO9yHQVc5eA9=O7nVxdnH1dgHQ@mail.gmail.com"
type="cite">Bonjour à Tous,<br>
<br>
Je voudrais utiliser des Generics dans des objets faisant partie
des signatures de méthodes de mes WS (sous Jonas 5.1.5, via JAX-WS
/ CXF).<br>
Mes WS sont implémentés sous forme d'EJB 3.0 / JAX-WS.<br>
<br>
Pas de souci pour générer les classes clientes et server (via
wsgen/wsimport).<br>
</blockquote>
<br>
Erreur classique, si je ne m'abuse,<br>
cela veut dire que DbiMusician ou une des classes référencé dans
les champs de DbiMusician<br>
ne fait pas partie du schéma utilisé par JAXB.<br>
<br>
Rémi<br>
<br>
<blockquote
cite="mid:CAGn21GKGsfwLQezQtHGPwQ8mwO9yHQVc5eA9=O7nVxdnH1dgHQ@mail.gmail.com"
type="cite"><br>
En revanche, au runtime, je me prends une erreur du genre :<br>
<br>
<br>
<blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px
solid rgb(204, 204, 204); padding-left: 1ex; font-family:
courier new,monospace;" class="gmail_quote">
2011-09-14 12:41:45,884 : LogUtils.log : Interceptor has thrown
exception, unwinding now<br>
org.apache.cxf.interceptor.Fault: Marshalling Error: class
com.anaolabs.generics.model.DbiMusician nor any of its super
class is known to this context.<br>
at
org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:241)<br>
at
org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:63)<br>
at
org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeParts(AbstractOutDatabindingInterceptor.java:102)<br>
at
org.apache.cxf.interceptor.BareOutInterceptor.handleMessage(BareOutInterceptor.java:68)<br>
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:226)<br>
at
org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:74)<br>
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:226)<br>
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:88)<br>
at
org.ow2.jonas.ws.cxf.http.JOnASDestination.invoke(JOnASDestination.java:111)<br>
at
org.ow2.jonas.ws.cxf.jaxws.CXFWSEndpoint.invoke(CXFWSEndpoint.java:151)<br>
at
org.ow2.jonas.ws.jaxws.http.servlet.JAXWSServlet.invokeDestination(JAXWSServlet.java:113)<br>
at
org.ow2.jonas.ws.jaxws.http.servlet.JAXWSServlet.doPost(JAXWSServlet.java:75)<br>
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)<br>
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)<br>
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)<br>
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)<br>
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)<br>
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)<br>
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)<br>
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)<br>
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)<br>
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340)<br>
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)<br>
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)<br>
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)<br>
at java.lang.Thread.run(Thread.java:619)<br>
Caused by: javax.xml.bind.MarshalException<br>
- with linked exception:<br>
[javax.xml.bind.JAXBException: class
com.anaolabs.generics.model.DbiMusician nor any of its super
class is known to this context.]<br>
at
com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:318)<br>
at
com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:244)<br>
at
javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:100)<br>
at
org.apache.cxf.jaxb.JAXBEncoderDecoder.writeObject(JAXBEncoderDecoder.java:397)<br>
at
org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:219)<br>
... 25 more<br>
Caused by: javax.xml.bind.JAXBException: class
com.anaolabs.generics.model.DbiMusician nor any of its super
class is known to this context.<br>
at
com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:246)<br>
at
com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:261)<br>
at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:653)<br>
at
com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:65)<br>
at
com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:168)<br>
at
com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:152)<br>
at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:332)<br>
at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:328)<br>
at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:699)<br>
at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:152)<br>
at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:189)<br>
at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(ElementBeanInfoImpl.java:315)<br>
at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:322)<br>
at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:72)<br>
at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:494)<br>
at
com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:315)<br>
... 29 more<br>
Caused by: javax.xml.bind.JAXBException: class
com.anaolabs.generics.model.DbiMusician nor any of its super
class is known to this context.<br>
at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:590)<br>
at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:648)<br>
... 42 more<br>
</blockquote>
<div><br>
glurps !<br>
<br>
Il semblerait que JAXB (sous le capot de JAX-WS) ne marshalle
pas correctement mes objets.<br>
<br>
Alors j'ai essayé de jouer avec l'annotation JAXB <b>@XmlSeeAlso</b>
(pour forcer JAXB à binder mes classes),<br>
mais là bing ... c'est wsgen qui plante à la génération de la
plomberie WS !<br>
<br>
<br>
Cette problèmatique des Generics / WS a probablement été déjà
évoquée ?<br>
<br>
Si vous avez de l'info à ce sujet, je suis preneur<br>
Merci d'avance<br>
:-)<br>
</div>
</blockquote>
<br>
</body>
</html>
--------------030103020705070001000007--