You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ni...@apache.org on 2007/11/28 05:28:20 UTC

svn commit: r598863 - in /incubator/cxf/branches/2.0.x-fixes: ./ common/common/src/main/java/org/apache/cxf/helpers/ common/common/src/test/java/org/apache/cxf/helpers/ distribution/src/main/release/samples/js_client/ rt/databinding/jaxb/src/main/java/...

Author: ningjiang
Date: Tue Nov 27 20:28:19 2007
New Revision: 598863

URL: http://svn.apache.org/viewvc?rev=598863&view=rev
Log:
Merged revisions 598701-598839 via svnmerge from 
https://svn.apache.org/repos/asf/incubator/cxf/trunk

........
  r598701 | eglynn | 2007-11-28 01:18:01 +0800 (Wed, 28 Nov 2007) | 3 lines
  
  Misleading instructions in samples/js_client/README.txt 
........
  r598726 | bimargulies | 2007-11-28 02:20:47 +0800 (Wed, 28 Nov 2007) | 1 line
  
  Fix CXF-1227.
........
  r598727 | bimargulies | 2007-11-28 02:21:16 +0800 (Wed, 28 Nov 2007) | 1 line
  
  New unit test for mapCharset.
........
  r598839 | bimargulies | 2007-11-28 09:06:45 +0800 (Wed, 28 Nov 2007) | 2 lines

  CXF-1224
  
  Allow applications to supply JAXB context and Marshaller properties. This allows complete control of prefixes on the wire for types managed by JAXB, aside from other sneaky tricks.
........

Added:
    incubator/cxf/branches/2.0.x-fixes/common/common/src/test/java/org/apache/cxf/helpers/HttpHeaderHelperTest.java
      - copied unchanged from r598839, incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/helpers/HttpHeaderHelperTest.java
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/fortest/
      - copied from r598839, incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/fortest/
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/fortest/unqualified/
      - copied from r598839, incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/fortest/unqualified/
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/fortest/unqualified/UnqualifiedBean.java
      - copied unchanged from r598839, incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/fortest/unqualified/UnqualifiedBean.java
Modified:
    incubator/cxf/branches/2.0.x-fixes/   (props changed)
    incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/HttpHeaderHelper.java
    incubator/cxf/branches/2.0.x-fixes/distribution/src/main/release/samples/js_client/README.txt
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java
    incubator/cxf/branches/2.0.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java

Propchange: incubator/cxf/branches/2.0.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/HttpHeaderHelper.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/HttpHeaderHelper.java?rev=598863&r1=598862&r2=598863&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/HttpHeaderHelper.java (original)
+++ incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/HttpHeaderHelper.java Tue Nov 27 20:28:19 2007
@@ -20,6 +20,8 @@
 package org.apache.cxf.helpers;
 
 import java.nio.charset.Charset;
+import java.nio.charset.IllegalCharsetNameException;
+import java.nio.charset.UnsupportedCharsetException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -76,11 +78,13 @@
         if (newenc == null) {
             try {
                 newenc = Charset.forName(enc).name();
-            } catch (Exception ex) {
-                //ignore
+            } catch (IllegalCharsetNameException icne) {
+                return null;
+            } catch (UnsupportedCharsetException uce) {
+                return null;
             }
             encodings.put(enc, newenc);
         }
-        return newenc == null ? enc : newenc;
+        return newenc;
     }
 }

Modified: incubator/cxf/branches/2.0.x-fixes/distribution/src/main/release/samples/js_client/README.txt
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/distribution/src/main/release/samples/js_client/README.txt?rev=598863&r1=598862&r2=598863&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/distribution/src/main/release/samples/js_client/README.txt (original)
+++ incubator/cxf/branches/2.0.x-fixes/distribution/src/main/release/samples/js_client/README.txt Tue Nov 27 20:28:19 2007
@@ -7,13 +7,16 @@
 The client side makes call using JAX-WS APIs. It uses the Mozilla Rhino library 
 to read the JavaScript file and run it.
 
