Re: How to pass a HashMap

2008-02-25 Thread Li, Weiye
Should be the latest one:2.0.4
Thanks for the reply.


On 2/23/08 11:49 AM, Benson Margulies [EMAIL PROTECTED] wrote:

What version of CXF have you got?


On Fri, Feb 22, 2008 at 4:39 PM, Li, Weiye [EMAIL PROTECTED] wrote:

 The CXF document says that Aegis data binding can even works on Map. I
 tried this, but it always return an empty one. Here's my testing codes. Did
 I miss something? Or I need to write special config file?




 @WebService(name=EmicroManager, targetNamespace=http://test.emicro )
 @SOAPBinding(style=Style.RPC, use=Use.LITERAL, parameterStyle=
 ParameterStyle.WRAPPED)
 public interface EmicroService {
  @WebMethod
  @RequestWrapper(className=test.model.Employee,
  localName=employee, targetNamespace=
 http://test.emicro/types )
  @Oneway
  public void addEmployee(Employee emp);


  @WebMethod(operationName=getEmployeesAsMap)
  @ResponseWrapper(className=java.util.HashMap,
  localName=EmployeesMap, targetNamespace=
 http://test.emicro/types;)
  public Map getEmployeesMap();

 }





 public static void main(String args[]) throws Exception {

  JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

  factory.setServiceClass(test.EmicroService.class);

  factory.setAddress(http://localhost:9080/emicro-ws/EmicroService;);

  factory.getServiceFactory().setDataBinding(new AegisDatabinding());



  EmicroService client = (EmicroService)factory.create();



// add 2 employees here, then



MapInteger, Employee emap = client.getEmployeesMap();

logger.info(emap);



System.exit(0);

}



 The backend configuration is just following the CXF tutorial
 bean id=aegisBean class=
 org.apache.cxf.aegis.databinding.AegisDatabinding scope=prototype/



  bean id=jaxws-and-aegis-service-factory

class=org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean
 scope=prototype

property name=dataBinding ref=aegisBean /

property name=serviceConfigurations

  list

bean class=
 org.apache.cxf.jaxws.support.JaxWsServiceConfiguration /

bean class=
 org.apache.cxf.aegis.databinding.AegisServiceConfiguration /

bean class=
 org.apache.cxf.service.factory.DefaultServiceConfiguration /

  /list

/property

  /bean





  bean id=emicro class=org.stjude.ri.emicro.ws.EmicroServiceImpl
 /



  jaxws:endpoint id=helloWorld implementor=#emicro
 address=/EmicroService

jaxws:serviceFactory

  ref bean='jaxws-and-aegis-service-factory' /

/jaxws:serviceFactory

  /jaxws:endpoint





 Any advice? Thanks








Re: How to pass a HashMap

2008-02-25 Thread Benson Margulies
Please try my suggestion of declaring MapType,Type in your SEI instead of
just 'map'.


On Mon, Feb 25, 2008 at 10:04 AM, Li, Weiye [EMAIL PROTECTED] wrote:

 Should be the latest one:2.0.4
 Thanks for the reply.


 On 2/23/08 11:49 AM, Benson Margulies [EMAIL PROTECTED] wrote:

 What version of CXF have you got?


 On Fri, Feb 22, 2008 at 4:39 PM, Li, Weiye [EMAIL PROTECTED] wrote:

  The CXF document says that Aegis data binding can even works on Map. I
  tried this, but it always return an empty one. Here's my testing codes.
 Did
  I miss something? Or I need to write special config file?
 
 
 
 
  @WebService(name=EmicroManager, targetNamespace=http://test.emicro )
  @SOAPBinding(style=Style.RPC, use=Use.LITERAL, parameterStyle=
  ParameterStyle.WRAPPED)
  public interface EmicroService {
   @WebMethod
   @RequestWrapper(className=test.model.Employee,
   localName=employee, targetNamespace=
  http://test.emicro/types )
   @Oneway
   public void addEmployee(Employee emp);
 
 
   @WebMethod(operationName=getEmployeesAsMap)
   @ResponseWrapper(className=java.util.HashMap,
   localName=EmployeesMap, targetNamespace=
  http://test.emicro/types;)
   public Map getEmployeesMap();
 
  }
 
 
 
 
 
  public static void main(String args[]) throws Exception {
 
   JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
 
   factory.setServiceClass(test.EmicroService.class);
 
   factory.setAddress(http://localhost:9080/emicro-ws/EmicroService
 );
 
   factory.getServiceFactory().setDataBinding(new AegisDatabinding());
 
 
 
   EmicroService client = (EmicroService)factory.create();
 
 
 
 // add 2 employees here, then
 
 
 
 MapInteger, Employee emap = client.getEmployeesMap();
 
 logger.info(emap);
 
 
 
 System.exit(0);
 
 }
 
 
 
  The backend configuration is just following the CXF tutorial
  bean id=aegisBean class=
  org.apache.cxf.aegis.databinding.AegisDatabinding scope=prototype/
 
 
 
   bean id=jaxws-and-aegis-service-factory
 
 class=org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean
  scope=prototype
 
 property name=dataBinding ref=aegisBean /
 
 property name=serviceConfigurations
 
   list
 
 bean class=
  org.apache.cxf.jaxws.support.JaxWsServiceConfiguration /
 
 bean class=
  org.apache.cxf.aegis.databinding.AegisServiceConfiguration /
 
 bean class=
  org.apache.cxf.service.factory.DefaultServiceConfiguration /
 
   /list
 
 /property
 
   /bean
 
 
 
 
 
   bean id=emicro class=org.stjude.ri.emicro.ws.EmicroServiceImpl
  /
 
 
 
   jaxws:endpoint id=helloWorld implementor=#emicro
  address=/EmicroService
 
 jaxws:serviceFactory
 
   ref bean='jaxws-and-aegis-service-factory' /
 
 /jaxws:serviceFactory
 
   /jaxws:endpoint
 
 
 
 
 
  Any advice? Thanks
 
 
 






Re: How to pass a HashMap

2008-02-25 Thread Li, Weiye
I think I may have to declare .aegis.xml.
It was my 2nd try (I mean, use Map only). I did use MapInteger, Employee on 
my first try and the outcome is the same: empty map returned.

On 2/24/08 12:09 PM, Benson Margulies [EMAIL PROTECTED] wrote:

It does work. But you have to tell it what's in the map. Either declare the
type as

MapA,B, or use a .aegis.xml file to tell it.

 
 
 
  @WebService(name=EmicroManager, targetNamespace=http://test.emicro )
  @SOAPBinding(style=Style.RPC, use=Use.LITERAL, parameterStyle=
  ParameterStyle.WRAPPED)
  public interface EmicroService {
   @WebMethod
   @RequestWrapper(className=test.model.Employee,
   localName=employee, targetNamespace=
  http://test.emicro/types )
   @Oneway
   public void addEmployee(Employee emp);
 
 
   @WebMethod(operationName=getEmployeesAsMap)
   @ResponseWrapper(className=java.util.HashMap,
   localName=EmployeesMap, targetNamespace=
  http://test.emicro/types;)
   public Map getEmployeesMap();
 



Re: How to pass a HashMap

2008-02-25 Thread Daniel Kulp

On Monday 25 February 2008, Benson Margulies wrote:
 The use of HashMap as a JAX-WS wrapper type may be a problem. Let me
 try the Mapx,y experiment in my testbed.

Uhh  yea.   In general, unless you REALLY know what you are doing, 
for code first, don't put @RequestWrapper and @ResponseWrapper 
annotations. 

Setting the classname in them to something other than a properly 
constructed wrapper type can definitely lead to issues.  In this 
case, if you wanted to use them, you would have to create a bean like:

class GetEmployeesMap {
MapInteger, Employee _return;
getReturn getter
setReturn setter
}

Even then, I'm not sure it would work as I don't know how or if aegis can 
deal with the wrapper types.

So, in summary, don't use them.Unless the code generator has 
specifically put them there (wsdl2java), ignore them.

Dan
  




On Monday 25 February 2008, Benson Margulies wrote:
 The use of HashMap as a JAX-WS wrapper type may be a problem. Let me
 try the Mapx,y experiment in my testbed.

 On Mon, Feb 25, 2008 at 10:29 AM, Li, Weiye [EMAIL PROTECTED] 
wrote:
  I think I may have to declare .aegis.xml.
  It was my 2nd try (I mean, use Map only). I did use MapInteger,
  Employee on my first try and the outcome is the same: empty map
  returned.
 
  On 2/24/08 12:09 PM, Benson Margulies [EMAIL PROTECTED]
  wrote:
 
  It does work. But you have to tell it what's in the map. Either
  declare the
  type as
 
  MapA,B, or use a .aegis.xml file to tell it.
 
@WebService(name=EmicroManager,
targetNamespace=http://test.emicro;)
@SOAPBinding(style=Style.RPC, use=Use.LITERAL, parameterStyle=
ParameterStyle.WRAPPED)
public interface EmicroService {
 @WebMethod
 @RequestWrapper(className=test.model.Employee,
 localName=employee, targetNamespace=
http://test.emicro/types )
 @Oneway
 public void addEmployee(Employee emp);
   
   
 @WebMethod(operationName=getEmployeesAsMap)
 @ResponseWrapper(className=java.util.HashMap,
 localName=EmployeesMap, targetNamespace=
http://test.emicro/types;)
 public Map getEmployeesMap();



-- 
J. Daniel Kulp
Principal Engineer, IONA
[EMAIL PROTECTED]
http://www.dankulp.com/blog


RE: How to pass a HashMap

2008-02-25 Thread Doubleday, Dennis

I reported the same issue in 2.0.3 a while back, and I did have my Map
specified as MapString, String. (It was a service that had previously
worked under XFire.) 

I got no response, so I switched to JAXB and just wrapped the Map inside
a bean.

-Original Message-
From: Benson Margulies [mailto:[EMAIL PROTECTED] 
Sent: Monday, February 25, 2008 10:20 AM
To: cxf-user@incubator.apache.org
Subject: Re: How to pass a HashMap

Please try my suggestion of declaring MapType,Type in your SEI instead
of
just 'map'.


On Mon, Feb 25, 2008 at 10:04 AM, Li, Weiye [EMAIL PROTECTED] wrote:

 Should be the latest one:2.0.4
 Thanks for the reply.


 On 2/23/08 11:49 AM, Benson Margulies [EMAIL PROTECTED] wrote:

 What version of CXF have you got?


 On Fri, Feb 22, 2008 at 4:39 PM, Li, Weiye [EMAIL PROTECTED]
wrote:

  The CXF document says that Aegis data binding can even works on Map.
I
  tried this, but it always return an empty one. Here's my testing
codes.
 Did
  I miss something? Or I need to write special config file?
 
 
 
 
  @WebService(name=EmicroManager,
targetNamespace=http://test.emicro )
  @SOAPBinding(style=Style.RPC, use=Use.LITERAL, parameterStyle=
  ParameterStyle.WRAPPED)
  public interface EmicroService {
   @WebMethod
   @RequestWrapper(className=test.model.Employee,
   localName=employee, targetNamespace=
  http://test.emicro/types )
   @Oneway
   public void addEmployee(Employee emp);
 
 
   @WebMethod(operationName=getEmployeesAsMap)
   @ResponseWrapper(className=java.util.HashMap,
   localName=EmployeesMap, targetNamespace=
  http://test.emicro/types;)
   public Map getEmployeesMap();
 
  }
 
 
 
 
 
  public static void main(String args[]) throws Exception {
 
   JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
 
   factory.setServiceClass(test.EmicroService.class);
 
 
factory.setAddress(http://localhost:9080/emicro-ws/EmicroService
 );
 
   factory.getServiceFactory().setDataBinding(new
AegisDatabinding());
 
 
 
   EmicroService client = (EmicroService)factory.create();
 
 
 
 // add 2 employees here, then
 
 
 
 MapInteger, Employee emap = client.getEmployeesMap();
 
 logger.info(emap);
 
 
 
 System.exit(0);
 
 }
 
 
 
  The backend configuration is just following the CXF tutorial
  bean id=aegisBean class=
  org.apache.cxf.aegis.databinding.AegisDatabinding
scope=prototype/
 
 
 
   bean id=jaxws-and-aegis-service-factory
 
 
class=org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean
  scope=prototype
 
 property name=dataBinding ref=aegisBean /
 
 property name=serviceConfigurations
 
   list
 
 bean class=
  org.apache.cxf.jaxws.support.JaxWsServiceConfiguration /
 
 bean class=
  org.apache.cxf.aegis.databinding.AegisServiceConfiguration /
 
 bean class=
  org.apache.cxf.service.factory.DefaultServiceConfiguration /
 
   /list
 
 /property
 
   /bean
 
 
 
 
 
   bean id=emicro
class=org.stjude.ri.emicro.ws.EmicroServiceImpl
  /
 
 
 
   jaxws:endpoint id=helloWorld implementor=#emicro
  address=/EmicroService
 
 jaxws:serviceFactory
 
   ref bean='jaxws-and-aegis-service-factory' /
 
 /jaxws:serviceFactory
 
   /jaxws:endpoint
 
 
 
 
 
  Any advice? Thanks
 
 
 






Re: How to pass a HashMap

2008-02-24 Thread Benson Margulies
It does work. But you have to tell it what's in the map. Either declare the
type as

MapA,B, or use a .aegis.xml file to tell it.

On Sat, Feb 23, 2008 at 1:39 PM, Benson Margulies [EMAIL PROTECTED]
wrote:

 I'm fairly sure I see what the problem is here. You need to either declare
 your map with generic args, or use a .aegis.xml file to specify the types.

 On Fri, Feb 22, 2008 at 4:39 PM, Li, Weiye [EMAIL PROTECTED] wrote:

  The CXF document says that Aegis data binding can even works on Map. I
  tried this, but it always return an empty one. Here's my testing codes. Did
  I miss something? Or I need to write special config file?
 
 
 
 
  @WebService(name=EmicroManager, targetNamespace=http://test.emicro )
  @SOAPBinding(style=Style.RPC, use=Use.LITERAL, parameterStyle=
  ParameterStyle.WRAPPED)
  public interface EmicroService {
   @WebMethod
   @RequestWrapper(className=test.model.Employee,
   localName=employee, targetNamespace=
  http://test.emicro/types )
   @Oneway
   public void addEmployee(Employee emp);
 
 
   @WebMethod(operationName=getEmployeesAsMap)
   @ResponseWrapper(className=java.util.HashMap,
   localName=EmployeesMap, targetNamespace=
  http://test.emicro/types;)
   public Map getEmployeesMap();
 
  }
 
 
 
 
 
  public static void main(String args[]) throws Exception {
 
   JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
 
   factory.setServiceClass(test.EmicroService.class);
 
   factory.setAddress(http://localhost:9080/emicro-ws/EmicroService
  );
 
   factory.getServiceFactory().setDataBinding(new AegisDatabinding());
 
 
 
   EmicroService client = (EmicroService)factory.create();
 
 
 
 // add 2 employees here, then
 
 
 
 MapInteger, Employee emap = client.getEmployeesMap();
 
 logger.info(emap);
 
 
 
 System.exit(0);
 
 }
 
 
 
  The backend configuration is just following the CXF tutorial
  bean id=aegisBean class=
  org.apache.cxf.aegis.databinding.AegisDatabinding scope=prototype/
 
 
 
   bean id=jaxws-and-aegis-service-factory
 
 class=org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean
  scope=prototype
 
 property name=dataBinding ref=aegisBean /
 
 property name=serviceConfigurations
 
   list
 
 bean class=
  org.apache.cxf.jaxws.support.JaxWsServiceConfiguration /
 
 bean class=
  org.apache.cxf.aegis.databinding.AegisServiceConfiguration /
 
 bean class=
  org.apache.cxf.service.factory.DefaultServiceConfiguration /
 
   /list
 
 /property
 
   /bean
 
 
 
 
 
   bean id=emicro class=org.stjude.ri.emicro.ws.EmicroServiceImpl
  /
 
 
 
   jaxws:endpoint id=helloWorld implementor=#emicro
  address=/EmicroService
 
 jaxws:serviceFactory
 
   ref bean='jaxws-and-aegis-service-factory' /
 
 /jaxws:serviceFactory
 
   /jaxws:endpoint
 
 
 
 
 
  Any advice? Thanks
 
 
 



Re: How to pass a HashMap

2008-02-23 Thread Benson Margulies
What version of CXF have you got?


On Fri, Feb 22, 2008 at 4:39 PM, Li, Weiye [EMAIL PROTECTED] wrote:

 The CXF document says that Aegis data binding can even works on Map. I
 tried this, but it always return an empty one. Here's my testing codes. Did
 I miss something? Or I need to write special config file?




 @WebService(name=EmicroManager, targetNamespace=http://test.emicro )
 @SOAPBinding(style=Style.RPC, use=Use.LITERAL, parameterStyle=
 ParameterStyle.WRAPPED)
 public interface EmicroService {
  @WebMethod
  @RequestWrapper(className=test.model.Employee,
  localName=employee, targetNamespace=
 http://test.emicro/types )
  @Oneway
  public void addEmployee(Employee emp);


  @WebMethod(operationName=getEmployeesAsMap)
  @ResponseWrapper(className=java.util.HashMap,
  localName=EmployeesMap, targetNamespace=
 http://test.emicro/types;)
  public Map getEmployeesMap();

 }





 public static void main(String args[]) throws Exception {

  JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

  factory.setServiceClass(test.EmicroService.class);

  factory.setAddress(http://localhost:9080/emicro-ws/EmicroService;);

  factory.getServiceFactory().setDataBinding(new AegisDatabinding());



  EmicroService client = (EmicroService)factory.create();



// add 2 employees here, then



MapInteger, Employee emap = client.getEmployeesMap();

logger.info(emap);



System.exit(0);

}



 The backend configuration is just following the CXF tutorial
 bean id=aegisBean class=
 org.apache.cxf.aegis.databinding.AegisDatabinding scope=prototype/



  bean id=jaxws-and-aegis-service-factory

class=org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean
 scope=prototype

property name=dataBinding ref=aegisBean /

property name=serviceConfigurations

  list

bean class=
 org.apache.cxf.jaxws.support.JaxWsServiceConfiguration /

bean class=
 org.apache.cxf.aegis.databinding.AegisServiceConfiguration /

bean class=
 org.apache.cxf.service.factory.DefaultServiceConfiguration /

  /list

/property

  /bean





  bean id=emicro class=org.stjude.ri.emicro.ws.EmicroServiceImpl
 /



  jaxws:endpoint id=helloWorld implementor=#emicro
 address=/EmicroService

jaxws:serviceFactory

  ref bean='jaxws-and-aegis-service-factory' /

/jaxws:serviceFactory

  /jaxws:endpoint





 Any advice? Thanks





Re: How to pass a HashMap

2008-02-23 Thread Benson Margulies
I've reproduced this.

On Fri, Feb 22, 2008 at 4:39 PM, Li, Weiye [EMAIL PROTECTED] wrote:

 The CXF document says that Aegis data binding can even works on Map. I
 tried this, but it always return an empty one. Here's my testing codes. Did
 I miss something? Or I need to write special config file?




 @WebService(name=EmicroManager, targetNamespace=http://test.emicro )
 @SOAPBinding(style=Style.RPC, use=Use.LITERAL, parameterStyle=
 ParameterStyle.WRAPPED)
 public interface EmicroService {
  @WebMethod
  @RequestWrapper(className=test.model.Employee,
  localName=employee, targetNamespace=
 http://test.emicro/types )
  @Oneway
  public void addEmployee(Employee emp);


  @WebMethod(operationName=getEmployeesAsMap)
  @ResponseWrapper(className=java.util.HashMap,
  localName=EmployeesMap, targetNamespace=
 http://test.emicro/types;)
  public Map getEmployeesMap();

 }





 public static void main(String args[]) throws Exception {

  JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

  factory.setServiceClass(test.EmicroService.class);

  factory.setAddress(http://localhost:9080/emicro-ws/EmicroService;);

  factory.getServiceFactory().setDataBinding(new AegisDatabinding());



  EmicroService client = (EmicroService)factory.create();



// add 2 employees here, then



MapInteger, Employee emap = client.getEmployeesMap();

logger.info(emap);



System.exit(0);

}



 The backend configuration is just following the CXF tutorial
 bean id=aegisBean class=
 org.apache.cxf.aegis.databinding.AegisDatabinding scope=prototype/



  bean id=jaxws-and-aegis-service-factory

class=org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean
 scope=prototype

property name=dataBinding ref=aegisBean /

property name=serviceConfigurations

  list

bean class=
 org.apache.cxf.jaxws.support.JaxWsServiceConfiguration /

bean class=
 org.apache.cxf.aegis.databinding.AegisServiceConfiguration /

bean class=
 org.apache.cxf.service.factory.DefaultServiceConfiguration /

  /list

/property

  /bean





  bean id=emicro class=org.stjude.ri.emicro.ws.EmicroServiceImpl
 /



  jaxws:endpoint id=helloWorld implementor=#emicro
 address=/EmicroService

jaxws:serviceFactory

  ref bean='jaxws-and-aegis-service-factory' /

/jaxws:serviceFactory

  /jaxws:endpoint





 Any advice? Thanks





Re: How to pass a HashMap

2008-02-23 Thread Benson Margulies
This is now CXF-1451. Please comment there, but mostly stand by whilst I try
to make some sense of it.

On Sat, Feb 23, 2008 at 1:11 PM, Benson Margulies [EMAIL PROTECTED]
wrote:

 I've reproduced this.

 On Fri, Feb 22, 2008 at 4:39 PM, Li, Weiye [EMAIL PROTECTED] wrote:

  The CXF document says that Aegis data binding can even works on Map. I
  tried this, but it always return an empty one. Here's my testing codes. Did
  I miss something? Or I need to write special config file?
 
 
 
 
  @WebService(name=EmicroManager, targetNamespace=http://test.emicro )
  @SOAPBinding(style=Style.RPC, use=Use.LITERAL, parameterStyle=
  ParameterStyle.WRAPPED)
  public interface EmicroService {
   @WebMethod
   @RequestWrapper(className=test.model.Employee,
   localName=employee, targetNamespace=
  http://test.emicro/types )
   @Oneway
   public void addEmployee(Employee emp);
 
 
   @WebMethod(operationName=getEmployeesAsMap)
   @ResponseWrapper(className=java.util.HashMap,
   localName=EmployeesMap, targetNamespace=
  http://test.emicro/types;)
   public Map getEmployeesMap();
 
  }
 
 
 
 
 
  public static void main(String args[]) throws Exception {
 
   JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
 
   factory.setServiceClass(test.EmicroService.class);
 
   factory.setAddress(http://localhost:9080/emicro-ws/EmicroService
  );
 
   factory.getServiceFactory().setDataBinding(new AegisDatabinding());
 
 
 
   EmicroService client = (EmicroService)factory.create();
 
 
 
 // add 2 employees here, then
 
 
 
 MapInteger, Employee emap = client.getEmployeesMap();
 
 logger.info(emap);
 
 
 
 System.exit(0);
 
 }
 
 
 
  The backend configuration is just following the CXF tutorial
  bean id=aegisBean class=
  org.apache.cxf.aegis.databinding.AegisDatabinding scope=prototype/
 
 
 
   bean id=jaxws-and-aegis-service-factory
 
 class=org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean
  scope=prototype
 
 property name=dataBinding ref=aegisBean /
 
 property name=serviceConfigurations
 
   list
 
 bean class=
  org.apache.cxf.jaxws.support.JaxWsServiceConfiguration /
 
 bean class=
  org.apache.cxf.aegis.databinding.AegisServiceConfiguration /
 
 bean class=
  org.apache.cxf.service.factory.DefaultServiceConfiguration /
 
   /list
 
 /property
 
   /bean
 
 
 
 
 
   bean id=emicro class=org.stjude.ri.emicro.ws.EmicroServiceImpl
  /
 
 
 
   jaxws:endpoint id=helloWorld implementor=#emicro
  address=/EmicroService
 
 jaxws:serviceFactory
 
   ref bean='jaxws-and-aegis-service-factory' /
 
 /jaxws:serviceFactory
 
   /jaxws:endpoint
 
 
 
 
 
  Any advice? Thanks
 
 
 



Re: How to pass a HashMap

2008-02-23 Thread Benson Margulies
I'm fairly sure I see what the problem is here. You need to either declare
your map with generic args, or use a .aegis.xml file to specify the types.

On Fri, Feb 22, 2008 at 4:39 PM, Li, Weiye [EMAIL PROTECTED] wrote:

 The CXF document says that Aegis data binding can even works on Map. I
 tried this, but it always return an empty one. Here's my testing codes. Did
 I miss something? Or I need to write special config file?




 @WebService(name=EmicroManager, targetNamespace=http://test.emicro )
 @SOAPBinding(style=Style.RPC, use=Use.LITERAL, parameterStyle=
 ParameterStyle.WRAPPED)
 public interface EmicroService {
  @WebMethod
  @RequestWrapper(className=test.model.Employee,
  localName=employee, targetNamespace=
 http://test.emicro/types )
  @Oneway
  public void addEmployee(Employee emp);


  @WebMethod(operationName=getEmployeesAsMap)
  @ResponseWrapper(className=java.util.HashMap,
  localName=EmployeesMap, targetNamespace=
 http://test.emicro/types;)
  public Map getEmployeesMap();

 }





 public static void main(String args[]) throws Exception {

  JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

  factory.setServiceClass(test.EmicroService.class);

  factory.setAddress(http://localhost:9080/emicro-ws/EmicroService;);

  factory.getServiceFactory().setDataBinding(new AegisDatabinding());



  EmicroService client = (EmicroService)factory.create();



// add 2 employees here, then



MapInteger, Employee emap = client.getEmployeesMap();

logger.info(emap);



System.exit(0);

}



 The backend configuration is just following the CXF tutorial
 bean id=aegisBean class=
 org.apache.cxf.aegis.databinding.AegisDatabinding scope=prototype/



  bean id=jaxws-and-aegis-service-factory

class=org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean
 scope=prototype

property name=dataBinding ref=aegisBean /

property name=serviceConfigurations

  list

bean class=
 org.apache.cxf.jaxws.support.JaxWsServiceConfiguration /

bean class=
 org.apache.cxf.aegis.databinding.AegisServiceConfiguration /

bean class=
 org.apache.cxf.service.factory.DefaultServiceConfiguration /

  /list

/property

  /bean





  bean id=emicro class=org.stjude.ri.emicro.ws.EmicroServiceImpl
 /



  jaxws:endpoint id=helloWorld implementor=#emicro
 address=/EmicroService

jaxws:serviceFactory

  ref bean='jaxws-and-aegis-service-factory' /

/jaxws:serviceFactory

  /jaxws:endpoint





 Any advice? Thanks