Bin Zhu created CXF-5407: ---------------------------- Summary: WSDLManagerImpl.removeDefinition doesn't take effect Key: CXF-5407 URL: https://issues.apache.org/jira/browse/CXF-5407 Project: CXF Issue Type: Bug Affects Versions: 2.6.2 Reporter: Bin Zhu
I was trying to invoke WSDLManagerImpl.removeDefinition to remove the WSDL cache in web service client side to avoid the invalid WSDL defination when the WSDL file for web service is server side changed. see more details in https://issues.apache.org/jira/browse/CXF-5216 I was using following code to to remove the cach: WSDLManager wsdlManager = bus.getExtension(WSDLManager.class); synchronized (wsdlManager) { Map<Object, Definition> map = wsdlManager.getDefinitions(); if (!map.isEmpty() && url != null && map.containsKey(url.toString())) { wsdlManager.removeDefinition(wsdlManager.getDefinition(url.toString())); } } But it is found the WSDLcache is not removed as expected later. I tried to add more system out info in WSDLManagerImpl.removeDefinition and debug it and find the it didn't removed the WSDL definition definitionsMap. This should not be "synchronized" issue since the object id for the defination is the same when I debug it. It should the the same object and it's unreasonalbe that the defination object is still in the definitionsMap after invoking definitionsMap.remove(o). Any ideas? The added system out: public void removeDefinition(Definition wsdl) { synchronized (definitionsMap) { List<Object> keys = new ArrayList<Object>(); for (Map.Entry<Object, Definition> e : definitionsMap.entrySet()) { if (e.getValue() == wsdl) { keys.add(e.getKey()); } } for (Object o : keys) { // Print contents of definitionsMap before remove the defination. System.out.println("--WSDLManagerImpl--map before----------->:"+definitionsMap); // Print removed the defination. System.out.println("--WSDLManagerImpl--removed map----------->:"+definitionsMap.remove(o)); // Print the contents of definitionsMap before remove the defination. System.out.println("--WSDLManagerImpl--map after----------->:"+definitionsMap); schemaCacheMap.remove(o); } } } Output: //There is 1 defination for http://localhost:8010/MTOMTest/MTOMService?wsdl before removing --WSDLManagerImpl--map before----------->:{http://localhost:8010/MTOMTest/MTOMService?wsdl=Definition: name={http://MTOMService/}MTOMService targetNamespace=http://MTOMService/ Types: SchemaExtensibilityElement ({http://www.w3.org/2001/XMLSchema}schema): required=null element=[xs:schema: null] Message: name={http://MTOMService/}getAttachment Part: name=parameters elementName={http://MTOMService/}getAttachment Message: name={http://MTOMService/}getAttachmentResponse Part: name=parameters elementName={http://MTOMService/}getAttachmentResponse PortType: name={http://MTOMService/}MTOMInter Operation: name=getAttachment style=REQUEST_RESPONSE,1 Input: name=getAttachment Message: name={http://MTOMService/}getAttachment Part: name=parameters elementName={http://MTOMService/}getAttachment Output: name=getAttachmentResponse Message: name={http://MTOMService/}getAttachmentResponse Part: name=parameters elementName={http://MTOMService/}getAttachmentResponse Binding: name={http://MTOMService/}MTOMServiceSoapBinding PortType: name={http://MTOMService/}MTOMInter Operation: name=getAttachment style=REQUEST_RESPONSE,1 Input: name=getAttachment Message: name={http://MTOMService/}getAttachment Part: name=parameters elementName={http://MTOMService/}getAttachment Output: name=getAttachmentResponse Message: name={http://MTOMService/}getAttachmentResponse Part: name=parameters elementName={http://MTOMService/}getAttachmentResponse BindingOperation: name=getAttachment BindingInput: name=getAttachment SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=literal BindingOutput: name=getAttachmentResponse SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=literal SOAPOperation ({http://schemas.xmlsoap.org/wsdl/soap/}operation): required=null soapActionURI= style=document SOAPBinding ({http://schemas.xmlsoap.org/wsdl/soap/}binding): required=null transportURI=http://schemas.xmlsoap.org/soap/http style=document Service: name={http://MTOMService/}MTOMService Port: name=MTOMServicePort Binding: name={http://MTOMService/}MTOMServiceSoapBinding PortType: name={http://MTOMService/}MTOMInter Operation: name=getAttachment style=REQUEST_RESPONSE,1 Input: name=getAttachment Message: name={http://MTOMService/}getAttachment Part: name=parameters elementName={http://MTOMService/}getAttachment Output: name=getAttachmentResponse Message: name={http://MTOMService/}getAttachmentResponse Part: name=parameters elementName={http://MTOMService/}getAttachmentResponse BindingOperation: name=getAttachment BindingInput: name=getAttachment SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=literal BindingOutput: name=getAttachmentResponse SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=literal SOAPOperation ({http://schemas.xmlsoap.org/wsdl/soap/}operation): required=null soapActionURI= style=document SOAPBinding ({http://schemas.xmlsoap.org/wsdl/soap/}binding): required=null transportURI=http://schemas.xmlsoap.org/soap/http style=document SOAPAddress ({http://schemas.xmlsoap.org/wsdl/soap/}address): required=null locationURI=http://localhost:8010/MTOMTest/MTOMService UnknownExtensibilityElement ({http://www.w3.org/ns/ws-policy}Policy): required=null element=[wsp:Policy: null]} //Print the removed defination --WSDLManagerImpl--removed map----------->:Definition: name={http://MTOMService/}MTOMService targetNamespace=http://MTOMService/ Types: SchemaExtensibilityElement ({http://www.w3.org/2001/XMLSchema}schema): required=null element=[xs:schema: null] Message: name={http://MTOMService/}getAttachment Part: name=parameters elementName={http://MTOMService/}getAttachment Message: name={http://MTOMService/}getAttachmentResponse Part: name=parameters elementName={http://MTOMService/}getAttachmentResponse PortType: name={http://MTOMService/}MTOMInter Operation: name=getAttachment style=REQUEST_RESPONSE,1 Input: name=getAttachment Message: name={http://MTOMService/}getAttachment Part: name=parameters elementName={http://MTOMService/}getAttachment Output: name=getAttachmentResponse Message: name={http://MTOMService/}getAttachmentResponse Part: name=parameters elementName={http://MTOMService/}getAttachmentResponse Binding: name={http://MTOMService/}MTOMServiceSoapBinding PortType: name={http://MTOMService/}MTOMInter Operation: name=getAttachment style=REQUEST_RESPONSE,1 Input: name=getAttachment Message: name={http://MTOMService/}getAttachment Part: name=parameters elementName={http://MTOMService/}getAttachment Output: name=getAttachmentResponse Message: name={http://MTOMService/}getAttachmentResponse Part: name=parameters elementName={http://MTOMService/}getAttachmentResponse BindingOperation: name=getAttachment BindingInput: name=getAttachment SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=literal BindingOutput: name=getAttachmentResponse SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=literal SOAPOperation ({http://schemas.xmlsoap.org/wsdl/soap/}operation): required=null soapActionURI= style=document SOAPBinding ({http://schemas.xmlsoap.org/wsdl/soap/}binding): required=null transportURI=http://schemas.xmlsoap.org/soap/http style=document Service: name={http://MTOMService/}MTOMService Port: name=MTOMServicePort Binding: name={http://MTOMService/}MTOMServiceSoapBinding PortType: name={http://MTOMService/}MTOMInter Operation: name=getAttachment style=REQUEST_RESPONSE,1 Input: name=getAttachment Message: name={http://MTOMService/}getAttachment Part: name=parameters elementName={http://MTOMService/}getAttachment Output: name=getAttachmentResponse Message: name={http://MTOMService/}getAttachmentResponse Part: name=parameters elementName={http://MTOMService/}getAttachmentResponse BindingOperation: name=getAttachment BindingInput: name=getAttachment SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=literal BindingOutput: name=getAttachmentResponse SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=literal SOAPOperation ({http://schemas.xmlsoap.org/wsdl/soap/}operation): required=null soapActionURI= style=document SOAPBinding ({http://schemas.xmlsoap.org/wsdl/soap/}binding): required=null transportURI=http://schemas.xmlsoap.org/soap/http style=document SOAPAddress ({http://schemas.xmlsoap.org/wsdl/soap/}address): required=null locationURI=http://localhost:8010/MTOMTest/MTOMService UnknownExtensibilityElement ({http://www.w3.org/ns/ws-policy}Policy): required=null element=[wsp:Policy: null] //The WSDL defination for http://localhost:8010/MTOMTest/MTOMService?wsdl still exists after removing. --WSDLManagerImpl--map after----------->:{http://localhost:8010/MTOMTest/MTOMService?wsdl=Definition: name={http://MTOMService/}MTOMService targetNamespace=http://MTOMService/ Types: SchemaExtensibilityElement ({http://www.w3.org/2001/XMLSchema}schema): required=null element=[xs:schema: null] Message: name={http://MTOMService/}getAttachment Part: name=parameters elementName={http://MTOMService/}getAttachment Message: name={http://MTOMService/}getAttachmentResponse Part: name=parameters elementName={http://MTOMService/}getAttachmentResponse PortType: name={http://MTOMService/}MTOMInter Operation: name=getAttachment style=REQUEST_RESPONSE,1 Input: name=getAttachment Message: name={http://MTOMService/}getAttachment Part: name=parameters elementName={http://MTOMService/}getAttachment Output: name=getAttachmentResponse Message: name={http://MTOMService/}getAttachmentResponse Part: name=parameters elementName={http://MTOMService/}getAttachmentResponse Binding: name={http://MTOMService/}MTOMServiceSoapBinding PortType: name={http://MTOMService/}MTOMInter Operation: name=getAttachment style=REQUEST_RESPONSE,1 Input: name=getAttachment Message: name={http://MTOMService/}getAttachment Part: name=parameters elementName={http://MTOMService/}getAttachment Output: name=getAttachmentResponse Message: name={http://MTOMService/}getAttachmentResponse Part: name=parameters elementName={http://MTOMService/}getAttachmentResponse BindingOperation: name=getAttachment BindingInput: name=getAttachment SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=literal BindingOutput: name=getAttachmentResponse SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=literal SOAPOperation ({http://schemas.xmlsoap.org/wsdl/soap/}operation): required=null soapActionURI= style=document SOAPBinding ({http://schemas.xmlsoap.org/wsdl/soap/}binding): required=null transportURI=http://schemas.xmlsoap.org/soap/http style=document Service: name={http://MTOMService/}MTOMService Port: name=MTOMServicePort Binding: name={http://MTOMService/}MTOMServiceSoapBinding PortType: name={http://MTOMService/}MTOMInter Operation: name=getAttachment style=REQUEST_RESPONSE,1 Input: name=getAttachment Message: name={http://MTOMService/}getAttachment Part: name=parameters elementName={http://MTOMService/}getAttachment Output: name=getAttachmentResponse Message: name={http://MTOMService/}getAttachmentResponse Part: name=parameters elementName={http://MTOMService/}getAttachmentResponse BindingOperation: name=getAttachment BindingInput: name=getAttachment SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=literal BindingOutput: name=getAttachmentResponse SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=literal SOAPOperation ({http://schemas.xmlsoap.org/wsdl/soap/}operation): required=null soapActionURI= style=document SOAPBinding ({http://schemas.xmlsoap.org/wsdl/soap/}binding): required=null transportURI=http://schemas.xmlsoap.org/soap/http style=document SOAPAddress ({http://schemas.xmlsoap.org/wsdl/soap/}address): required=null locationURI=http://localhost:8010/MTOMTest/MTOMService UnknownExtensibilityElement ({http://www.w3.org/ns/ws-policy}Policy): required=null element=[wsp:Policy: null]} -- This message was sent by Atlassian JIRA (v6.1#6144)