+This demo only implements the client-side logic, and relies on the server
+provided by the wsdl_first demo.
+
 
 Building and running the demo server using ant
 ----------------------------------------------
 
-From the base directory of this sample (i.e., where this README file is
-located), the Ant build.xml file can be used to build and run the demo. 
-The server and client targets automatically build the demo.
+From the samples/wsdl_first directory, the Ant build.xml file
+can be used to build and run the demo.
+
 Using either UNIX or Windows:
 
   ant build

Modified: incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java?rev=598863&r1=598862&r2=598863&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java (original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java Tue Nov 27 20:28:19 2007
@@ -26,7 +26,9 @@
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -84,6 +86,8 @@
 
     private boolean simpleBindingEnabled = true;
     
+    private Map<String, Object> jaxbContextProperties;
+    
     private DynamicClientFactory(Bus bus) {
         this.bus = bus;
     }
@@ -225,12 +229,17 @@
         }
 
         JAXBContext context;
-
+        Map<String, Object> contextProperties = jaxbContextProperties;
+        
+        if (contextProperties == null) {
+            contextProperties = Collections.emptyMap();
+        }
+        
         try {
             if (StringUtils.isEmpty(packageList)) {
-                context = JAXBContext.newInstance(new Class[0]);
+                context = JAXBContext.newInstance(new Class[0], contextProperties);
             } else {
-                context = JAXBContext.newInstance(packageList, cl);
+                context = JAXBContext.newInstance(packageList, cl, contextProperties);
             }
         } catch (JAXBException jbe) {
             throw new IllegalStateException("Unable to create JAXBContext for generated packages: "
@@ -445,5 +454,21 @@
             }
             return null;
         }
+    }
+
+    /**
+     * Return the map of JAXB context properties used at the time that we create new contexts.
+     * @return the map
+     */
+    public Map<String, Object> getJaxbContextProperties() {
+        return jaxbContextProperties;
+    }
+
+    /**
+     * Set the map of JAXB context properties used at the time that we create new contexts.
+     * @param jaxbContextProperties
+     */
+    public void setJaxbContextProperties(Map<String, Object> jaxbContextProperties) {
+        this.jaxbContextProperties = jaxbContextProperties;
     }
 }

