You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Sergey Beryozkin (JIRA)" <ji...@apache.org> on 2011/08/05 11:57:28 UTC
[jira] [Resolved] (CXF-3704) Configured namespace map entry
overwritten in AegisJSONProvider
[ https://issues.apache.org/jira/browse/CXF-3704?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sergey Beryozkin resolved CXF-3704.
-----------------------------------
Resolution: Fixed
Fix Version/s: 2.5
2.4.2
Assignee: Sergey Beryozkin
ignoreNamespaces may be of help if no input JSON is expected
> 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
> Assignee: Sergey Beryozkin
> Fix For: 2.4.2, 2.5
>
>
> 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