Hi Jayanga, Create a JIRA for the above issue and you are more than welcome to provide a fix for it. IMO ServiceContext would be a good place to store nodeList.
Thanks Shameera. On Sat, Nov 22, 2014 at 2:11 AM, Shameera Rathnayaka <shameerai...@gmail.com > wrote: > Hi Jayanga, > > For the sake of performance, only generated node list for a service is the > very first time it gets a request. Then we save this nodelist against it > service QName. So you can safely move this nodelist to serviceConfiguration > level then the issue you mention will vanish. Or you can introduce a way to > update nodeMap by checking last update time of the service. > > > Thanks, > Shameera. > > > On Fri, Nov 21, 2014 at 12:56 AM, Jayanga Dissanayake < > jsdjaya...@gmail.com> wrote: > >> Hi, >> >> Yes. This is exactly my observation. Thanks for elaborating the above >> implementation. >> >> Here the 'nodeMap' is stored in the ConfigurationContext. Why it is >> stored in ConfigurationContext instead of ServiceContext. I think, if we >> need to update the 'nodeMap' when the services are redeployed, it should be >> stored in ServiceContext. >> >> Thanks, >> Jayanga. >> >> On Thu, Nov 20, 2014 at 9:34 PM, Martin Gainty <mgai...@hotmail.com> >> wrote: >> >>> xmlnodes is *assumed* to be in your base configuration for nodeMap to >>> be created properly >>> >>> IF xmlnodes is nowhere to be found a NEW nodeMap IS created via >>> Map<QName, XmlNode> newNodeMap = new HashMap<QName, >>> XmlNode>(); >>> //assumptions xmlSchemaList is a set properly by constructor >>> //elementQName is set properly by constructor >>> xmlNodeGenerator = new XmlNodeGenerator(xmlSchemaList, >>> elementQname); >>> mainXmlNode = xmlNodeGenerator.getMainXmlNode(); >>> //get the Queue from mainXmlNode >>> queue = xmlNodeGenerator.getQueue(mainXmlNode); >>> //put new mainxmlNode into newNodeMap and associate to elementQName >>> newNodeMap.put(elementQname, mainXmlNode); >>> //re-insert the new Map into configContext under 'xmlnodes' >>> configContext.setProperty(JsonConstant.XMLNODES, >>> newNodeMap); >>> >>> ELSE elementQname (passed in from XMLStreamReader) is searched within >>> the xmlnodes >>> IF elementQName is found in xmlnodes >>> >>> //a queue is acquired from existing nodeMap created from xmlnodes >>> referenced by elementQName >>> xmlNodeGenerator = new >>> XmlNodeGenerator().getQueue(nodeMap.get(elementQname)) >>> >>> //if xmlnodes nodeMap exists but has NO elementQName entry then >>> mainXmlNode will be used: >>> //assumptions xmlSchemaList is a set properly by constructor >>> //elementQName is set properly by constructor >>> xmlNodeGenerator = new XmlNodeGenerator(xmlSchemaList, >>> elementQname); >>> mainXmlNode = xmlNodeGenerator.getMainXmlNode(); >>> //get Queue from mainXMLNode >>> queue = xmlNodeGenerator.getQueue(mainXmlNode); >>> //put new mainXmlNode into existing nodeMap and associate with >>> 'elementQName' >>> nodeMap.put(elementQname, mainXmlNode); >>> //re-insert the new Map into configContext under 'xmlnodes' >>> configContext.setProperty(JsonConstant.XMLNODES, nodeMap); >>> >>> reference the 4.2.0 branch of WS02 codebase: >>> >>> https://svn.wso2.org/repos/wso2/carbon/kernel/branches/4.2.0/dependencies/axis2/1.6.1-wso2v10/modules/json/src/org/apache/axis2/json/gson/GsonXMLStreamReader.java >>> >>> does this conform to your observations? >>> Martin >>> >>> ------------------------------ >>> Date: Thu, 20 Nov 2014 18:07:08 +0530 >>> Subject: json.gson : 'NodeMap' in ConfigurationContext doesn't get >>> cleared with service redeployment >>> From: jsdjaya...@gmail.com >>> To: java-user@axis.apache.org >>> >>> >>> Hi All, >>> >>> I am trying out some samples with axis2 json.gson [1] implementation. In >>> my sample I have an Axis2 service which accept and sends json contents. >>> According to the json.gson implementation, it creates the 'NodeMap' in the >>> first invocation and sets it in the ConfigurationContext. >>> >>> I made some changes to the json mappings in my service and simply >>> redeploy the service without restarting the server. While doing this I >>> found out that org.apache.axis2.json.gson.GsonXMLStreamReader failed to >>> read the request. While debugging the code found out that, this is happened >>> by the un-updated 'NodeMap' in the ConfigurationContext. >>> >>> Though my service get redeployed, the 'NodeMap' doesn't get updated. >>> Once I try to access the service it tries to parse the request with old >>> 'NodeMap' and fails. ConfigurationContext doesn't get updated/invalidated >>> with service redeployment. >>> >>> So, shouldn't the 'NodeMap' be stored in a context like ServiceContext, >>> which get refreshed with service redeployment. >>> >>> Can someone please help me to understand and solve the above issue. >>> >>> [1] >>> http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/ >>> >>> Thanks, >>> Jayanga. >>> >> >> > > > -- > Best Regards, > Shameera Rathnayaka. > > email: shameera AT apache.org , shameerainfo AT gmail.com > Blog : http://shameerarathnayaka.blogspot.com/ > -- Best Regards, Shameera Rathnayaka. email: shameera AT apache.org , shameerainfo AT gmail.com Blog : http://shameerarathnayaka.blogspot.com/