No , the instance variable "quote" is not thread safe.
If you still need the quote object , I suggest you to make it to be a thread local object.
Here is the code snippet:

public class  StockQuoteReporterProvider implements Provider<SOAPMessage> {

 private ThreadLocal<Quote> quote = new ThreadLocal<Quote>();

 private Quote getQuote() {
   if (quote.get() == null) {
      quote.set(new Quote());
   }
   return quote.get();
 }

public SOAPMessage invoke(SOAPMessage request){
   getQuote().setIntProperty(123);

   SOAPBody requestBody = request.getSOAPBody();

   ...
 }
}

Willem


Landslide wrote:
Is it thread safe to use an instance variable "quote" as below?

import javax.xml.ws.Provider;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;

@WebServiceProvider(portName="stockQuoteReporterPort"
serviceName="stockQuoteReporter")
@ServiceMode(value="Service.Mode.MESSAGE")
public class  StockQuoteReporterProvider implements Provider<SOAPMessage>
{
private Quote quote;

public StockQuoteReporterProvider()
  {
       quote = new Quote();
  }

public SOAPMessage invoke(SOAPMessage request)
  {
  quote.setIntProperty(123);

  SOAPBody requestBody = request.getSOAPBody();
  if(requestBody.getElementName.getLocalName.equals("getStockPrice"))
    {
    MessageFactory mf = MessageFactory.newInstance();
    SOAPFactory sf = SOAPFactory.newInstance();

    SOAPMessage response = mf.createMessage();
    SOAPBody respBody = response.getSOAPBody();
    Name bodyName = sf.createName("getStockPriceResponse");
    respBody.addBodyElement(bodyName);
    SOAPElement respContent = respBody.addChildElement("price");
    respContent.setValue("123.00");
    response.saveChanges();
    return response;
    }
    ...
  }
}

Reply via email to