diff -burN xfire-orig/xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbServiceFactory.java xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbServiceFactory.java
--- xfire-orig/xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbServiceFactory.java	2006-06-06 19:58:02.000000000 +1000
+++ xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbServiceFactory.java	2006-09-26 10:15:28.000000000 +1000
@@ -1,5 +1,7 @@
 package org.codehaus.xfire.jaxb2;
 
+import javax.xml.bind.JAXBContext;
+
 import org.codehaus.xfire.XFireFactory;
 import org.codehaus.xfire.aegis.AegisBindingProvider;
 import org.codehaus.xfire.annotations.AnnotationServiceFactory;
@@ -9,17 +11,25 @@
 public class JaxbServiceFactory
     extends AnnotationServiceFactory
 {
-
     public JaxbServiceFactory()
     {
-        this(XFireFactory.newInstance().getXFire().getTransportManager());
+        this(XFireFactory.newInstance().getXFire().getTransportManager(), null);
+    }
+
+    public JaxbServiceFactory(JAXBContext jaxbContext)
+    {
+        this(XFireFactory.newInstance().getXFire().getTransportManager(), jaxbContext);
     }
 
     public JaxbServiceFactory(TransportManager transportManager)
     {
+    	this(transportManager, null);
+    }
+
+	public JaxbServiceFactory(TransportManager transportManager, JAXBContext jaxbContext) {
         super(new Jsr181WebAnnotations(),
               transportManager, 
-              new AegisBindingProvider(new JaxbTypeRegistry()));
+                new AegisBindingProvider(new JaxbTypeRegistry(jaxbContext)));
         
         setWsdlBuilderFactory(new JaxbWSDLBuilderFactory());
     }    
diff -burN xfire-orig/xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbTypeCreator.java xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbTypeCreator.java
--- xfire-orig/xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbTypeCreator.java	2006-08-06 23:06:22.000000000 +1000
+++ xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbTypeCreator.java	2006-09-26 10:16:33.000000000 +1000
@@ -4,6 +4,7 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 
+import javax.xml.bind.JAXBContext;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlEnum;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -19,10 +20,12 @@
 {
     private TypeCreator nextCreator;
     private TypeMapping typeMapping;
+	private JAXBContext jaxbContext;
     
-    public JaxbTypeCreator(TypeCreator nextCreator)
+    public JaxbTypeCreator(TypeCreator nextCreator, JAXBContext jaxbContext)
     {
         this.nextCreator = nextCreator;   
+        this.jaxbContext = jaxbContext;
     }
         
     public QName getElementName(Method m, int index)
@@ -59,9 +62,7 @@
 
     protected Type createJaxbType(Class clazz)
     {
-        JaxbType type = new JaxbType(clazz);
-        type.getSchemaType();
-        return type;
+        return new JaxbType(clazz, jaxbContext);
     }
 
     @SuppressWarnings("unchecked")
diff -burN xfire-orig/xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbType.java xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbType.java
--- xfire-orig/xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbType.java	2006-08-24 21:01:44.000000000 +1000
+++ xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbType.java	2006-09-26 10:16:31.000000000 +1000
@@ -65,11 +65,13 @@
     SchemaFactory schemaFactory = null;
     private JAXBContext context;
 
-    public JaxbType(Class clazz)
+    public JaxbType(Class clazz, JAXBContext jaxbContext)
     {
         setTypeClass(clazz);
 
         initType();
+        
+        this.context = jaxbContext;
     }
 
      private void setupValidationSchema(Collection<String> schemaLocations,Unmarshaller u ) throws IOException, SAXException {
diff -burN xfire-orig/xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbTypeRegistry.java xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbTypeRegistry.java
--- xfire-orig/xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbTypeRegistry.java	2006-01-09 16:29:00.000000000 +1000
+++ xfire-1.2.1/xfire-jaxb2/src/main/org/codehaus/xfire/jaxb2/JaxbTypeRegistry.java	2006-09-26 10:15:41.000000000 +1000
@@ -1,16 +1,27 @@
 package org.codehaus.xfire.jaxb2;
 
+import javax.xml.bind.JAXBContext;
+
 import org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry;
 import org.codehaus.xfire.aegis.type.TypeCreator;
 
 public class JaxbTypeRegistry
     extends DefaultTypeMappingRegistry
 {
+    private JAXBContext jaxbContext;
+
     public JaxbTypeRegistry()
     {
         super(true);
     }
 
+    public JaxbTypeRegistry(JAXBContext jaxbContext)
+    {
+        super(true);
+        
+        this.jaxbContext = jaxbContext;
+    }
+    
     public JaxbTypeRegistry(TypeCreator typeCreator, boolean createDefault)
     {
         super(typeCreator, createDefault);
@@ -18,6 +29,6 @@
 
     protected TypeCreator createTypeCreator()
     {
-        return new JaxbTypeCreator(super.createTypeCreator());
+        return new JaxbTypeCreator(super.createTypeCreator(), jaxbContext);
     }
 }

