Hi,
Thank you Sergey. Could you please elaborate on how "Aegis configuration
file as a class resource" could be done in an OSGi environment? Is there
a DOSGi service to hooklisten to, for example, for further config
customization?
I appended this to the DOSGi DSW META-INF/cxf/cxf.xml (actually, I don't
know which file of META-INF/cxf/*.xml is the good one to append to, if
any!)
<bean id="aegisContext" class="org.apache.cxf.aegis.AegisContext"
scope="prototype">
<property name="writeXsiType" value="true" />
<property name="rootClassNames">
<list>
<value><some class1></value>
<value><some class2></value>
</list>
</property>
</bean>
<bean id="dataBinding"
class="org.apache.cxf.aegis.databinding.AegisDatabinding"
scope="prototype">
<property name="aegisContext" ref="aegisContext" />
</bean>
It didn't work.
I see there is already static configuration properties for databingding
themselves, wouldn't be simpler to push this further and let us add more
specific properties that a databinding might need. For example when the
WS_DATABINDING_PROP_KEY maps to an aegis then expect some extra
properties like (rootClasses | writeXsiTypes | beanImplementationMap ) to
be set. Or having extra configuration file in OSGI-INF under the
concerned service itself !?
Many thanks.
From:
"Sergey Beryozkin" <[email protected]>
To:
<[email protected]>
Date:
16-07-2009 11:03
Subject:
Re: [DOSGI] how to add properties to AegisContext statically?
Hi,
As far as I understand you can have some Aegis configuration file as a
class resource, so if it is the case then you might want to
jar it with your bundle and it should work...
Benson can you help please with some advice here ?
Cheers, Sergey
----- Original Message -----
From: <[email protected]>
To: <[email protected]>
Sent: Wednesday, July 15, 2009 2:01 PM
Subject: [DOSGI] how to add properties to AegisContext statically?
> Hi,
> In our osgi application, we are using DSGi 1.1 Snapshot for both osgi
> distribution and discovery (the dosgi/zooKeeper based one). We're
facing
> the following problem:
> we are getting this kind of exception at the service consumer side:
>
> org.apache.cxf.aegis.DatabindingException: Could not determine how to
> read type:
>
> it seems Aegis data binding seems handling de/serialization pretty well
> as long as all needed types are present in the wsdl. But this is not
alwys
> the case for osgi services as the interface is the contract and concrete
> classes don't have to be specified in the contract.
> I read you can feed the AegisContext with properties [rootClasses |
> writeXsiTypes | beanImplementationMap ] to help aegis binding
> additional/concrete types.
>
> I tried to set some of those properties adding something like this:
>
> <bean id="aegisContext" class="org.apache.cxf.aegis.AegisContext"
> scope="prototype">
> <property name="writeXsiTypes" value="true" />
> <property name="rootClassNames">
> <list>
> <value><some class1></value>
> <value><some class2></value>
> </list>
> </property>
> </bean>
>
> <bean id="dataBinding"
> class="org.apache.cxf.aegis.databinding.AegisDatabinding"
> scope="prototype">
> <property name="aegisContext" ref="aegisContext" />
> </bean>
>
> but I think this may work when creating directly your cxf/web services
> client-server beans... as you still have the flexibility to configure
> them at your like.
>
> I debugged AegisDatabinding class to configure out how those (for
> compatibility but deprecated!) properties are set in the ServiceImpl
class
> but it seems they are never set anywhere.
>
> public void initialize(Service s) {
> ...
> Object val = s.get(READ_XSI_TYPE_KEY);
> if ("false".equals(val) || Boolean.FALSE.equals(val)) {
> aegisContext.setReadXsiTypes(false);
> }
>
> val = s.get(WRITE_XSI_TYPE_KEY);
> if ("true".equals(val) || Boolean.TRUE.equals(val)) {
> aegisContext.setWriteXsiTypes(true);
> }
>
> val = s.get(OVERRIDE_TYPES_KEY);
> if (val != null) {
> Collection nameCollection = (Collection)val;
> Collection<String> typeNames =
> CastUtils.cast(nameCollection, String.class);
> if (overrideTypes == null) {
> overrideTypes = new HashSet<String>();
> }
> overrideTypes.addAll(typeNames);
> }
> ...
>
>
> Does somebody know how to add properties to AegisContext statically
via
> xml or service properties? is there better way (more osgi-ish :) to
handle
> implementation and extra types that are not visible via wsdl?
> Any help please !
> Many thanks :)
>