Re: Does CXF Support Interfaces as Web Params?

2008-02-29 Thread Benson Margulies
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!
   
   
   
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

RE: Does CXF Support Interfaces as Web Params?

2008-02-27 Thread Ayush Gupta
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?

2008-02-27 Thread Daniel Kulp
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?

2008-02-27 Thread Daniel Kulp
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


Does CXF Support Interfaces as Web Params?

2008-02-26 Thread 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?

2008-02-26 Thread Glen Mazza
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?

2008-02-26 Thread jim ma
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());