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. >