cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alessio Soldano <asold...@redhat.com>
Subject Re: svn commit: r1480712 - /cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
Date Fri, 10 May 2013 08:21:51 GMT
Nervemind and sorry for the noise, it's the class reference, not the
actual databinding instance, being cached. Sorry.

On 05/10/2013 10:17 AM, Alessio Soldano wrote:
> Hi Dan,
> this would likely break a minor thing in JBossWS (I still need to check,
> might possibly workaround it by being sure to always use a new
> databinding when I need to customize it), but besides that it raises a
> question from me: is a DataBinding (JAXBDataBinding here) really meant
> to be shared within the whole classloader? I would have imagined it to
> be a Bus level thing. Asking as the JAXBDataBinding has multiple
> members, including context properties, that one might want to configure
> differently for each bus.
> Thanks
> Alessio
> 
> On 05/09/2013 06:11 PM, dkulp@apache.org wrote:
>> Author: dkulp
>> Date: Thu May  9 16:11:59 2013
>> New Revision: 1480712
>>
>> URL: http://svn.apache.org/r1480712
>> Log:
>> Cache the JAXBDataBinding class which make client creation a tiny bit faster (after
the first one) and can hopefully fix a potential deadlock issue when using spring-dm to start
multiple bundles that have jaxws:client entries.
>>
>> Modified:
>>     cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
>>
>> Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
>> URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java?rev=1480712&r1=1480711&r2=1480712&view=diff
>> ==============================================================================
>> --- cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
(original)
>> +++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
Thu May  9 16:11:59 2013
>> @@ -147,6 +147,7 @@ public class ReflectionServiceFactoryBea
>>      public static final String METHOD_ANNOTATIONS = "method.return.annotations";
>>      public static final String PARAM_ANNOTATION = "parameter.annotations";
>>      private static final Logger LOG = LogUtils.getL7dLogger(ReflectionServiceFactoryBean.class);
>> +    private static Class<? extends DataBinding> defaultDatabindingClass;
>>  
>>      protected String wsdlURL;
>>  
>> @@ -193,7 +194,6 @@ public class ReflectionServiceFactoryBea
>>  
>>  
>>      protected DataBinding createDefaultDataBinding() {
>> -
>>          Object obj = null;
>>          Class<? extends DataBinding> cls = null;
>>  
>> @@ -216,10 +216,10 @@ public class ReflectionServiceFactoryBea
>>          if (cls == null && getBus() != null) {
>>              obj = getBus().getProperty(DataBinding.class.getName());
>>          }
>> -        if (obj == null) {
>> -            obj = "org.apache.cxf.jaxb.JAXBDataBinding";
>> -        }
>>          try {
>> +            if (obj == null && cls == null) {
>> +                cls = getJAXBClass();            
>> +            }
>>              if (obj instanceof String) {
>>                  cls = ClassLoaderUtils.loadClass(obj.toString(), getClass(), DataBinding.class);
>>              } else if (obj instanceof Class) {
>> @@ -236,6 +236,17 @@ public class ReflectionServiceFactoryBea
>>              throw new ServiceConstructionException(e);
>>          }
>>      }
>> +    private static synchronized Class<? extends DataBinding> getJAXBClass()
throws ClassNotFoundException {
>> +        if (defaultDatabindingClass == null) {
>> +            defaultDatabindingClass = ClassLoaderUtils.loadClass("org.apache.cxf.jaxb.JAXBDataBinding",
>> +                                                                 ReflectionServiceFactoryBean.class,
>> +                                                                 DataBinding.class);

>> +        }
>> +        return defaultDatabindingClass;
>> +    }
>> +
>> +
>> +
>>      public void reset() {
>>          if (!dataBindingSet) {
>>              setDataBinding(null);
>> @@ -266,8 +277,7 @@ public class ReflectionServiceFactoryBea
>>              getService().setDataBinding(getDataBinding());
>>          }
>>  
>> -        MethodDispatcher m = getMethodDispatcher();
>> -        getService().put(MethodDispatcher.class.getName(), m);
>> +        getService().put(MethodDispatcher.class.getName(), getMethodDispatcher());
>>          createEndpoints();
>>  
>>          fillInSchemaCrossreferences();
>> @@ -426,8 +436,8 @@ public class ReflectionServiceFactoryBea
>>          initializeWSDLOperations();
>>  
>>          Set<Class<?>> cls = getExtraClass();
>> -        for (ServiceInfo si : getService().getServiceInfos()) {
>> -            if (cls != null && !cls.isEmpty()) {
>> +        if (cls != null && !cls.isEmpty()) {
>> +            for (ServiceInfo si : getService().getServiceInfos()) {
>>                  si.setProperty(EXTRA_CLASS, cls);
>>              }
>>          }
>> @@ -532,14 +542,12 @@ public class ReflectionServiceFactoryBea
>>      }
>>  
>>      protected void initializeServiceModel() {
>> -        String wsdlurl = getWsdlURL();
>> -
>>          if (isFromWsdl()) {
>> -            buildServiceFromWSDL(wsdlurl);
>> +            buildServiceFromWSDL(getWsdlURL());
>>          } else if (getServiceClass() != null) {
>>              buildServiceFromClass();
>>          } else {
>> -            throw new ServiceConstructionException(new Message("NO_WSDL_NO_SERVICE_CLASS_PROVIDED",
LOG, wsdlurl));
>> +            throw new ServiceConstructionException(new Message("NO_WSDL_NO_SERVICE_CLASS_PROVIDED",
LOG, getWsdlURL()));
>>          }
>>  
>>          if (isValidate()) {
>> @@ -613,19 +621,15 @@ public class ReflectionServiceFactoryBea
>>  
>>      private void validateSchemas(XmlSchemaValidationManager xsdValidator,
>>                                   SchemaCollection xmlSchemaCollection) {
>> -        final boolean[] anyErrors = new boolean[1];
>>          final StringBuilder errorBuilder = new StringBuilder();
>> -        anyErrors[0] = false;
>>          xsdValidator.validateSchemas(xmlSchemaCollection.getXmlSchemaCollection(),
new DOMErrorHandler() {
>> -
>>              public boolean handleError(DOMError error) {
>> -                anyErrors[0] = true;
>>                  errorBuilder.append(error.getMessage());
>>                  LOG.warning(error.getMessage());
>>                  return true;
>>              }
>>          });
>> -        if (anyErrors[0]) {
>> +        if (errorBuilder.length() > 0) {
>>              throw new ServiceConstructionException(new Message("XSD_VALIDATION_ERROR",
LOG,
>>                                                                 errorBuilder.toString()));
>>          }
>> @@ -785,11 +789,8 @@ public class ReflectionServiceFactoryBea
>>          }
>>          sendEvent(Event.OPERATIONINFO_IN_MESSAGE_SET, origOp, method, origOp.getInput());
>>          // Initialize return type
>> -        Class<?> paramType = method.getReturnType();
>> -        Type genericType = method.getGenericReturnType();
>> -
>>          if (o.hasOutput()
>> -            && !initializeParameter(o, method, -1, paramType, genericType))
{
>> +            && !initializeParameter(o, method, -1, method.getReturnType(),
method.getGenericReturnType())) {
>>              return false;
>>          }
>>          if (origOp.hasOutput()) {
>>
>>
> 
> 


-- 
Alessio Soldano
Web Service Lead, JBoss

Mime
View raw message