Re: Does CXF Support Interfaces as Web Params?
I think the answer is "no", neither CXF nor GlassFish Metro support interfaces as parameters. It's either a JAX-WS or JAXB rule, I'm not certain. Glen Am Dienstag, den 26.02.2008, 15:07 -0800 schrieb Ayush Gupta: > In my web service, there is a method which takes an interface as its > parameter, instead of a concrete class. Reference code is at the bottom of > this email. > > > > When I run the client, I get an exception "Caused by: > javax.xml.bind.JAXBException: com.passenger.test.ComplexObjectInterface is > not known to this context". Further investigation and digging through the > CXF code bought me to JAXBUtils. getValidClass(Class cls) which is called > while building the JAXBContext. The code in JAXBUtils. getValidClass > explicitly excludes inclusion of any interfaces! I also tried setting the > XmlJavaTypeAdapter on the interface but that didn't work. > > > > So, does CXF Support Interfaces as Web Params? I'd appreciate anyone > throwing some light on this! > > > > Thanks > > -ayush > > > > > > Web Service Interface: > > public interface TestServiceInterface { > > public void testMethod(MyInterface param); > > } > > > > Parameter Interface: > > public interface MyInterface{ > > String getText(); > > void setText(String t); > > } > > > > > > Parameter concrete class: > > public class MyClass implements MyInterface { > > private String text; > > > > public String getText() { > > return text; > > } > > > > public void setText(String t) { > > this.text = t; > > } > > } > > > > Client: > > Service service = Service.create(SERVICE_NAME); > > service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, > ENDPOINT_ADDRESS); > > TestServiceInterface serviceInterface = > service.getPort(TestServiceInterface.class); > > serviceInterface. testMethod(new MyClass()); > > > > >
Re: Does CXF Support Interfaces as Web Params?
Kohsuke Kawaguchi's blog talked about this , you can get some information from this link: http://weblogs.java.net/blog/kohsuke/archive/2006/06/jaxb_and_interf.html On Wed, Feb 27, 2008 at 9:25 AM, Glen Mazza <[EMAIL PROTECTED]> wrote: > I think the answer is "no", neither CXF nor GlassFish Metro support > interfaces as parameters. It's either a JAX-WS or JAXB rule, I'm not > certain. > > Glen > > Am Dienstag, den 26.02.2008, 15:07 -0800 schrieb Ayush Gupta: > > In my web service, there is a method which takes an interface as its > > parameter, instead of a concrete class. Reference code is at the bottom > of > > this email. > > > > > > > > When I run the client, I get an exception "Caused by: > > javax.xml.bind.JAXBException: com.passenger.test.ComplexObjectInterfaceis > > not known to this context". Further investigation and digging through > the > > CXF code bought me to JAXBUtils. getValidClass(Class cls) which is > called > > while building the JAXBContext. The code in JAXBUtils. getValidClass > > explicitly excludes inclusion of any interfaces! I also tried setting > the > > XmlJavaTypeAdapter on the interface but that didn't work. > > > > > > > > So, does CXF Support Interfaces as Web Params? I'd appreciate anyone > > throwing some light on this! > > > > > > > > Thanks > > > > -ayush > > > > > > > > > > > > Web Service Interface: > > > > public interface TestServiceInterface { > > > > public void testMethod(MyInterface param); > > > > } > > > > > > > > Parameter Interface: > > > > public interface MyInterface{ > > > > String getText(); > > > > void setText(String t); > > > > } > > > > > > > > > > > > Parameter concrete class: > > > > public class MyClass implements MyInterface { > > > > private String text; > > > > > > > > public String getText() { > > > > return text; > > > > } > > > > > > > > public void setText(String t) { > > > > this.text = t; > > > > } > > > > } > > > > > > > > Client: > > > > Service service = Service.create(SERVICE_NAME); > > > > service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, > > ENDPOINT_ADDRESS); > > > > TestServiceInterface serviceInterface = > > service.getPort(TestServiceInterface.class); > > > > serviceInterface. testMethod(new MyClass()); > > > > > > > > > > > >
RE: Does CXF Support Interfaces as Web Params?
Yes, I've used JAXB with interfaces and its painful but does work. However, it appears from the code in JAXBUtils that CXF explicitly excludes interfaces even if they are annotated to be properly marshaled by JAXB (as per https://jaxb.dev.java.net/guide/Mapping_interfaces.html) -Original Message- From: jim ma [mailto:[EMAIL PROTECTED] Sent: Tuesday, February 26, 2008 9:18 PM To: cxf-user@incubator.apache.org Subject: Re: Does CXF Support Interfaces as Web Params? Kohsuke Kawaguchi's blog talked about this , you can get some information from this link: http://weblogs.java.net/blog/kohsuke/archive/2006/06/jaxb_and_interf.html On Wed, Feb 27, 2008 at 9:25 AM, Glen Mazza <[EMAIL PROTECTED]> wrote: > I think the answer is "no", neither CXF nor GlassFish Metro support > interfaces as parameters. It's either a JAX-WS or JAXB rule, I'm not > certain. > > Glen > > Am Dienstag, den 26.02.2008, 15:07 -0800 schrieb Ayush Gupta: > > In my web service, there is a method which takes an interface as its > > parameter, instead of a concrete class. Reference code is at the bottom > of > > this email. > > > > > > > > When I run the client, I get an exception "Caused by: > > javax.xml.bind.JAXBException: com.passenger.test.ComplexObjectInterfaceis > > not known to this context". Further investigation and digging through > the > > CXF code bought me to JAXBUtils. getValidClass(Class cls) which is > called > > while building the JAXBContext. The code in JAXBUtils. getValidClass > > explicitly excludes inclusion of any interfaces! I also tried setting > the > > XmlJavaTypeAdapter on the interface but that didn't work. > > > > > > > > So, does CXF Support Interfaces as Web Params? I'd appreciate anyone > > throwing some light on this! > > > > > > > > Thanks > > > > -ayush > > > > > > > > > > > > Web Service Interface: > > > > public interface TestServiceInterface { > > > > public void testMethod(MyInterface param); > > > > } > > > > > > > > Parameter Interface: > > > > public interface MyInterface{ > > > > String getText(); > > > > void setText(String t); > > > > } > > > > > > > > > > > > Parameter concrete class: > > > > public class MyClass implements MyInterface { > > > > private String text; > > > > > > > > public String getText() { > > > > return text; > > > > } > > > > > > > > public void setText(String t) { > > > > this.text = t; > > > > } > > > > } > > > > > > > > Client: > > > > Service service = Service.create(SERVICE_NAME); > > > > service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, > > ENDPOINT_ADDRESS); > > > > TestServiceInterface serviceInterface = > > service.getPort(TestServiceInterface.class); > > > > serviceInterface. testMethod(new MyClass()); > > > > > > > > > > > >
Re: Does CXF Support Interfaces as Web Params?
On Wednesday 27 February 2008, Ayush Gupta wrote: > Yes, I've used JAXB with interfaces and its painful but does work. > > However, it appears from the code in JAXBUtils that CXF explicitly > excludes interfaces even if they are annotated to be properly > marshaled by JAXB (as per > https://jaxb.dev.java.net/guide/Mapping_interfaces.html) Fixable I'll try to get that fixed tomorrow. :-) Dan > > -Original Message- > From: jim ma [mailto:[EMAIL PROTECTED] > Sent: Tuesday, February 26, 2008 9:18 PM > To: cxf-user@incubator.apache.org > Subject: Re: Does CXF Support Interfaces as Web Params? > > Kohsuke Kawaguchi's blog talked about this , you can get some > information from > this link: > http://weblogs.java.net/blog/kohsuke/archive/2006/06/jaxb_and_interf.h >tml > > On Wed, Feb 27, 2008 at 9:25 AM, Glen Mazza <[EMAIL PROTECTED]> wrote: > > I think the answer is "no", neither CXF nor GlassFish Metro support > > interfaces as parameters. It's either a JAX-WS or JAXB rule, I'm > > not certain. > > > > Glen > > > > Am Dienstag, den 26.02.2008, 15:07 -0800 schrieb Ayush Gupta: > > > In my web service, there is a method which takes an interface as > > > its parameter, instead of a concrete class. Reference code is at > > > the bottom > > > > of > > > > > this email. > > > > > > > > > > > > When I run the client, I get an exception "Caused by: > > > javax.xml.bind.JAXBException: > > com.passenger.test.ComplexObjectInterfaceis > > > > not known to this context". Further investigation and digging > > > through > > > > the > > > > > CXF code bought me to JAXBUtils. getValidClass(Class cls) which > > > is > > > > called > > > > > while building the JAXBContext. The code in JAXBUtils. > > > getValidClass explicitly excludes inclusion of any interfaces! I > > > also tried setting > > > > the > > > > > XmlJavaTypeAdapter on the interface but that didn't work. > > > > > > > > > > > > So, does CXF Support Interfaces as Web Params? I'd appreciate > > > anyone throwing some light on this! > > > > > > > > > > > > Thanks > > > > > > -ayush > > > > > > > > > > > > > > > > > > Web Service Interface: > > > > > > public interface TestServiceInterface { > > > > > > public void testMethod(MyInterface param); > > > > > > } > > > > > > > > > > > > Parameter Interface: > > > > > > public interface MyInterface{ > > > > > > String getText(); > > > > > > void setText(String t); > > > > > > } > > > > > > > > > > > > > > > > > > Parameter concrete class: > > > > > > public class MyClass implements MyInterface { > > > > > > private String text; > > > > > > > > > > > > public String getText() { > > > > > > return text; > > > > > > } > > > > > > > > > > > > public void setText(String t) { > > > > > > this.text = t; > > > > > > } > > > > > > } > > > > > > > > > > > > Client: > > > > > > Service service = Service.create(SERVICE_NAME); > > > > > > service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, > > > ENDPOINT_ADDRESS); > > > > > > TestServiceInterface serviceInterface = > > > service.getPort(TestServiceInterface.class); > > > > > > serviceInterface. testMethod(new MyClass()); -- J. Daniel Kulp Principal Engineer, IONA [EMAIL PROTECTED] http://www.dankulp.com/blog
Re: Does CXF Support Interfaces as Web Params?
On Wednesday 27 February 2008, Ayush Gupta wrote: > Yes, I've used JAXB with interfaces and its painful but does work. > > However, it appears from the code in JAXBUtils that CXF explicitly > excludes interfaces even if they are annotated to be properly > marshaled by JAXB (as per > https://jaxb.dev.java.net/guide/Mapping_interfaces.html) Actually, that code IS correct. I've been experimenting with this quite a bit tonight and JAXB will barf if you try to create a context with any class that is an interface, even if the interface has the XmlJavaTypeAdapter annotation on it and such. Thus, that code is correct. However, this also means that you cannot use interfaces for "top level" things, only for stuff within actual concrete beans. That said, I was pleasantly suprised when I wrote my test case that the test actually worked with whats on the trunk today PROVIDING you have a valid version of asm jar available AND you use wrapped doc/lit. With the work I did two weeks ago, in the wrapped doc/lit case, it will use ASM to buildup concrete beans in memory and the interface params get put over just fine and they work. (This is on the 2.1 line only. Way to complex to port back to 2.0.x.) If you AREN'T using wrapped doc/lit or you don't have an asm jar available, then there are issues. We have to drop down to JAXB proprietary API's and types to get them to work. That's not going to be easy and due to the extra book keeping, is going to be a performance issue.In general, I strongly suggest the wrapped doc/lit with asm. In anycase, I'm adding a sample of this to the java_first_jaxws sample to kind of show it working. I'll start a new snapshot deploy before I head to bed tonight so the 2.1 snapshots in the morning should have it. I'd really appreciate it if folks could look at it and let me know how to improve the sample to show some more of these complex scenarios. I do admit most of our samples are very basic. This should be a step in the right direction for providing something a bit more complex. Dan > > > -Original Message- > From: jim ma [mailto:[EMAIL PROTECTED] > Sent: Tuesday, February 26, 2008 9:18 PM > To: cxf-user@incubator.apache.org > Subject: Re: Does CXF Support Interfaces as Web Params? > > Kohsuke Kawaguchi's blog talked about this , you can get some > information from > this link: > http://weblogs.java.net/blog/kohsuke/archive/2006/06/jaxb_and_interf.h >tml > > On Wed, Feb 27, 2008 at 9:25 AM, Glen Mazza <[EMAIL PROTECTED]> wrote: > > I think the answer is "no", neither CXF nor GlassFish Metro support > > interfaces as parameters. It's either a JAX-WS or JAXB rule, I'm > > not certain. > > > > Glen > > > > Am Dienstag, den 26.02.2008, 15:07 -0800 schrieb Ayush Gupta: > > > In my web service, there is a method which takes an interface as > > > its parameter, instead of a concrete class. Reference code is at > > > the bottom > > > > of > > > > > this email. > > > > > > > > > > > > When I run the client, I get an exception "Caused by: > > > javax.xml.bind.JAXBException: > > com.passenger.test.ComplexObjectInterfaceis > > > > not known to this context". Further investigation and digging > > > through > > > > the > > > > > CXF code bought me to JAXBUtils. getValidClass(Class cls) which > > > is > > > > called > > > > > while building the JAXBContext. The code in JAXBUtils. > > > getValidClass explicitly excludes inclusion of any interfaces! I > > > also tried setting > > > > the > > > > > XmlJavaTypeAdapter on the interface but that didn't work. > > > > > > > > > > > > So, does CXF Support Interfaces as Web Params? I'd appreciate > > > anyone throwing some light on this! > > > > > > > > > > > > Thanks > > > > > > -ayush > > > > > > > > > > > > > > > > > > Web Service Interface: > > > > > > public interface TestServiceInterface { > > > > > > public void testMethod(MyInterface param); > > > > > > } > > > > > > > > > > > > Parameter Interface: > > > > > > public interface MyInterface{ > > > > > > String getText(); > > > > > > void setText(String t); > > > > > > } > > > > > > > > > > > > > > > > > > Parameter concrete class: > > > > > > public class MyClass implements MyInterface { > > > > > > private String text; > > > > > > > > > > > > public String getText() { > > > > > > return text; > > > > > > } > > > > > > > > > > > > public void setText(String t) { > > > > > > this.text = t; > > > > > > } > > > > > > } > > > > > > > > > > > > Client: > > > > > > Service service = Service.create(SERVICE_NAME); > > > > > > service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, > > > ENDPOINT_ADDRESS); > > > > > > TestServiceInterface serviceInterface = > > > service.getPort(TestServiceInterface.class); > > > > > > serviceInterface. testMethod(new MyClass()); -- J. Daniel Kulp Principal Engineer, IONA [EMAIL PROTECTED] http://www.dankulp.com/blog
Re: Does CXF Support Interfaces as Web Params?
Aegis has interface support. You can specify a map from Class to class name that maps interface classes to proxy class names, and it will create objects of the proxy types. On Wed, Feb 27, 2008 at 10:15 PM, Daniel Kulp <[EMAIL PROTECTED]> wrote: > On Wednesday 27 February 2008, Ayush Gupta wrote: > > Yes, I've used JAXB with interfaces and its painful but does work. > > > > However, it appears from the code in JAXBUtils that CXF explicitly > > excludes interfaces even if they are annotated to be properly > > marshaled by JAXB (as per > > https://jaxb.dev.java.net/guide/Mapping_interfaces.html) > > Actually, that code IS correct. I've been experimenting with this quite > a bit tonight and JAXB will barf if you try to create a context with any > class that is an interface, even if the interface has the > XmlJavaTypeAdapter annotation on it and such. Thus, that code is > correct. However, this also means that you cannot use interfaces > for "top level" things, only for stuff within actual concrete beans. > > That said, I was pleasantly suprised when I wrote my test case that the > test actually worked with whats on the trunk today PROVIDING you have a > valid version of asm jar available AND you use wrapped doc/lit. With > the work I did two weeks ago, in the wrapped doc/lit case, it will use > ASM to buildup concrete beans in memory and the interface params get put > over just fine and they work. (This is on the 2.1 line only. Way to > complex to port back to 2.0.x.) > > If you AREN'T using wrapped doc/lit or you don't have an asm jar > available, then there are issues. We have to drop down to JAXB > proprietary API's and types to get them to work. That's not going to > be easy and due to the extra book keeping, is going to be a performance > issue.In general, I strongly suggest the wrapped doc/lit with asm. > > In anycase, I'm adding a sample of this to the java_first_jaxws sample to > kind of show it working. I'll start a new snapshot deploy before I > head to bed tonight so the 2.1 snapshots in the morning should have it. > I'd really appreciate it if folks could look at it and let me know how > to improve the sample to show some more of these complex scenarios. I > do admit most of our samples are very basic. This should be a step in > the right direction for providing something a bit more complex. > > Dan > > > > > > > > -Original Message- > > From: jim ma [mailto:[EMAIL PROTECTED] > > Sent: Tuesday, February 26, 2008 9:18 PM > > To: cxf-user@incubator.apache.org > > Subject: Re: Does CXF Support Interfaces as Web Params? > > > > Kohsuke Kawaguchi's blog talked about this , you can get some > > information from > > this link: > > http://weblogs.java.net/blog/kohsuke/archive/2006/06/jaxb_and_interf.h > >tml > > > > On Wed, Feb 27, 2008 at 9:25 AM, Glen Mazza <[EMAIL PROTECTED]> > wrote: > > > I think the answer is "no", neither CXF nor GlassFish Metro support > > > interfaces as parameters. It's either a JAX-WS or JAXB rule, I'm > > > not certain. > > > > > > Glen > > > > > > Am Dienstag, den 26.02.2008, 15:07 -0800 schrieb Ayush Gupta: > > > > In my web service, there is a method which takes an interface as > > > > its parameter, instead of a concrete class. Reference code is at > > > > the bottom > > > > > > of > > > > > > > this email. > > > > > > > > > > > > > > > > When I run the client, I get an exception "Caused by: > > > > javax.xml.bind.JAXBException: > > > > com.passenger.test.ComplexObjectInterfaceis > > > > > > not known to this context". Further investigation and digging > > > > through > > > > > > the > > > > > > > CXF code bought me to JAXBUtils. getValidClass(Class cls) which > > > > is > > > > > > called > > > > > > > while building the JAXBContext. The code in JAXBUtils. > > > > getValidClass explicitly excludes inclusion of any interfaces! I > > > > also tried setting > > > > > > the > > > > > > > XmlJavaTypeAdapter on the interface but that didn't work. > > > > > > > > > > > > > > > > So, does CXF Support Interfaces as Web Params? I'd appreciate > > > > anyone throwing some light on this! > > > > > > > > > > > > > > > &