According to XFire Aegis docs (CXF doesn't contain the info yet, just a
reference to it) if you are using Java 5 & Generics you shouldn't need
.aegis.xml mapping files (only required for jdk1.4, but it may only apply to
Collections section of doc)

Does this not apply to java.util.Map? In other words do you need an
.aegis.xml for handling Map?
I tried it but it didn't seem to be reading the aegis Mapping file. It was
in the same location as the Interface containing the attribute of type
java.util.Map.

Any Ideas?
Thanks
Michael


bmargulies wrote:
> 
> Right, indeed, Aegis does \something/, and any other kit will consume
> the resulting XML Schema, we hope. But this only helps if you are
> willing to supplement or replace all your @'s with .aegis.xml files.
> 
>> -----Original Message-----
>> From: kayteeem [mailto:[EMAIL PROTECTED]
>> Sent: Tuesday, September 18, 2007 8:41 PM
>> To: cxf-user@incubator.apache.org
>> Subject: RE: Map contains no data when returned from remote call -
> Aegis
>> databinding - empty Map?
>> 
>> 
>> Thanks for the reply.
>> 
>> Yes JaxB definitely has issues with returning java.util.Map type.
>> According to the Aegis databinding docs:
>> it supports Maps, but doesn't seem to be working.
>> 
>> "Aegis Supported Types"
>> 
>>      * Basic types: int, double, float, long, byte[], short, String,
>> BigDecimal
>>      * Arrays
>>      * Collections - including Maps
>>      * Dates: java.util.Date, java.util.Calendar, java.sql.Timestamp,
>>      java.sql.Date, java.sql.Time
>>      * XML: org.w3c.dom.Docmument, org.jdom.Element, XMLStreamReader,
>>      Source
>>      * Complex types which are aggregations of the above
>> 
>>      Ref: http://cwiki.apache.org/CXF20DOC/aegis-databinding.html
>> 
>> bmargulies wrote:
>> >
>> > There is a complex question about how a Map can be represented in
> XML
>> > Schema. As I recall, in JAXB, the rather complex annotation for the
>> > purpose is only in 2.1, which CXF doesn't do yet. We switched from a
> Map
>> > to an explicit data structure to get around this.
>> >
>> >> -----Original Message-----
>> >> From: kayteeem [mailto:[EMAIL PROTECTED]
>> >> Sent: Tuesday, September 18, 2007 8:11 PM
>> >> To: cxf-user@incubator.apache.org
>> >> Subject: Re: Map contains no data when returned from remote call -
>> > Aegis
>> >> databinding - empty Map?
>> >>
>> >>
>> >> Searching through the forum, it seems that no-one else seems to
> have
>> >> issues
>> >> with returning java.util.Map.
>> >> Is this true? Is anyone returning a Map from CXF with no issues?
>> >>
>> >> I think this is a known issue with BEA Weblogic 9.2 then, from
> there
>> > web
>> >> site:
>> >>
>> >> "Weblogic Workshop 8.1 supported returning the java.util.Map type
> from
>> > Web
>> >> Service operations. The runtime provided a Workshop specific
>> > serialization
>> >> of the Map to and from XML. The schema for that serialization was
>> > included
>> >> in the WSDL for the Web Service.
>> >>
>> >> In WebLogic Server 9.2, the java.util.Map type can no longer be
>> > returned
>> >> from Web Service operations.
>> >> Workaround or Solution:
>> >> Provide an application-defined type that supports the key/value
>> > features
>> >> provided by java.util.Map. That type must conform to JAX/RPC
>> > Java<->XML
>> >> Serialization rules. If the application-type is going to contain
>> >> subclasses
>> >> of type key or value type, then the weblogic.jws.Types annotation
> must
>> > be
>> >> used to specify the types that could be contained at runtime.
> WebLogic
>> > Web
>> >> Services (and their clients) that previously returned a
> java.util.Map
>> > will
>> >> have to be manually updated to use this new application-defined
> type.
>> >> "
>> >> Ref:
>> >
> http://e-docs.bea.com/wls/docs92/issues/known_resolved.html#wp1118161
>> >>
>> >> Thanks Michael
>> >>
>> >>
>> >> kayteeem wrote:
>> >> >
>> >> > Hi all,
>> >> >
>> >> > I cant return a simple java.util.Map from a Remote Service call.
> The
>> >> > implementation class on the remote end is java.util.HashMap.
>> >> > Once the data is returned on the caller, the Map contains data in
>> > the
>> >> SOAP
>> >> > message (included below for String->String Map, and
>> > String->AccountBO
>> >> > also), but once unmarshalled into a Java object, it has a size =
> 0
>> > (No
>> >> > entries in the Map).
>> >> >
>> >> > I must have missed some simple configuration of some sort, since
> I
>> > have
>> >> > switched the databinding to Aegis, and according to Aegis
>> > documentation
>> >> it
>> >> > supports Maps.
>> >> > Any Help would be much appreciated.
>> >> >
>> >> > "Aegis Supported Types"
>> >> >
>> >> >     * Basic types: int, double, float, long, byte[], short,
> String,
>> >> > BigDecimal
>> >> >     * Arrays
>> >> >     * Collections - including Maps
>> >> >     * Dates: java.util.Date, java.util.Calendar,
> java.sql.Timestamp,
>> >> > java.sql.Date, java.sql.Time
>> >> >     * XML: org.w3c.dom.Docmument, org.jdom.Element,
> XMLStreamReader,
>> >> > Source
>> >> >     * Complex types which are aggregations of the above
>> >> >
>> >> > Ref: http://cwiki.apache.org/CXF20DOC/aegis-databinding.html
>> >> >
>> >> > Calling any of the Service methods below that return Map always
> seem
>> > to
>> >> be
>> >> > unmarshalled into an empty java object, even though I can see the
>> > data
>> >> > inside the SOAP message once returned on the calling/requestor
> side.
>> >> >
>> >> > In the returned SOAP message why does it contain a reference to
> the
>> >> > Complex object(AccountBO) eg)
>> >> [EMAIL PROTECTED]
>> >> > and not the marshalled data into XML. If I returned a
> java.util.List
>> > it
>> >> > marshalls the values inside AccountBO into XML data containing
> the
>> >> values
>> >> > inside each AccountBO object.
>> >> >
>> >> > Details of the implementation:
>> >> > CXF 2.0.1
>> >> > Spring 2.0.4
>> >> > Weblogic BEA 9.2 AppServer
>> >> > JDK 1.5 using Generics ( I even tried with explicit Aegis Mapping
>> > file
>> >> for
>> >> > JDK1.4, but to no avail.
>> >> > Ref:http://xfire.codehaus.org/Mapping+collections)
>> >> >
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> > // Service Interface: AccountService.java:
>> >> >
>> >> >
>> >> > @WebService
>> >> > public interface AccountService {
>> >> >
>> >> >     /**
>> >> >      * Gets a Map of all the accounts
>> >> >      *
>> >> >      * @return the id of the Map is the accountId, value is the
>> >> > account(AccountBO)
>> >> >      */
>> >> >     @WebMethod
>> >> >     public Map<String, AccountBO> getAccounts();
>> >> >
>> >> >     @WebMethod
>> >> >     public Map<String, String> getMapOfStrings();
>> >> > }
>> >> >
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> > // Service Implementation - AccountServiceImpl .java:
>> >> >
>> >> > @WebService(endpointInterface =
>> >> > "com.axa.demo.ws.shared.service.AccountService")
>> >> > public class AccountServiceImpl implements AccountService,
>> > Serializable
>> >> {
>> >> >
>> >> >     // list of Accounts
>> >> >     Map<String, AccountBO> accounts = new HashMap<String,
>> > AccountBO>();
>> >> >
>> >> >     List<AccountBO> theList = new ArrayList<AccountBO>();
>> >> >
>> >> >     Map<String, String> mapOfStrings = new HashMap<String,
>> > String>();
>> >> >
>> >> >     private static final long serialVersionUID = 1L;
>> >> >
>> >> >     public AccountServiceImpl(){
>> >> >         mapOfStrings.put("One", "Michael");
>> >> >         mapOfStrings.put("Two", "Paul");
>> >> >
>> >> >         AccountBO acct1 = new AccountBO();
>> >> >         acct1.setAccountId("acct_1");
>> >> >
>> >> >         AccountBO acct2 = new AccountBO();
>> >> >         acct2.setAccountId("acct_2");
>> >> >
>> >> >         accounts.put("acct_1", acct1);
>> >> >         accounts.put("acct_2", acct2);
>> >> >
>> >> >     }
>> >> >
>> >> >     public java.util.Map<String, AccountBO> getAccounts() {
>> >> >         return accounts;
>> >> >     }
>> >> >
>> >> >     public Map<String, String> getMapOfStrings(){
>> >> >         return mapOfStrings ;
>> >> >     }
>> >> >
>> >> > }
>> >> >
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> > Spring config Client proxy side
>> >> >
>> >> > <beans xmlns="http://www.springframework.org/schema/beans";
>> >> >     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>> >> >     xmlns:aop="http://www.springframework.org/schema/aop";
>> >> >     xmlns:jaxws="http://cxf.apache.org/jaxws";
>> >> >     xsi:schemaLocation="
>> >> > http://www.springframework.org/schema/beans
>> >> > http://www.springframework.org/schema/beans/spring-beans.xsd
>> >> > http://www.springframework.org/schema/aop
>> >> > http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
>> >> > http://cxf.apache.org/jaxws
>> > http://cxf.apache.org/schemas/jaxws.xsd";>
>> >> >
>> >> >     <import resource="classpath:META-INF/cxf/cxf.xml" />
>> >> >     <import
> resource="classpath:META-INF/cxf/cxf-extension-soap.xml"
>> > />
>> >> >     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
>> >> >
>> >> >     <!-- Aegis data binding
>> >> >     <bean id="aegisDatabinding"
>> >> >
>> >> class="org.apache.cxf.aegis.databinding.AegisDatabinding"/>
>> >> >
>> >> >     <!-- Definition of AccountService client bean -->
>> >> >     <bean id="services.appln.accountClient"
>> >> > class="com.axa.demo.ws.shared.service.AccountService"
>> >> > factory-bean="accountClientFactory" factory-method="create"/>
>> >> >
>> >> >     <bean id="accountClientFactory"
>> >> > class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
>> >> >         <property name="serviceClass"
>> >> > value="com.axa.demo.ws.shared.service.AccountService"/>
>> >> >         <property name="address"
>> >> > value="http://localhost:7001/demoWeb/ws/AccountService"/>
>> >> >         <property name="dataBinding" ref="aegisDatabinding"/>
>> >> >
>> >> >     </bean>
>> >> >
>> >> > </beans>
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> > Spring config Remote Service side
>> >> >
>> >> > <beans xmlns="http://www.springframework.org/schema/beans";
>> >> >     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>> >> >     xmlns:jaxws="http://cxf.apache.org/jaxws";
>> >> >     xsi:schemaLocation="
>> >> > http://www.springframework.org/schema/beans
>> >> > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>> >> > http://cxf.apache.org/jaxws
> http://cxf.apache.org/schemas/jaxws.xsd
>> >> > http://www.springframework.org/schema/aop
>> >> > http://www.springframework.org/schema/aop/spring-aop-2.0.xsd";
>> >> >>
>> >> >
>> >> >     <import resource="classpath:META-INF/cxf/cxf.xml" />
>> >> >     <import
> resource="classpath:META-INF/cxf/cxf-extension-soap.xml"
>> > />
>> >> >     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
>> >> >
>> >> >     <!-- Aegis databinding -->
>> >> >     <bean id="aegisBean"
>> >> > class="org.apache.cxf.aegis.databinding.AegisDatabinding"/>
>> >> >         <bean id='jaxws-and-aegis-service-factory'
>> >> > class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
>> >> >         <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>
>> >> >
>> >> >      <!-- AccountService Implementation -->
>> >> >     <jaxws:endpoint id="accountService"
> address="/AccountService">
>> >> >         <jaxws:implementor>
>> >> >           <bean
>> >> class="com.axa.demo.ws.service.impl.AccountServiceImpl"/>
>> >> >          </jaxws:implementor>
>> >> >
>> >> >          <jaxws:serviceFactory>
>> >> >             <ref bean='jaxws-and-aegis-service-factory' />
>> >> >         </jaxws:serviceFactory>
>> >> >
>> >> >      </jaxws:endpoint>
>> >> >
>> >> >     <!-- The stuff below enables logging of the SOAP messages to
> the
>> >> > console -->
>> >> >     <bean id="logInbound"
>> >> > class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
>> >> >     <bean id="logOutbound"
>> >> > class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
>> >> >     <bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl">
>> >> >         <property name="inInterceptors">
>> >> >             <list>
>> >> >                  <ref bean="logInbound"/>
>> >> >             </list>
>> >> >         </property>
>> >> >         <property name="outInterceptors">
>> >> >             <list>
>> >> >                 <ref bean="logOutbound"/>
>> >> >                 <ref
> bean="interceptor.webservices.out.security"/>
>> >> >             </list>
>> >> >         </property>
>> >> >         <property name="outFaultInterceptors">
>> >> >             <list>
>> >> >                 <ref bean="logOutbound"/>
>> >> >             </list>
>> >> >         </property>
>> >> >     </bean>
>> >> >
>> >> > </beans>
>> >> >
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> > // AccountBO.java
>> >> > public class AccountBO implements Serializable{
>> >> >
>> >> >     /**
>> >> >      *
>> >> >      */
>> >> >     private static final long serialVersionUID =
>> > 273699541584709071L;
>> >> >
>> >> >     private String accountId;
>> >> >     private String accountType;
>> >> >     private int balance = 0;
>> >> >
>> >> >     public String getAccountType() {
>> >> >         return accountType;
>> >> >     }
>> >> >     public void setAccountType(String accountType) {
>> >> >         this.accountType = accountType;
>> >> >     }
>> >> >     public int getBalance() {
>> >> >         return balance;
>> >> >     }
>> >> >     public void setBalance(int balance) {
>> >> >         this.balance = balance;
>> >> >     }
>> >> >     public String getAccountId() {
>> >> >         return accountId;
>> >> >     }
>> >> >     public void setAccountId(String accountId) {
>> >> >         this.accountId = accountId;
>> >> >     }
>> >> >
>> >> > }
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> >
>> >> > SOAP Messages received back from remote call to AccountService
>> >> >  public Map<String, String> getMapOfStrings();
>> >> >
>> >> > INFO: Outbound Message
>> >> > --------------------------------------
>> >> > <soap:Envelope
>> >> > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";><soap:Body
>> >> >><ns1:getMapOfStringsResponse
>> >> xmlns:ns1="http://service.shared.ws.demo.axa.com/";
>> >> >><return><entry
>> >> xmlns="http://impl.service.ws.demo.axa.com/";><key>Two</key><valu
>> >> > e>Paul</value></entry><entry
>> >> > xmlns="http://impl.service.ws.demo.axa.com/";><key>O
>> >> >
>> >>
>> >
> ne</key><value>Michael</value></entry></return></ns1:getMapOfStringsResp
>> > on
>> >> se></s
>> >> > oap:Body></soap:Envelope>
>> >> > --------------------------------------
>> >> > 18/09/2007 14:44:15
> org.apache.cxf.interceptor.LoggingInInterceptor
>> >> > handleMessag
>> >> > e
>> >> > INFO: Inbound Message
>> >> > --------------------------------------
>> >> > <soap:Envelope
>> >> > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";><soap:Body
>> >> >><ns1:getMapOfStringsResponse
>> >> xmlns:ns1="http://service.shared.ws.demo.axa.com/";
>> >> >><return><entry
>> >> xmlns="http://impl.service.ws.demo.axa.com/";><key>Two</key><valu
>> >> > e>Paul</value></entry><entry
>> >> > xmlns="http://impl.service.ws.demo.axa.com/";><key>O
>> >> >
>> >>
>> >
> ne</key><value>Michael</value></entry></return></ns1:getMapOfStringsResp
>> > on
>> >> se></s
>> >> > oap:Body></soap:Envelope>
>> >> > --------------------------------------
>> >> > <18/09/2007 02:44:15 PM EST> <DEBUG> <demoEAR_demoWeb> <pc33326>
>> >> > <AdminServer> <
>> >> >> <demo>
>> >> >>
>> >
> <portlets.coreFramework.remotingAccount.RemotingAccountController.getMa
>> >> > pOfStringsAction(RemotingAccountController.java:121)> - Map Of
>> > Strings
>> >> > size = 0
>> >> >
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> >
>> >>
>> >
> ************************************************************************
>> > **
>> >> ******
>> >> >
>> >> > SOAP Messages received back from remote call to AccountService
>> >> > public Map<String, AccountBO> getAccounts();
>> >> >
>> >> > INFO: Outbound Message
>> >> > --------------------------------------
>> >> > <soap:Envelope
>> >> > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";><soap:Body
>> >> >><ns1:getAccountsResponse
>> >> xmlns:ns1="http://service.shared.ws.demo.axa.com/";><re
>> >> > turn><entry
>> >> >
> xmlns="http://impl.service.ws.demo.axa.com/";><key>acct_2</key><value
>> >> >>[EMAIL PROTECTED]</value></entry><entry
>> >> xmlns="http:/
>> >> >
>> >>
>> >
> /impl.service.ws.demo.axa.com/"><key>acct_1</key><value>com.axa.demo.ws.
>> > sh
>> >> ared.b
>> >> >
>> >>
>> >
> [EMAIL PROTECTED]</value></entry></return></ns1:getAccountsResponse></
>> > so
>> >> ap:Bod
>> >> > y></soap:Envelope>
>> >> > --------------------------------------
>> >> > 18/09/2007 14:50:18
> org.apache.cxf.interceptor.LoggingInInterceptor
>> >> > handleMessag
>> >> > e
>> >> > INFO: Inbound Message
>> >> > --------------------------------------
>> >> > <soap:Envelope
>> >> > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";><soap:Body
>> >> >><ns1:getAccountsResponse
>> >> xmlns:ns1="http://service.shared.ws.demo.axa.com/";><re
>> >> > turn><entry
>> >> >
> xmlns="http://impl.service.ws.demo.axa.com/";><key>acct_2</key><value
>> >> >>[EMAIL PROTECTED]</value></entry><entry
>> >> xmlns="http:/
>> >> >
>> >>
>> >
> /impl.service.ws.demo.axa.com/"><key>acct_1</key><value>com.axa.demo.ws.
>> > sh
>> >> ared.b
>> >> >
>> >>
>> >
> [EMAIL PROTECTED]</value></entry></return></ns1:getAccountsResponse></
>> > so
>> >> ap:Bod
>> >> > y></soap:Envelope>
>> >> > --------------------------------------
>> >> > <18/09/2007 02:50:18 PM EST> <DEBUG> <demoEAR_demoWeb> <pc33326>
>> >> > <AdminServer> <
>> >> >> <demo>
>> >> >>
>> >
> <portlets.coreFramework.remotingAccount.RemotingAccountController.getAl
>> >> > lAccountsAction(RemotingAccountController.java:79)> - Map of
>> > Accounts
>> >> size
>> >> > = 0
>> >> >
>> >> > Thanks in advance
>> >> > Michael
>> >> >
>> >> >
>> >>
>> >> --
>> >> View this message in context:
>> > http://www.nabble.com/Map-contains-no-data-
>> >> when-returned-from-remote-call---Aegis-databinding---empty-Map--
>> >> tf4471690.html#a12768529
>> >> Sent from the cxf-user mailing list archive at Nabble.com.
>> >
>> >
>> >
>> 
>> --
>> View this message in context:
> http://www.nabble.com/Map-contains-no-data-
>> when-returned-from-remote-call---Aegis-databinding---empty-Map--
>> tf4471690.html#a12768812
>> Sent from the cxf-user mailing list archive at Nabble.com.
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Map-contains-no-data-when-returned-from-remote-call---Aegis-databinding---empty-Map--tf4471690.html#a12768922
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to