Modified: incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?rev=598863&r1=598862&r2=598863&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java (original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java Tue Nov 27 20:28:19 2007
@@ -27,6 +27,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -97,6 +98,9 @@
 
     Class<?> cls;
 
+    private Map<String, Object> contextProperties = Collections.emptyMap();
+    private Map<String, Object> marshallerProperties = Collections.emptyMap();
+
     
     public JAXBDataBinding() {
     }
@@ -123,13 +127,14 @@
     @SuppressWarnings("unchecked")
     public <T> DataWriter<T> createWriter(Class<T> c) {
         if (c == XMLStreamWriter.class) {
-            return (DataWriter<T>)new DataWriterImpl<XMLStreamWriter>(context);
+            return (DataWriter<T>)new DataWriterImpl<XMLStreamWriter>(context, marshallerProperties);
         } else if (c == OutputStream.class) {
-            return (DataWriter<T>)new DataWriterImpl<OutputStream>(context);            
+            return (DataWriter<T>)new DataWriterImpl<OutputStream>(context, marshallerProperties);            
         } else if (c == XMLEventWriter.class) {
-            return (DataWriter<T>)new DataWriterImpl<XMLEventWriter>(context);           
+            return (DataWriter<T>)new DataWriterImpl<XMLEventWriter>(context,
+                                                                     marshallerProperties);           
         } else if (c == Node.class) {
-            return (DataWriter<T>)new DataWriterImpl<Node>(context);      
+            return (DataWriter<T>)new DataWriterImpl<Node>(context, marshallerProperties);      
         }
         
         return null;
@@ -312,6 +317,11 @@
             map.put("com.sun.xml.bind.defaultNamespaceRemap", defaultNs);
         }
         
+        if (contextProperties != null) {
+            //add any specified context properties into the properties map
+            map.putAll(contextProperties);
+        }
+        
         //try and read any jaxb.index files that are with the other classes.  This should 
         //allow loading of extra classes (such as subclasses for inheritance reasons) 
         //that are in the same package.
@@ -425,6 +435,27 @@
      */
     public Map<String, String> getDeclaredNamespaceMappings() {
         return null;
+    }
+
+    /**
+     * Return a map of properties. These properties are passed to
+     * JAXBContext.newInstance when this object creates a context.
+     * @return the map of JAXB context properties.
+     */
+    public Map<String, Object> getContextProperties() {
+        return contextProperties;
+    }
+
+    /**
+     * Set a map of JAXB context properties. These properties are passed
+     * to JAXBContext.newInstance when this object creates a context.
+     * Note that if you create a JAXB context elsewhere, you will 
+     * not respect these properties unless you handle it manually. 
+     * 
+     * @param contextProperties map of properties.
+     */
+    public void setContextProperties(Map<String, Object> contextProperties) {
+        this.contextProperties = contextProperties;
     }
     
     

Modified: incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java?rev=598863&r1=598862&r2=598863&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java (original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java Tue Nov 27 20:28:19 2007
@@ -33,12 +33,16 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.ResourceBundle;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
+import javax.xml.bind.PropertyException;
 import javax.xml.bind.Unmarshaller;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
@@ -58,6 +62,7 @@
 
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.service.model.MessagePartInfo;
@@ -72,11 +77,14 @@
  */
 public final class JAXBEncoderDecoder {
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(JAXBEncoderDecoder.class);
+    private static final Logger LOG = LogUtils.getLogger(JAXBEncoderDecoder.class);
     
     private JAXBEncoderDecoder() {
     }
 
-    private static Marshaller createMarshaller(JAXBContext context, Class<?> cls) throws JAXBException {
+    private static Marshaller createMarshaller(JAXBContext context, Class<?> cls,
+                                               Map<String, Object> marshallerProperties)
+        throws JAXBException {
         Marshaller jm = null;
         if (context == null) {
             context = JAXBContext.newInstance(cls);
@@ -85,6 +93,15 @@
         jm = context.createMarshaller();
         jm.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
         jm.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
+        if (marshallerProperties != null) {
+            for (Map.Entry<String, Object> propEntry : marshallerProperties.entrySet()) {
+                try {
+                    jm.setProperty(propEntry.getKey(), propEntry.getValue());
+                } catch (PropertyException pe) {
+                    LOG.log(Level.INFO, "PropertyException setting Marshaller properties", pe);
+                }
+            }
+        }
 
         return jm;
     }
@@ -95,7 +112,8 @@
                                 Object elValue, 
                                 MessagePartInfo part,
                                 Object source, 
-                                AttachmentMarshaller am) {
+                                AttachmentMarshaller am,
+                                Map<String, Object> marshallerProperties) {
         Class<?> cls = null;
         if (part != null) {
             cls = part.getTypeClass();
@@ -111,7 +129,7 @@
         }
         
         try {
-            Marshaller u = createMarshaller(context, cls);
+            Marshaller u = createMarshaller(context, cls, marshallerProperties);
             try {
                 // The Marshaller.JAXB_FRAGMENT will tell the Marshaller not to
                 // generate the xml declaration.
@@ -196,7 +214,8 @@
                                 Exception elValue, 
                                 MessagePartInfo part,
                                 Object source, 
-                                AttachmentMarshaller am) {
+                                AttachmentMarshaller am,
+                                Map<String, Object> marshallerProperties) {
         XMLStreamWriter writer = getStreamWriter(source);
         QName qn = part.getElementQName();
         try {
@@ -209,8 +228,9 @@
             XmlAccessType accessType = accessorType != null 
                 ? accessorType.value() : XmlAccessType.PUBLIC_MEMBER;
             String namespace = part.getElementQName().getNamespaceURI();
-            Marshaller u = createMarshaller(context, cls);
+            Marshaller u = createMarshaller(context, cls, marshallerProperties);
             try {
+                // override anything the user asked us to set.
                 // The Marshaller.JAXB_FRAGMENT will tell the Marshaller not to
                 // generate the xml declaration.
                 u.setProperty(Marshaller.JAXB_FRAGMENT, true);
@@ -347,16 +367,18 @@
         throw new Fault(new Message("UNKNOWN_SOURCE", BUNDLE, source.getClass().getName()));
     }
 
-    public static void marshall(JAXBContext context, Schema schema, Object elValue, Object source) {
-        marshall(context, schema, elValue, null, source, null);
+    public static void marshall(JAXBContext context, Schema schema, Object elValue, Object source,
+                                Map<String, Object> marshallerProperties) {
+        marshall(context, schema, elValue, null, source, null, marshallerProperties);
     }
     
     @SuppressWarnings("unchecked")
     public static void marshallNullElement(JAXBContext context, Schema schema, 
-                                               Object source, MessagePartInfo part) {
+                                           Object source, MessagePartInfo part,
+                                           Map<String, Object> marshallerProperties) {
         Class<?> clazz = part != null ? (Class) part.getTypeClass() : null;
         try {
-            Marshaller u = createMarshaller(context, clazz);
+            Marshaller u = createMarshaller(context, clazz, marshallerProperties);
             u.setSchema(schema);
             try {
                 // The Marshaller.JAXB_FRAGMENT will tell the Marshaller not to
@@ -375,8 +397,9 @@
     public static void marshall(JAXBContext context, Schema schema, 
                                 Object elValue, 
                                 MessagePartInfo part,
-                                Object source) {
-        marshall(context, schema, elValue, part, source, null);
+                                Object source,
+                                Map<String, Object> marshallerProperties) {
+        marshall(context, schema, elValue, part, source, null, marshallerProperties);
     }
 
     private static Unmarshaller createUnmarshaller(JAXBContext context, Class<?> cls) throws JAXBException {

Modified: incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java?rev=598863&r1=598862&r2=598863&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java (original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java Tue Nov 27 20:28:19 2007
@@ -19,6 +19,9 @@
 
 package org.apache.cxf.jaxb.io;
 
+import java.util.Collections;
+import java.util.Map;
+
 import javax.xml.bind.JAXBContext;
 
 import org.apache.cxf.databinding.DataWriter;
@@ -29,10 +32,18 @@
 import org.apache.ws.commons.schema.XmlSchemaElement;
 
 public class DataWriterImpl<T> extends JAXBDataBase implements DataWriter<T> {
+    
+    private Map<String, Object> marshallerProperties = Collections.emptyMap();
+    
     public DataWriterImpl(JAXBContext ctx) {
         super(ctx);
     }
     
+    public DataWriterImpl(JAXBContext ctx, Map<String, Object> marshallerProperties) {
+        super(ctx);
+        this.marshallerProperties = marshallerProperties;
+    }
+    
     public void write(Object obj, T output) {
         write(obj, null, output);
     }
@@ -46,13 +57,16 @@
                 && Boolean.TRUE.equals(part.getProperty(JAXBDataBinding.class.getName() 
                                                         + ".CUSTOM_EXCEPTION"))) {
                 JAXBEncoderDecoder.marshallException(getJAXBContext(), getSchema(), (Exception)obj,
-                                                     part, output, getAttachmentMarshaller());                
+                                                     part, output, getAttachmentMarshaller(),
+                                                     marshallerProperties);                
             } else {
                 JAXBEncoderDecoder.marshall(getJAXBContext(), getSchema(), obj, part, output, 
-                                        getAttachmentMarshaller());
+                                        getAttachmentMarshaller(),
+                                        marshallerProperties);
             }
         } else if (obj == null && needToRender(obj, part)) {
-            JAXBEncoderDecoder.marshallNullElement(getJAXBContext(), getSchema(), output, part);
+            JAXBEncoderDecoder.marshallNullElement(getJAXBContext(), getSchema(), output, part,
+                                                   marshallerProperties);
         }
     }
 
@@ -62,5 +76,13 @@
             return element.isNillable() && element.getMinOccurs() > 0;
         }
         return false;
+    }
+
+    public Map<String, Object> getMarshallerProperties() {
+        return marshallerProperties;
+    }
+
+    public void setMarshallerProperties(Map<String, Object> marshallerProperties) {
+        this.marshallerProperties = marshallerProperties;
     }
 }

Modified: incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java?rev=598863&r1=598862&r2=598863&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java (original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java Tue Nov 27 20:28:19 2007
@@ -21,9 +21,12 @@
 
 
 import java.io.OutputStream;
+import java.io.StringWriter;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.logging.Logger;
 
@@ -34,11 +37,13 @@
 import javax.xml.bind.JAXBContext;
 import javax.xml.stream.XMLEventReader;
 import javax.xml.stream.XMLEventWriter;
+import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
 import org.w3c.dom.Node;
 
+import com.sun.xml.bind.api.JAXBRIContext;
 import com.sun.xml.bind.v2.runtime.JAXBContextImpl;
 
 import org.apache.cxf.Bus;
@@ -47,6 +52,7 @@
 import org.apache.cxf.databinding.DataReader;
 import org.apache.cxf.databinding.DataWriter;
 import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.jaxb.fortest.unqualified.UnqualifiedBean;
 import org.apache.cxf.jaxb.io.DataReaderImpl;
 import org.apache.cxf.jaxb.io.DataWriterImpl;
 import org.apache.cxf.jaxb_misc.ObjectFactory;
@@ -191,6 +197,27 @@
             JAXBContextImpl rictx = (JAXBContextImpl)ctx;
             assertNotNull(rictx.getBeanInfo(TestJAXBClass.class));
         }
+    }
+    
+    @Test 
+    public void testContextProperties() throws Exception {
+        JAXBDataBinding db = new JAXBDataBinding();
+        Map<String, Object> contextProperties = new HashMap<String, Object>();
+        contextProperties.put(JAXBRIContext.DEFAULT_NAMESPACE_REMAP, "uri:ultima:thule");
+        db.setContextProperties(contextProperties);
+        Set<Class<?>> classes = new HashSet<Class<?>>();
+        classes.add(UnqualifiedBean.class);
+        db.setContext(db.createJAXBContext(classes));
+        DataWriter<XMLStreamWriter> writer = db.createWriter(XMLStreamWriter.class);
+        XMLOutputFactory writerFactory = XMLOutputFactory.newInstance();
+        StringWriter stringWriter = new StringWriter();
+        XMLStreamWriter xmlWriter = writerFactory.createXMLStreamWriter(stringWriter);
+        UnqualifiedBean bean = new UnqualifiedBean();
+        bean.setAriadne("spider");
+        writer.write(bean, xmlWriter);
+        xmlWriter.flush();
+        String xml = stringWriter.toString();
+        assertTrue(xml.contains("uri:ultima:thule"));
     }
     
 }

Modified: incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java?rev=598863&r1=598862&r2=598863&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java (original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java Tue Nov 27 20:28:19 2007
@@ -25,6 +25,9 @@
 import java.io.StringWriter;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 
 import javax.xml.XMLConstants;
 import javax.xml.bind.JAXBContext;
@@ -45,6 +48,8 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
+import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
+
 import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.jaxb_form.ObjectWithQualifiedElementElement;
@@ -58,6 +63,7 @@
 import org.apache.hello_world_soap_http.types.GreetMeResponse;
 import org.apache.hello_world_soap_http.types.StringStruct;
 import org.apache.type_test.doc.TypeTestPortType;
+
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -76,13 +82,8 @@
     JAXBContext context;
     Schema schema;
     
-    public JAXBEncoderDecoderTest() {
-    }
-
+    private Map<String, Object> emptyMarshallerProperties = Collections.emptyMap();
     
-    public JAXBEncoderDecoderTest(String arg0) {
-    }
-
     @Before
     public void setUp() throws Exception {
         
@@ -118,7 +119,7 @@
 
         Node node;
         try {
-            JAXBEncoderDecoder.marshall(context, null, null, part, elNode);
+            JAXBEncoderDecoder.marshall(context, null, null, part, elNode, emptyMarshallerProperties);
             fail("Should have thrown a Fault");
         } catch (Fault ex) {
             //expected - not a valid object
@@ -129,7 +130,7 @@
         QName elName = new QName(wrapperAnnotation.targetNamespace(),
                                  wrapperAnnotation.localName());
         part.setElementQName(elName);
-        JAXBEncoderDecoder.marshall(context, null, obj, part, elNode);
+        JAXBEncoderDecoder.marshall(context, null, obj, part, elNode, emptyMarshallerProperties);
         node = elNode.getLastChild();
         //The XML Tree Looks like
         //<GreetMe><requestType>Hello</requestType></GreetMe>
@@ -146,10 +147,11 @@
         //stringStruct.setArg0("hello");
         stringStruct.setArg1("world");
         // Marshal without the schema should work.
-        JAXBEncoderDecoder.marshall(context, null, stringStruct, part,  elNode);
+        JAXBEncoderDecoder.marshall(context, null, stringStruct, part,  elNode, emptyMarshallerProperties);
         try {
             // Marshal with the schema should get an exception.
-            JAXBEncoderDecoder.marshall(context, schema, stringStruct, part,  elNode);
+            JAXBEncoderDecoder.marshall(context, schema, stringStruct, part,  elNode, 
+                                        emptyMarshallerProperties);
             fail("Marshal with schema should have thrown a Fault");
         } catch (Fault ex) {
             //expected - not a valid object
@@ -172,7 +174,7 @@
         XMLOutputFactory opFactory = XMLOutputFactory.newInstance();
         opFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE);
         XMLEventWriter writer = opFactory.createXMLEventWriter(stringWriter);
-        JAXBEncoderDecoder.marshall(context, null, testObject, part, writer);
+        JAXBEncoderDecoder.marshall(context, null, testObject, part, writer, emptyMarshallerProperties);
         writer.flush();
         writer.close();
         String xmlResult = stringWriter.toString();
@@ -180,6 +182,45 @@
         // so that it could be examined inside the debugger to see how JAXB works.
         assertTrue(xmlResult.contains("ns3:string2"));
     }
+    
+    @Test
+    public void testCustomNamespaces() throws Exception {
+        Map<String, Object> marshallProps = new HashMap<String, Object>();
+        NamespacePrefixMapper mapper = new NamespacePrefixMapper() {
+
+            @Override
+            public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
+                if ("http://apache.org/hello_world_soap_http/types".equals(namespaceUri)) {
+                    return "Omnia";
+                } else if ("http://cxf.apache.org/jaxb_form".equals(namespaceUri)) {
+                    return "Gallia";
+                }
+                return suggestion;
+            } 
+        };
+        marshallProps.put("com.sun.xml.bind.namespacePrefixMapper", mapper);
+        ObjectWithQualifiedElementElement testObject = new ObjectWithQualifiedElementElement();
+        testObject.setString1("twine");
+        testObject.setString2("cord");
+        
+        QName elName = new QName(wrapperAnnotation.targetNamespace(),
+                                 wrapperAnnotation.localName());
+        MessagePartInfo part = new MessagePartInfo(elName, null);
+        part.setElement(true);
+        part.setElementQName(elName);
+        
+        StringWriter stringWriter = new StringWriter();
+        XMLOutputFactory opFactory = XMLOutputFactory.newInstance();
+        opFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE);
+        XMLEventWriter writer = opFactory.createXMLEventWriter(stringWriter);
+        JAXBEncoderDecoder.marshall(context, null, testObject, part, writer, marshallProps);
+        writer.flush();
+        writer.close();
+        String xmlResult = stringWriter.toString();
+        // the following is a bit of a crock, but, to tell the truth, this test case most exists
+        // so that it could be examined inside the debugger to see how JAXB works.
+        assertTrue(xmlResult.contains("Gallia:string2"));
+    }
 
     @Test
     public void testMarshallIntoStax() throws Exception {
@@ -198,7 +239,7 @@
 
         //STARTDOCUMENT/ENDDOCUMENT is not required
         //writer.add(eFactory.createStartDocument("utf-8", "1.0"));        
-        JAXBEncoderDecoder.marshall(context, null, obj, part, writer);
+        JAXBEncoderDecoder.marshall(context, null, obj, part, writer, emptyMarshallerProperties);
         //writer.add(eFactory.createEndDocument());
         writer.flush();
         writer.close();
@@ -256,7 +297,8 @@
         Document doc = DOMUtils.createDocument();
         Element elNode = doc.createElementNS(elName.getNamespaceURI(), 
                                              elName.getLocalPart());
-        JAXBEncoderDecoder.marshall(context, null, new String("TestSOAPMessage"), part,  elNode);
+        JAXBEncoderDecoder.marshall(context, null, 
+                                    new String("TestSOAPMessage"), part,  elNode, emptyMarshallerProperties);
         
         assertNotNull(elNode.getChildNodes());
         assertEquals("TestSOAPMessage", elNode.getFirstChild().getFirstChild().getNodeValue());
@@ -366,7 +408,7 @@
 
         //STARTDOCUMENT/ENDDOCUMENT is not required
         //writer.add(eFactory.createStartDocument("utf-8", "1.0"));        
-        JAXBEncoderDecoder.marshall(context, null, obj, writer);
+        JAXBEncoderDecoder.marshall(context, null, obj, writer, emptyMarshallerProperties);
         //writer.add(eFactory.createEndDocument());
         writer.flush();
         writer.close();

Modified: incubator/cxf/branches/2.0.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java?rev=598863&r1=598862&r2=598863&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java (original)
+++ incubator/cxf/branches/2.0.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java Tue Nov 27 20:28:19 2007
@@ -49,7 +49,8 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
-//import org.apache.cxf.Bus;
+import com.sun.xml.bind.api.JAXBRIContext;
+
 import org.apache.cxf.Bus;
 import org.apache.cxf.binding.soap.Soap11;
 import org.apache.cxf.bus.CXFBusFactory;
@@ -838,28 +839,30 @@
     }
     
     @Test
-    public void testDynamicClientFactory()  {
+    public void testDynamicClientFactory() throws Exception {
         URL wsdl = getClass().getResource("/wsdl/hello_world.wsdl");
         assertNotNull(wsdl);
         String wsdlUrl = null;
-        try {
-            wsdlUrl = wsdl.toURI().toString();
-        } catch (URISyntaxException e) {
-            e.printStackTrace();
-            fail("Can't get the hello_world.wsdl url");            
-        }
-        try {
-            //TODO test fault exceptions 
-            DynamicClientFactory dcf = DynamicClientFactory.newInstance();
-            Client client = dcf.createClient(wsdlUrl, serviceName, portName);
-            client.invoke("greetMe", "test");        
-            Object[] result = client.invoke("sayHi");
-            assertNotNull("no response received from service", result);
-            assertEquals("Bonjour", result[0]);
-        } catch (Exception e) {            
-            e.printStackTrace();
-            fail("There is some excpetion happened ");
-        }    
+        wsdlUrl = wsdl.toURI().toString();
+
+        //TODO test fault exceptions 
+        DynamicClientFactory dcf = DynamicClientFactory.newInstance();
+        Client client = dcf.createClient(wsdlUrl, serviceName, portName);
+        client.invoke("greetMe", "test");        
+        Object[] result = client.invoke("sayHi");
+        assertNotNull("no response received from service", result);
+        assertEquals("Bonjour", result[0]);
+        //TODO: the following isn't a real test. We need to test against a service
+        // that would actually notice the difference. At least it ensures that 
+        // specifying the property does not explode.
+        Map<String, Object> jaxbContextProperties = new HashMap<String, Object>();
+        jaxbContextProperties.put(JAXBRIContext.DEFAULT_NAMESPACE_REMAP, "uri:ultima:thule");
+        dcf.setJaxbContextProperties(jaxbContextProperties);
+        client = dcf.createClient(wsdlUrl, serviceName, portName);
+        client.invoke("greetMe", "test");        
+        result = client.invoke("sayHi");
+        assertNotNull("no response received from service", result);
+        assertEquals("Bonjour", result[0]);
     }
     
     @Test