Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* 
   * Licensed to the soi-toolkit project under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The soi-toolkit project licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package org.soitoolkit.commons.mule.jaxb;
 
 import java.util.Map;
 
 
Base class for JAXB v2 transformers

Author(s):
Magnus Larsson
 
 public abstract class AbstractJaxbTransformer extends AbstractMessageAwareTransformer {
     private String   contextPath = null;
     private JaxbUtil jaxbUtil = null;
 
     private static Map<StringJaxbUtiljaxbUtilMap = new HashMap<StringJaxbUtil>();
     
     @Override
     public void initialise() throws InitialisationException {
         try {
         	initializeCachedJaxbObject();
         	
         } catch (JAXBException e) {
             throw new InitialisationException(ethis);
 		}
     }
 
 	private void initializeCachedJaxbObject() throws JAXBException {
 
 		// Get a cached jaxb context based on the transformer name, if any
 		String transformerName = getName();
 		JaxbUtil cachedJaxbContex = .get(transformerName);
 		
 		if (cachedJaxbContex != null) {
 			// Ok, we found a cached entry, use it!
 			 = cachedJaxbContex;
 			if (.isDebugEnabled()) .debug("Use cached JaxbUtil for transformer " + transformerName);
 			return;
 		}
 		
 		// Not found, let's create a jaxb context and update the Map.
 		// But let's first assure that we are alone updating the map (avoid concurrent threads creating overlapping jaxb objects)
 		synchronized () {
 			// We are now alone updating the map :-)
 			// Start with a final check to see if the entry is still missing 
 			// (could have been inserted by some other thread while we waited for the lock...)
 			cachedJaxbContex = .get(transformerName);
 			
 			if (cachedJaxbContex != null) {
 				// Some other thread created the entry while we were waiting on the lock, use it!
 				 = cachedJaxbContex;
 		    	if (.isDebugEnabled()) .debug("Use cached JaxbUtil for transformer (created during wait for lock!) " + transformerName);
 		    	return;
 			}
 			
 			// Ok, we are first out! 
 			// So it's time to take the hit, let's create the heavyweight jaxb context object and place it in the map
 			if (.isDebugEnabled()) .debug("Load JaxbUtil for " + getName() + " based on context path: " + );
 			.put(transformerName);
 		}
 	}
 
     public String getContextPath() {
         return ;
     }
 
     public void setContextPath(String contextPath) {
         this. = trimWhitespace(contextPath);
     }
 
 	protected JaxbUtil getJaxbUtil() {
 		
 		if ( == null) {
 	        try {
 	    		.debug("null jaxbutil detected, calling initializeCachedJaxbObject()!");
 	        	initializeCachedJaxbObject();
 	        	
	        } catch (JAXBException e) {
	            throw new RuntimeException(e);
			}
		}
        return ;
    }
	protected String trimWhitespace(String contextPath) {
	    StringBuffer withoutSpaces = new StringBuffer();
	    StringTokenizer st = new StringTokenizer(contextPath);
	    while(st.hasMoreTokens()) {
	       withoutSpaces.append(st.nextToken());
	    }
	    return withoutSpaces.toString(); 
	}	
New to GrepCode? Check out our FAQ X