Tom, i will spend a bit more time on this today and will let u know.
thanks, dims On 4/25/05, Tom Jordahl <[EMAIL PROTECTED]> wrote: > Hi Dims, > > I guess I understand the reasons why you are changing this stuff and I > agree with them, but (in particular) my product that is shipping with > Axis now uses the Call object to get the Message context for a request > and response on the client side. > > If you remove this, my customers will not be able to update from Axix > 1.2 RC2 to Axix 1.2 final without me changing my code. I would like to > avoid that. > > Is there no way that we can provide an implementation of getCall() in > the service? My biggest problem is that before there was *no way* to > get the call from the stub, only the service. Now the reverse will be > true. Not very friendly from a compatibility standpoint. > > -- > Tom Jordahl > Macromedia Server Development > > > -----Original Message----- > > From: Davanum Srinivas [mailto:[EMAIL PROTECTED] > > Sent: Friday, April 22, 2005 11:48 AM > > To: Tom Jordahl > > Cc: [email protected] > > Subject: Re: cvs commit: ws-axis/java/src/org/apache/axis/client > > Service.java Stub.java > > > > Can i use a switch to keep old behavior? can you please look at the > > following as well. > > > > - http://issues.apache.org/jira/browse/AXIS-1754 > > - http://marc.theaimsgroup.com/?l=axis-dev&m=111404132128455&w=2 > > > > this check-in was to fix part of that problem (breaks Service's > > thread-safety) that i forgot about in that last check-in . > > > > thanks, > > -- dims > > > > On 4/22/05, Tom Jordahl <[EMAIL PROTECTED]> wrote: > > > Ack! -1! > > > > > > /** > > > - * Returns last Call object associated with > > > + * Returns last Call object associated with > > > * this service. > > > + * @deprecated please use Stub._getCall > > > */ > > > public Call getCall() throws ServiceException { > > > - return previousCall; > > > + throw new > > > ServiceException(Messages.getMessage("useStubsGetCallMethod")); > > > } > > > > > > This is a huge compatibility change. Up until recently (1.1?) you > > > couldn't get the Call from anywhere but the Service, so there is > > > probably lots of code out there that does this (including some of > mine). > > > > > > Please either revert this or make sure you can get the call from the > > > service. > > > > > > Tom Jordahl > > > Macromedia Server Development > > > > > > -----Original Message----- > > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > > > Sent: Friday, April 22, 2005 7:00 AM > > > To: [EMAIL PROTECTED] > > > Subject: cvs commit: ws-axis/java/src/org/apache/axis/client > > > Service.java Stub.java > > > > > > dims 2005/04/22 06:59:29 > > > > > > Modified: java/src/org/apache/axis/i18n resource.properties > > > java/src/org/apache/axis/client Service.java > Stub.java > > > Log: > > > Fix for AXIS-935 - Using ThreadLocal Call objects in a servlet > memory > > > leak both on client and server side > > > > > > After reading tom's comment...moved the _getCall to stub, which > > > ensures that Service is threadsafe. Added a deprecated flag and an > > > exception in Service's getCall to point people in the right > direction. > > > > > > Revision Changes Path > > > 1.117 +1 -0 > > > ws-axis/java/src/org/apache/axis/i18n/resource.properties > > > > > > Index: resource.properties > > > > =================================================================== > > > RCS file: > > > > /home/cvs/ws-axis/java/src/org/apache/axis/i18n/resource.properties,v > > > retrieving revision 1.116 > > > retrieving revision 1.117 > > > diff -u -r1.116 -r1.117 > > > --- resource.properties 13 Apr 2005 16:22:52 -0000 > 1.116 > > > +++ resource.properties 22 Apr 2005 13:59:29 -0000 > 1.117 > > > @@ -1072,6 +1072,7 @@ > > > cannotFindObjectForClass00=No object was found for class type {0} > > > NullDelegate=Null delegate passed to TypeMappingDelegate > constructor > > > optionWrapArrays=Prefers building beans to straight arrays for > > > wrapped XML array types (defaults to off). > > > +useStubsGetCallMethod=Please use Stub's _getCall method > > > > > > # > > > # > > > # In-use keys > > > # > > > > > > 1.108 +14 -18 > > > ws-axis/java/src/org/apache/axis/client/Service.java > > > > > > Index: Service.java > > > > =================================================================== > > > RCS file: > > > /home/cvs/ws-axis/java/src/org/apache/axis/client/Service.java,v > > > retrieving revision 1.107 > > > retrieving revision 1.108 > > > diff -u -r1.107 -r1.108 > > > --- Service.java 20 Apr 2005 23:55:18 -0000 1.107 > > > +++ Service.java 22 Apr 2005 13:59:29 -0000 1.108 > > > @@ -79,10 +79,6 @@ > > > private HandlerRegistryImpl registry = new > HandlerRegistryImpl(); > > > private Parser wsdlParser = null; > > > > > > - /** > > > - * Thread local storage used for storing the last call object > > > - */ > > > - private static Call previousCall = null; > > > private static HashMap cachedWSDL = new HashMap(); > > > private static boolean cachingWSDL = true; > > > > > > @@ -160,7 +156,7 @@ > > > * > > > * @param parser Parser for this service > > > * @param serviceName Qualified name of the desired > service > > > - * @throws ServiceException If there's an error > > > + * @throws ServiceException If there's an error > > > */ > > > public Service(Parser parser, QName serviceName) throws > > > ServiceException { > > > this.serviceName = serviceName; > > > @@ -266,7 +262,7 @@ > > > > > > /** > > > * Code for building up the Service from a Parser > > > - * > > > + * > > > * @param parser Parser for this service > > > * @param serviceName Qualified name of the desired > service > > > * @throws ServiceException If there's an error finding or > > > parsing the WSDL > > > @@ -376,7 +372,7 @@ > > > // If not found, just pick the first port. > > > port = (Port) ports.values().iterator().next(); > > > } > > > - > > > + > > > // First, try to find a generated stub. If that > > > // returns null, then find a dynamic stub. > > > Remote stub = getGeneratedStub(new QName(port.getName()), > > > proxyInterface); > > > @@ -416,16 +412,16 @@ > > > Port port = > wsdlService.getPort(portName.getLocalPart()); > > > if (port == null) > > > throw new > > > ServiceException(Messages.getMessage("noPort00", "" + > > > proxyInterface.getName())); > > > - > > > + > > > Binding binding = port.getBinding(); > > > SymbolTable symbolTable = > wsdlParser.getSymbolTable(); > > > BindingEntry bEntry = > > > symbolTable.getBindingEntry(binding.getQName()); > > > if(bEntry.getParameters().size() != > > > proxyInterface.getMethods().length) { > > > throw new > > > ServiceException(Messages.getMessage("incompatibleSEI00", "" + > > > proxyInterface.getName())); > > > - } > > > + } > > > // TODO: Check the methods and the parameters as > well. > > > } > > > - > > > + > > > try { > > > Call call = null; > > > if (portName == null) { > > > @@ -546,7 +542,6 @@ > > > */ > > > public javax.xml.rpc.Call createCall() throws > ServiceException { > > > Call call = new org.apache.axis.client.Call(this); > > > - previousCall = call; > > > return call; > > > } > > > > > > @@ -586,7 +581,7 @@ > > > javax.xml.rpc.Call call = > > > createCall(QName.valueOf(port.getName()), > > > > > > QName.valueOf(operation.getName())); > > > calls.add(call); > > > - } > > > + } > > > javax.xml.rpc.Call[] array = new > > > javax.xml.rpc.Call[calls.size()]; > > > calls.toArray(array); > > > return array; > > > @@ -766,10 +761,10 @@ > > > * lazy engine instantiation work, and not have to duplicate > > > every single > > > * Service constructor with a EngineConfiguration argument. > > > * <p> > > > - * If you need to use a non-default > > > <code>EngineConfiguration</code>, do > > > + * If you need to use a non-default > > > <code>EngineConfiguration</code>, do > > > * the following before calling the Service > constructor:<p><code> > > > - * > > > - * > > > > AxisProperties.setProperty(EngineConfigurationFactory.SYSTEM_PROPERTY_NA > > > ME, > > > + * > > > + * > > > > AxisProperties.setProperty(EngineConfigurationFactory.SYSTEM_PROPERTY_NA > > > ME, > > > * > > > "classname.of.new.EngineConfigurationFactory"); > > > * </code><p> > > > * Where the second parameter is the name of your new class > that > > > implements > > > @@ -786,7 +781,7 @@ > > > * the getClientEngineConfig() of your own > > > EngineConfigurationFactory will be > > > * called, and your configuration will be used in the > constructed > > > Service object.<p> > > > * > > > - * Another way is to use the "discovery" method of > > > + * Another way is to use the "discovery" method of > > > * <code>EngineConfigurationFactoryFinder</code>. > > > * > > > * @param config the EngineConfiguration we want to use. > > > @@ -828,11 +823,12 @@ > > > } > > > > > > /** > > > - * Returns last Call object associated with > > > + * Returns last Call object associated with > > > * this service. > > > + * @deprecated please use Stub._getCall > > > */ > > > public Call getCall() throws ServiceException { > > > - return previousCall; > > > + throw new > > > ServiceException(Messages.getMessage("useStubsGetCallMethod")); > > > } > > > > > > /** > > > > > > 1.41 +23 -9 > ws-axis/java/src/org/apache/axis/client/Stub.java > > > > > > Index: Stub.java > > > > =================================================================== > > > RCS file: > > > /home/cvs/ws-axis/java/src/org/apache/axis/client/Stub.java,v > > > retrieving revision 1.40 > > > retrieving revision 1.41 > > > diff -u -r1.40 -r1.41 > > > --- Stub.java 8 Oct 2004 18:11:42 -0000 1.40 > > > +++ Stub.java 22 Apr 2005 13:59:29 -0000 1.41 > > > @@ -64,6 +64,9 @@ > > > // a synchronized block in the generated stub code. > > > private boolean firstCall = true; > > > > > > + // The last call object > > > + private Call _call = null; > > > + > > > /** > > > * Is this the first time the type mappings are being > registered? > > > */ > > > @@ -325,10 +328,9 @@ > > > public SOAPHeaderElement getResponseHeader(String namespace, > > > String partName) { > > > try > > > { > > > - Call lastCall = > > > ((org.apache.axis.client.Service)service).getCall(); > > > - if (lastCall == null) > > > + if (_call == null) > > > return null; > > > - return > > > > lastCall.getResponseMessage().getSOAPEnvelope().getHeaderByName(namespac > > > e, partName); > > > + return > > > > _call.getResponseMessage().getSOAPEnvelope().getHeaderByName(namespace, > > > partName); > > > } > > > catch (Exception e) > > > { > > > @@ -352,10 +354,9 @@ > > > SOAPHeaderElement[] array = new SOAPHeaderElement[0]; > > > try > > > { > > > - Call lastCall = > > > ((org.apache.axis.client.Service)service).getCall(); > > > - if (lastCall == null) > > > + if (_call == null) > > > return array; > > > - Vector h = > > > lastCall.getResponseMessage().getSOAPEnvelope().getHeaders(); > > > + Vector h = > > > _call.getResponseMessage().getSOAPEnvelope().getHeaders(); > > > array = new SOAPHeaderElement[h.size()]; > > > h.copyInto(array); > > > return array; > > > @@ -394,6 +395,10 @@ > > > } > > > > > > protected void setRequestHeaders(org.apache.axis.client.Call > > > call) throws AxisFault { > > > + // HACK: store the _call object. > > > + _call = call; > > > + > > > + // Set the call headers. > > > SOAPHeaderElement[] headers = getHeaders(); > > > for(int i=0;i<headers.length;i++){ > > > call.addHeader(headers[i]); > > > @@ -407,6 +412,7 @@ > > > * @throws AxisFault > > > */ > > > protected void setAttachments(org.apache.axis.client.Call > call) > > > throws AxisFault { > > > + // Set the attachments. > > > Object[] attachments = getAttachments(); > > > for(int i=0;i<attachments.length;i++){ > > > call.addAttachmentPart(attachments[i]); > > > @@ -415,14 +421,22 @@ > > > } > > > > > > /** > > > - * Provide access to the service object, through which you > can > > > get the Call > > > - * that is used to process the operations. > > > - * Not part of JAX-RPC > > > + * Provide access to the service object. Not part of JAX-RPC > > > + * > > > * @return the service object for this stub > > > */ > > > public Service _getService() { > > > return service; > > > } > > > + > > > + /** > > > + * Returns last Call object associated with > > > + * this stub. > > > + */ > > > + public Call _getCall() { > > > + return _call; > > > + } > > > + > > > /** > > > * Helper method for updating headers from the response. > > > * > > > > > > > > > > > > -- > > Davanum Srinivas - http://webservices.apache.org/~dims/ > -- Davanum Srinivas - http://webservices.apache.org/~dims/
