Author: darran.lofthouse(a)jboss.com
Date: 2009-07-17 13:24:33 -0400 (Fri, 17 Jul 2009)
New Revision: 10343
Modified:
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
Log:
[JBWS-2681] Concurrency issues where multiple threads create Port using Service
Simultaneously.
Modified:
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
===================================================================
---
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java 2009-07-17
17:10:38 UTC (rev 10342)
+++
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java 2009-07-17
17:24:33 UTC (rev 10343)
@@ -182,7 +182,7 @@
// com/sun/ts/tests/jaxws/api/javax_xml_ws/Service#GetPort1NegTest1WithWsdl
EndpointMetaData epMetaData = serviceMetaData.getEndpoint(portName);
- if (serviceMetaData.getEndpoints().size() > 0 && epMetaData == null)
+ if (epMetaData == null && serviceMetaData.getEndpoints().size() > 0)
throw new WebServiceException("Cannot get port meta data for: " +
portName);
// This is the case when the service could not be created from wsdl
@@ -265,9 +265,15 @@
// Adjust the endpoint meta data according to the annotations
if (annotatedPorts.contains(portName) == false)
{
- JAXWSClientMetaDataBuilder metaDataBuilder = new JAXWSClientMetaDataBuilder();
- metaDataBuilder.rebuildEndpointMetaData(epMetaData, seiClass);
- annotatedPorts.add(portName);
+ synchronized (epMetaData)
+ {
+ if (annotatedPorts.contains(portName) == false)
+ {
+ JAXWSClientMetaDataBuilder metaDataBuilder = new
JAXWSClientMetaDataBuilder();
+ metaDataBuilder.rebuildEndpointMetaData(epMetaData, seiClass);
+ annotatedPorts.add(portName);
+ }
+ }
}
return (T)createProxy(seiClass, epMetaData);
Show replies by date