Configured namespace map entry overwritten in AegisJSONProvider
---------------------------------------------------------------
Key: CXF-3704
URL: https://issues.apache.org/jira/browse/CXF-3704
Project: CXF
Issue Type: Bug
Components: Aegis Databinding
Affects Versions: 2.4
Reporter: James Phillpotts
I have a jaxrs service configured as follows:
{code:xml}
<util:map id="jsonNamespaceMap" map-class="java.util.Hashtable">
<entry key="http://acme.com/aegis/customtypes" value="t"/>
<entry key="http://acme.com/v1/activities" value="a"/>
<entry key="http://model.v1.acme.com" value="m"/>
</util:map>
<jaxrs:server id="restServer" address="/rest">
<jaxrs:serviceBeans>
<ref bean="bookstoreService" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<bean class="org.apache.cxf.jaxrs.provider.AegisJSONProvider">
<property name="namespaceMap" ref="jsonNamespaceMap"/>
</bean>
</jaxrs:providers>
</jaxrs:server>
{code}
I then have a JSON payload for my service request:
{code:javascript}
{
"m.details": {
"m.date": "2011-08-05",
"m.updates": [
{
"a.value": {
"t.string": {
"t.name": "My String",
"t.value": "myValue"
}
}
}
]
}
}
{code}
However, the object parameter to the service method is not correctly populated
with the value of {{date}}, or {{updates}}, and the logs contain messages such
as:
{noformat}
WARNING: xsi:type absent, and no type available for m.date
{noformat}
A bit of digging around, and it seems to me the problem is at line 142 of
AegisJSONProvider (and yes, I dislike the namespace map concept as much as the
person that added comments at line 140 of AegisJSONProvider!):
{code:java}
namespaceMap.put(typeToRead.getSchemaType().getNamespaceURI(), "ns1");
{code}
I believe that {{put}} here should be switched to {{putIfAbsent}} - what is
happening is that on initialisation, the namespace map correctly contains the 3
entries as per the spring config, but when the message is processed,
{{typeToRead}} is not null, and the configured namespace prefix, {{m}}is
overwritten with {{ns1}}.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira