You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2009/03/19 14:20:28 UTC

svn commit: r755987 - in /cxf/branches/2.1.x-fixes: ./ rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/ rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ rt/frontend/jaxrs/src/main/java/o...

Author: sergeyb
Date: Thu Mar 19 13:20:27 2009
New Revision: 755987

URL: http://svn.apache.org/viewvc?rev=755987&view=rev
Log:
Merged revisions 747390,747407 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r747390 | sergeyb | 2009-02-24 14:17:23 +0000 (Tue, 24 Feb 2009) | 1 line
  
  JAXRS: ProviderFactory cleanup, enhancing jaxrs:client
........
  r747407 | sergeyb | 2009-02-24 15:46:30 +0000 (Tue, 24 Feb 2009) | 1 line
  
  Fixing test failure
........

Modified:
    cxf/branches/2.1.x-fixes/   (props changed)
    cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java   (props changed)
    cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java   (props changed)
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSClientFactoryBeanDefinitionParser.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/resources/schemas/jaxrs.xsd
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java
    cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java
    cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
    cxf/branches/2.1.x-fixes/systests/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml

Propchange: cxf/branches/2.1.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Mar 19 13:20:27 2009
@@ -1 +1 @@
-/cxf/trunk:686333-686363,686764,686820,687096,687194,687363,687387,687463,687543,687722,687798,687814,687817,687891,687910,687914,688086,688102,688133,688596,688735,688870,689572,689596,689855,689924,690067,690289,691246,691271,691295,691338,691355,691488,691602,691646,691706,691728,692116,692157,692310,692466,692499,693653,693819,694179,694263,694417,694716,694744,694747,694795,694869,694981,694987,694993,695041,695096,695396,695484,695537,695552,695561,695619,695684,695835,695840,695868,695935,695977,696016,696094,696433,696720,697085,697868,698128,699289,700261,700507,700602,700981,701316,701783,701830,701862,702187,702205-702248,702267,702547,702561,702580,702602,702609,702616,702653,702656,702957,703191,703239,703309,703501,703513,703548,704584,704937,704997,705150,705235,705274,705340,705446,705548,705614,705692,705708,706482,706631,706675,706900,706909,707034,707089,707100,707902,708035,708044,708074,708410,708417,708550,708554,709353-709354,709425,710076,710150,71015
 4,711193,711388,711410,711490,711635,711949,711975,712194,712198,712238,712272,712299,712312,712670,712893,713082,713095-713096,713099,713584,713597,713737,713804,713899,714167-714168,714245,714255,717937-717961,718281-718448,718565,718620,718640,718665,718970,719017,719210,719215-719218,719222-719273,719305,719327-719680,720053,720119-720218,720238,720293-720316,720497,721221,721241,721501,722117,722129,722412,722988,723024,723338,723378,723716-723791,724333-724372,724433-724438,724449,724481,724485,724668,724780,724782,724785,724793,724795,724940,725071,725316,725332,725335,725348,725364,725418,725425-725426,725455,725506,725554,725562,725651,725671,725688,725754,725773,725799,725839,726342,726524,726631,726634,726637,726639,726692,726724,726769,726992,727096,727445,727521,727568,727692,727754,727781,727792,728070,728087,728696,728897,729051,729430,729449,729460,729863,730082,730139,730889,730891,731598,731604,731615,731631,731635,732036,732050,732320,732363,732411,732450,
 732710,732773,732827,732829,733512,733582,733901,734367,734462,734666,734762,734772,734812,734836,734965,735113,735252,735722-735723,735729,735734,735751,735782,735787,735987,736332,736343,736352,736358-736362,736408,736423,736448,736491,736621,736726,736736,736738-736739,736766,736825,736852,737032,737046,737061,737069,737124,737237,737246,737299,737356,737494,737498,737761,737817,737849,737855,737994,738166,738178,738201,738210,738242,738244,738265,738516,738583,738863,738937,738983,739366-739367,739451-739452,739799-739800,739867,739876-739877,739922,739937,739990,740045,740108,740154,740186,740197,740255,740706,740730,740810,740844,740886,740902,740923,740994,741058,741124,741152,741188,741521,741529,741879,742914,743087,743439,743441,743459,743469,743825,743965,743967,744104-744138,744175,744195,744237,744756,745214,745243,745472,745474,745560,745578,745586,745592,745638,745950,746012,746019-746020,746256,746266,746306,746357,746373-746374,746947,747026,747070,747217,74
 7386,747406,747454,747649,747766,747986,748159,748192,748223,748305,748313,748603-748604,748768,749420,749449,749454-749456,749505,749511,749513,749584,749767,749771,749799,749890,750059-750060,750302,750591,750689,750935,751067-751110,751233,751527,751567,751576,751607,751732,751740,751787,751828,751840,751972-751974,752122,752132,752136,752558,752613,752680,752728,752753,752849,752880-752881,752883,752961,752992,753205,753293,753335,753338,753388,755153,755514,755806
+/cxf/trunk:686333-686363,686764,686820,687096,687194,687363,687387,687463,687543,687722,687798,687814,687817,687891,687910,687914,688086,688102,688133,688596,688735,688870,689572,689596,689855,689924,690067,690289,691246,691271,691295,691338,691355,691488,691602,691646,691706,691728,692116,692157,692310,692466,692499,693653,693819,694179,694263,694417,694716,694744,694747,694795,694869,694981,694987,694993,695041,695096,695396,695484,695537,695552,695561,695619,695684,695835,695840,695868,695935,695977,696016,696094,696433,696720,697085,697868,698128,699289,700261,700507,700602,700981,701316,701783,701830,701862,702187,702205-702248,702267,702547,702561,702580,702602,702609,702616,702653,702656,702957,703191,703239,703309,703501,703513,703548,704584,704937,704997,705150,705235,705274,705340,705446,705548,705614,705692,705708,706482,706631,706675,706900,706909,707034,707089,707100,707902,708035,708044,708074,708410,708417,708550,708554,709353-709354,709425,710076,710150,71015
 4,711193,711388,711410,711490,711635,711949,711975,712194,712198,712238,712272,712299,712312,712670,712893,713082,713095-713096,713099,713584,713597,713737,713804,713899,714167-714168,714245,714255,717937-717961,718281-718448,718565,718620,718640,718665,718970,719017,719210,719215-719218,719222-719273,719305,719327-719680,720053,720119-720218,720238,720293-720316,720497,721221,721241,721501,722117,722129,722412,722988,723024,723338,723378,723716-723791,724333-724372,724433-724438,724449,724481,724485,724668,724780,724782,724785,724793,724795,724940,725071,725316,725332,725335,725348,725364,725418,725425-725426,725455,725506,725554,725562,725651,725671,725688,725754,725773,725799,725839,726342,726524,726631,726634,726637,726639,726692,726724,726769,726992,727096,727445,727521,727568,727692,727754,727781,727792,728070,728087,728696,728897,729051,729430,729449,729460,729863,730082,730139,730889,730891,731598,731604,731615,731631,731635,732036,732050,732320,732363,732411,732450,
 732710,732773,732827,732829,733512,733582,733901,734367,734462,734666,734762,734772,734812,734836,734965,735113,735252,735722-735723,735729,735734,735751,735782,735787,735987,736332,736343,736352,736358-736362,736408,736423,736448,736491,736621,736726,736736,736738-736739,736766,736825,736852,737032,737046,737061,737069,737124,737237,737246,737299,737356,737494,737498,737761,737817,737849,737855,737994,738166,738178,738201,738210,738242,738244,738265,738516,738583,738863,738937,738983,739366-739367,739451-739452,739799-739800,739867,739876-739877,739922,739937,739990,740045,740108,740154,740186,740197,740255,740706,740730,740810,740844,740886,740902,740923,740994,741058,741124,741152,741188,741521,741529,741879,742914,743087,743439,743441,743459,743469,743825,743965,743967,744104-744138,744175,744195,744237,744756,745214,745243,745472,745474,745560,745578,745586,745592,745638,745950,746012,746019-746020,746256,746266,746306,746357,746373-746374,746947,747026,747070,747217,74
 7386,747390,747406-747407,747454,747649,747766,747986,748159,748192,748223,748305,748313,748603-748604,748768,749420,749449,749454-749456,749505,749511,749513,749584,749767,749771,749799,749890,750059-750060,750302,750591,750689,750935,751067-751110,751233,751527,751567,751576,751607,751732,751740,751787,751828,751840,751972-751974,752122,752132,752136,752558,752613,752680,752728,752753,752849,752880-752881,752883,752961,752992,753205,753293,753335,753338,753388,755153,755514,755806

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

Propchange: cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Mar 19 13:20:27 2009
@@ -1 +1 @@
-/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java:743825,744104-744138,745472,745474,746947,747026,747070,755514,755806
+/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java:743825,744104-744138,745472,745474,746947,747026,747070,747390,747407,755514,755806

Propchange: cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Mar 19 13:20:27 2009
@@ -1 +1 @@
-/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java:743825,744104-744138,745472,745474,746947,747026,747070,755514,755806
+/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java:743825,744104-744138,745472,745474,746947,747026,747070,747390,747407,755514,755806

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java Thu Mar 19 13:20:27 2009
@@ -18,6 +18,9 @@
  */
 package org.apache.cxf.jaxrs;
 
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.cxf.BusException;
 import org.apache.cxf.binding.BindingConfiguration;
 import org.apache.cxf.binding.BindingFactory;
@@ -46,7 +49,9 @@
  */
 public class AbstractJAXRSFactoryBean extends AbstractEndpointFactory {
     
+    protected List<String> schemaLocations;
     protected JAXRSServiceFactoryBean serviceFactory;
+    protected List<?> entityProviders;
     
     protected AbstractJAXRSFactoryBean() {
         this(new JAXRSServiceFactoryBean());
@@ -159,5 +164,30 @@
         return ep;
     }
     
+    public void setSchemaLocation(String schema) {
+        setSchemaLocations(Collections.singletonList(schema));    
+    }
+    
+    public void setSchemaLocations(List<String> schemas) {
+        this.schemaLocations = schemas;    
+    }
+    
+    /**
+     * @return the entityProviders
+     */
+    public List<?> getProviders() {
+        return entityProviders;
+    }
+
+    /**
+     * @param entityProviders the entityProviders to set
+     */
+    public void setProviders(List<? extends Object> providers) {
+        this.entityProviders = providers;
+    }
+    
+    public void setProvider(Object provider) {
+        setProviders(Collections.singletonList(provider));
+    }
 
 }

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java Thu Mar 19 13:20:27 2009
@@ -66,10 +66,8 @@
     private Invoker invoker;
     private boolean start = true;
     private List<Object> serviceBeans;
-    private List<?> entityProviders;
     private Map<Object, Object> languageMappings;
     private Map<Object, Object> extensionMappings;
-    private List<String> schemaLocations;
     
     public JAXRSServerFactoryBean() {
         this(new JAXRSServiceFactoryBean());
@@ -79,10 +77,6 @@
         super(sf);
     }
     
-    public void setSchemaLocations(List<String> schemas) {
-        this.schemaLocations = schemas;    
-    }
-    
     public void setStaticSubresourceResolution(boolean enableStatic) {
         serviceFactory.setEnableStaticResolution(enableStatic);
     }
@@ -112,15 +106,18 @@
             } else {
                 ep.getService().setInvoker(invoker);
             }
+            
             if (entityProviders != null) {
                 ProviderFactory.getInstance(getAddress()).setUserProviders(entityProviders); 
             }
-            ProviderFactory.getInstance(getAddress()).setRequestPreprocessor(
-                new RequestPreprocessor(languageMappings, extensionMappings));
             if (schemaLocations != null) {
                 ProviderFactory.getInstance(getAddress()).setSchemaLocations(schemaLocations);
             }
             
+            ProviderFactory.getInstance(getAddress()).setRequestPreprocessor(
+                new RequestPreprocessor(languageMappings, extensionMappings));
+            
+            
             if (start) {
                 server.start();
             }
@@ -160,14 +157,6 @@
         extensionMappings = extMaps;
     }
     
-    public JAXRSServiceFactoryBean getServiceFactory() {
-        return serviceFactory;
-    }
-
-    public void setServiceFactory(JAXRSServiceFactoryBean serviceFactory) {
-        this.serviceFactory = serviceFactory;
-    }
-    
     public List<Class> getResourceClasses() {
         return serviceFactory.getResourceClasses();
     }
@@ -199,20 +188,6 @@
         resourceProviders.put(c, rp);
     }
 
-    /**
-     * @return the entityProviders
-     */
-    public List<?> getProviders() {
-        return entityProviders;
-    }
-
-    /**
-     * @param entityProviders the entityProviders to set
-     */
-    public void setProviders(List<? extends Object> providers) {
-        this.entityProviders = providers;
-    }
-    
     public void setInvoker(Invoker invoker) {
         this.invoker = invoker;
     }

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java Thu Mar 19 13:20:27 2009
@@ -266,7 +266,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    protected static void writeBody(Object o, Class<?> cls, Type type, Annotation[] anns, 
+    protected void writeBody(Object o, Message m, Class<?> cls, Type type, Annotation[] anns, 
         MultivaluedMap<String, String> headers, OutputStream os) {
         
         if (o == null) {
@@ -275,11 +275,15 @@
         
         MediaType contentType = MediaType.valueOf(headers.getFirst("Content-Type")); 
         
-        MessageBodyWriter mbr = ProviderFactory.getInstance().createMessageBodyWriter(
-            cls, type, anns, contentType, new MessageImpl());
-        if (mbr != null) {
+        MessageBodyWriter mbw = ProviderFactory.getInstance(baseURI.getPath()).createMessageBodyWriter(
+            cls, type, anns, contentType, m);
+        if (mbw == null) {
+            mbw = ProviderFactory.getInstance().createMessageBodyWriter(
+                      cls, type, anns, contentType, m);
+        }
+        if (mbw != null) {
             try {
-                mbr.writeTo(o, cls, type, anns, contentType, headers, os);
+                mbw.writeTo(o, cls, type, anns, contentType, headers, os);
                 os.flush();
             } catch (Exception ex) {
                 throw new WebApplicationException();
@@ -292,8 +296,8 @@
     }
     
     @SuppressWarnings("unchecked")
-    protected static Object readBody(Response r, HttpURLConnection conn, Class<?> cls, Type type, 
-                                     Annotation[] anns) {
+    protected Object readBody(Response r, HttpURLConnection conn, Message inMessage, 
+                              Class<?> cls, Type type, Annotation[] anns) {
 
         try {
             int status = conn.getResponseCode();
@@ -306,8 +310,12 @@
         
         MediaType contentType = getResponseContentType(r);
         
-        MessageBodyReader mbr = ProviderFactory.getInstance().createMessageBodyReader(
-            cls, type, anns, contentType, new MessageImpl());
+        MessageBodyReader mbr = ProviderFactory.getInstance(baseURI.getPath()).createMessageBodyReader(
+            cls, type, anns, contentType, inMessage);
+        if (mbr == null) {
+            ProviderFactory.getInstance().createMessageBodyReader(
+                cls, type, anns, contentType, inMessage);
+        }
         if (mbr != null) {
             try {
                 return mbr.readFrom(cls, type, anns, contentType, r.getMetadata(), conn.getInputStream());
@@ -384,6 +392,12 @@
         return new PhaseChainCache().get(pm.getInPhases(), i1, i2, i3);
     }
     
+    protected Message createSimpleMessage() {
+        Message m = new MessageImpl();
+        m.put(Message.PROTOCOL_HEADERS, getHeaders());
+        return m;
+    }
+    
     protected Message createMessage(String httpMethod, 
                                     MultivaluedMap<String, String> headers,
                                     String address) {

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java Thu Mar 19 13:20:27 2009
@@ -164,20 +164,20 @@
         return index;
     }
     
-    private static void checkResponse(Method m, Response r) throws Throwable {
+    private static void checkResponse(String basePath, Method m, Response r) throws Throwable {
         
         int status = r.getStatus();
         
         if (status >= 400) {
             
-            ProviderFactory pf = ProviderFactory.getInstance();
-            for (Class<?> exType : m.getExceptionTypes()) {
-                ResponseExceptionMapper<?> mapper = pf.createResponseExceptionMapper(exType);
-                if (mapper != null) {
-                    Throwable t = mapper.fromResponse(r);
-                    if (t != null) {
-                        throw t;
-                    }
+            ResponseExceptionMapper<?> mapper = findExceptionMapper(m, basePath);
+            if (mapper == null) {
+                mapper = findExceptionMapper(m, "/");
+            }
+            if (mapper != null) {
+                Throwable t = mapper.fromResponse(r);
+                if (t != null) {
+                    throw t;
                 }
             }
             
@@ -185,6 +185,16 @@
         }
     }
     
+    private static ResponseExceptionMapper<?> findExceptionMapper(Method m, String base) {
+        ProviderFactory pf = ProviderFactory.getInstance(base);
+        for (Class<?> exType : m.getExceptionTypes()) {
+            ResponseExceptionMapper<?> mapper = pf.createResponseExceptionMapper(exType);
+            if (mapper != null) {
+                return mapper;
+            }
+        }
+        return null;
+    }
     
     private MultivaluedMap<String, String> setRequestHeaders(MultivaluedMap<String, String> headers,          
                                                              OperationResourceInfo ori,
@@ -340,22 +350,24 @@
 
         // TODO : we need to refactor bits of HTTPConduit such that it can be reused
         
+        Message message = createSimpleMessage();
+        
         HttpURLConnection connect = createHttpConnection(uri, ori.getHttpMethod());
         setAllHeaders(headers, connect);
         Method m = ori.getMethodToInvoke();
         if (bodyIndex != -1 || types.containsKey(ParameterType.FORM)) {
             if (bodyIndex != -1) {
-                writeBody(params[bodyIndex], params[bodyIndex].getClass(), 
+                writeBody(params[bodyIndex], message, params[bodyIndex].getClass(), 
                           m.getGenericParameterTypes()[bodyIndex],
                           m.getParameterAnnotations()[bodyIndex], headers, connect.getOutputStream());
             } else {
                 MultivaluedMap<String, String> form = handleForm(types, params);
-                writeBody(form, form.getClass(), form.getClass(), m.getDeclaredAnnotations(),
+                writeBody(form, message, form.getClass(), form.getClass(), m.getDeclaredAnnotations(),
                           headers, connect.getOutputStream());
             }
         }
         
-        return handleResponse(connect, ori);
+        return handleResponse(connect, message, ori);
         
     }
     
@@ -363,7 +375,7 @@
                           OperationResourceInfo ori, Object[] params, int bodyIndex, 
                           MultivaluedMap<ParameterType, Parameter> types) throws Throwable {
         Message m = createMessage(ori.getHttpMethod(), headers, uri.toString());
-        
+
         if (bodyIndex != -1 || types.containsKey(ParameterType.FORM)) {
             m.setContent(OperationResourceInfo.class, ori);
             m.put("BODY_INDEX", bodyIndex);
@@ -382,21 +394,20 @@
         
         // TODO : this needs to be done in an inbound chain instead
         HttpURLConnection connect = (HttpURLConnection)m.get(HTTPConduit.KEY_HTTP_CONNECTION);
-        
-        return handleResponse(connect, ori);
+        return handleResponse(connect, m, ori);
         
     }
     
-    protected Object handleResponse(HttpURLConnection connect, OperationResourceInfo ori) 
+    protected Object handleResponse(HttpURLConnection connect, Message inMessage, OperationResourceInfo ori) 
         throws Throwable {
         Response r = setResponseBuilder(connect).clone().build();
         Method method = ori.getMethodToInvoke();
-        checkResponse(method, r);
+        checkResponse(getBaseURI().getPath(), method, r);
         if (method.getReturnType() == Void.class) { 
             return null;
         }
         
-        return readBody(r, connect, method.getReturnType(), 
+        return readBody(r, connect, inMessage, method.getReturnType(), 
                         method.getGenericReturnType(), method.getDeclaredAnnotations());
     }
     
@@ -459,12 +470,12 @@
             Object body = objs.get(0);
             try {
                 if (bodyIndex != -1) {
-                    writeBody(body, body.getClass(), 
+                    writeBody(body, m, body.getClass(), 
                           method.getGenericParameterTypes()[bodyIndex],
                           method.getParameterAnnotations()[bodyIndex], headers, os);
                 } else {
-                    writeBody(body, body.getClass(), body.getClass(), method.getDeclaredAnnotations(),
-                            headers, os);
+                    writeBody(body, m, body.getClass(), body.getClass(), 
+                              method.getDeclaredAnnotations(), headers, os);
                 }
                 os.flush();
             } catch (Exception ex) {

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java Thu Mar 19 13:20:27 2009
@@ -20,8 +20,10 @@
 
 import java.net.URI;
 import java.util.List;
+import java.util.Map;
 
 import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MultivaluedMap;
 
 import org.apache.cxf.common.util.ProxyHelper;
 import org.apache.cxf.endpoint.ConduitSelector;
@@ -30,12 +32,15 @@
 import org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean;
 import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean;
 import org.apache.cxf.jaxrs.JAXRSServiceImpl;
+import org.apache.cxf.jaxrs.impl.MetadataMap;
 import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.provider.ProviderFactory;
 import org.apache.cxf.service.Service;
 
 public class JAXRSClientFactoryBean extends AbstractJAXRSFactoryBean {
     
     private boolean inheritHeaders; 
+    private MultivaluedMap<String, String> headers;
     
     public JAXRSClientFactoryBean() {
         this(new JAXRSServiceFactoryBean());
@@ -59,6 +64,18 @@
         serviceFactory.setResourceClass(cls);
     }
     
+    public void setHeaders(Map<String, String> map) {
+        headers = new MetadataMap<String, String>();
+        for (Map.Entry<String, String> entry : map.entrySet()) {
+            String[] values = entry.getValue().split(",");
+            for (String v : values) {
+                if (v.length() != 0) {
+                    headers.add(entry.getKey(), v);
+                }
+            }
+        }
+    }
+    
     public WebClient createWebClient() {
         
         Service service = new JAXRSServiceImpl(getAddress());
@@ -67,10 +84,7 @@
         try {
             Endpoint ep = createEndpoint();
             WebClient client = new WebClient(getAddress());
-            client.setConduitSelector(getConduitSelector(ep));
-            client.setBus(getBus());
-            client.setOutInterceptors(getOutInterceptors());
-            client.setInInterceptors(getInInterceptors());
+            initClient(client, ep);
             
             return client;
         } catch (Exception ex) {
@@ -82,8 +96,6 @@
         return cls.cast(create());
     }
     
-    
-    
     public Client create() {
         List<ClassResourceInfo> list = serviceFactory.getClassResourceInfo();
         if (list.isEmpty()) {
@@ -96,10 +108,7 @@
             ClassResourceInfo cri = list.get(0);
             
             ClientProxyImpl proxyImpl = new ClientProxyImpl(baseURI, baseURI, cri, inheritHeaders);
-            proxyImpl.setConduitSelector(getConduitSelector(ep));
-            proxyImpl.setBus(getBus());
-            proxyImpl.setOutInterceptors(getOutInterceptors());
-            proxyImpl.setInInterceptors(getInInterceptors());
+            initClient(proxyImpl, ep);    
             
             return (Client)ProxyHelper.getProxy(cri.getServiceClass().getClassLoader(),
                                         new Class[]{cri.getServiceClass(), Client.class}, 
@@ -118,4 +127,19 @@
         return cs;
     }
     
+    protected void initClient(AbstractClient client, Endpoint ep) {
+        client.setConduitSelector(getConduitSelector(ep));
+        client.setBus(getBus());
+        client.setOutInterceptors(getOutInterceptors());
+        client.setInInterceptors(getInInterceptors());
+        if (headers != null) {
+            client.headers(headers);
+        }
+        if (entityProviders != null) {
+            ProviderFactory.getInstance().setUserProviders(entityProviders); 
+        }
+        if (schemaLocations != null) {
+            ProviderFactory.getInstance().setSchemaLocations(schemaLocations);
+        }
+    }
 } 

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java Thu Mar 19 13:20:27 2009
@@ -272,15 +272,16 @@
         HttpURLConnection conn = getConnection(httpMethod);
         
         setAllHeaders(headers, conn);
+        Message message = createSimpleMessage();
         if (body != null) {
             try {
-                writeBody(body, body.getClass(), body.getClass(), 
+                writeBody(body, message, body.getClass(), body.getClass(), 
                       new Annotation[]{}, headers, conn.getOutputStream());
             } catch (IOException ex) {
                 throw new WebApplicationException(ex);
             }
         }
-        return handleResponse(conn, responseClass);
+        return handleResponse(conn, message, responseClass);
     }
     
     protected Response doChainedInvocation(String httpMethod, 
@@ -302,14 +303,14 @@
         
         // TODO : this needs to be done in an inbound chain instead
         HttpURLConnection connect = (HttpURLConnection)m.get(HTTPConduit.KEY_HTTP_CONNECTION);
-        return handleResponse(connect, responseClass);
+        return handleResponse(connect, m, responseClass);
     }
     
-    protected Response handleResponse(HttpURLConnection conn, Class<?> responseClass) {
+    protected Response handleResponse(HttpURLConnection conn, Message m, Class<?> responseClass) {
         try {
             ResponseBuilder rb = setResponseBuilder(conn).clone();
             Response currentResponse = rb.clone().build();
-            Object entity = readBody(currentResponse, conn, responseClass, responseClass,
+            Object entity = readBody(currentResponse, conn, m, responseClass, responseClass,
                                      new Annotation[]{});
             rb.entity(entity);
             
@@ -347,7 +348,7 @@
             MultivaluedMap<String, String> headers = (MultivaluedMap)m.get(Message.PROTOCOL_HEADERS);
             Object body = objs.get(0);
             try {
-                writeBody(body, body.getClass(), body.getClass(), new Annotation[]{}, headers, os);
+                writeBody(body, m, body.getClass(), body.getClass(), new Annotation[]{}, headers, os);
                 os.flush();
             } catch (Exception ex) {
                 throw new Fault(ex);

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java Thu Mar 19 13:20:27 2009
@@ -53,57 +53,41 @@
     
     private static final Map<String, ProviderFactory> FACTORIES = 
         new HashMap<String, ProviderFactory>();
+    private static final ProviderFactory SHARED_FACTORY = new ProviderFactory();
     private static final ProviderFactory DEFAULT_FACTORY = new ProviderFactory(); 
     private static final String SLASH = "/"; 
     
-    private List<ProviderInfo<MessageBodyReader>> defaultMessageReaders = 
+    static {
+        SHARED_FACTORY.setProviders(new JAXBElementProvider(),
+                                    new JSONProvider(),
+                                    new BinaryDataProvider(),
+                                    new SourceProvider(),
+                                    new FormEncodingProvider(),
+                                    new PrimitiveTextProvider(),
+                                    new ActivationProvider(),
+                                    new WebApplicationExceptionMapper(),
+                                    new MappingsHandler());
+    }
+    
+    private List<ProviderInfo<MessageBodyReader>> messageReaders = 
         new ArrayList<ProviderInfo<MessageBodyReader>>();
-    private List<ProviderInfo<MessageBodyWriter>> defaultMessageWriters = 
+    private List<ProviderInfo<MessageBodyWriter>> messageWriters = 
         new ArrayList<ProviderInfo<MessageBodyWriter>>();
-    private List<ProviderInfo<MessageBodyReader>> userMessageReaders = 
-        new ArrayList<ProviderInfo<MessageBodyReader>>(1);
-    private List<ProviderInfo<MessageBodyWriter>> userMessageWriters = 
-        new ArrayList<ProviderInfo<MessageBodyWriter>>(1);
-    private List<ProviderInfo<ContextResolver>> userContextResolvers = 
+    private List<ProviderInfo<ContextResolver>> contextResolvers = 
         new ArrayList<ProviderInfo<ContextResolver>>(1);
-    private List<ProviderInfo<ExceptionMapper>> defaultExceptionMappers = 
-        new ArrayList<ProviderInfo<ExceptionMapper>>(1);
-    private List<ProviderInfo<ExceptionMapper>> userExceptionMappers = 
+    private List<ProviderInfo<ExceptionMapper>> exceptionMappers = 
         new ArrayList<ProviderInfo<ExceptionMapper>>(1);
     private List<ProviderInfo<RequestHandler>> requestHandlers = 
         new ArrayList<ProviderInfo<RequestHandler>>(1);
     private List<ProviderInfo<ResponseHandler>> responseHandlers = 
         new ArrayList<ProviderInfo<ResponseHandler>>(1);
-    private List<ProviderInfo<ParameterHandler>> jaxrsParamHandlers = 
+    private List<ProviderInfo<ParameterHandler>> paramHandlers = 
         new ArrayList<ProviderInfo<ParameterHandler>>(1);
-    private List<ProviderInfo<ResponseExceptionMapper>> userResponseExceptionMappers = 
+    private List<ProviderInfo<ResponseExceptionMapper>> responseExceptionMappers = 
         new ArrayList<ProviderInfo<ResponseExceptionMapper>>(1);
     private RequestPreprocessor requestPreprocessor;
     
     private ProviderFactory() {
-        // TODO : this needs to be done differently,
-        // we need to use cxf-jaxrs-extensions
-        
-        // TODO : make sure the default providers are shared between multiple
-        // factories
-        
-        setProviders(defaultMessageReaders,
-                     defaultMessageWriters,
-                     userContextResolvers,
-                     requestHandlers,
-                     responseHandlers,
-                     defaultExceptionMappers,
-                     jaxrsParamHandlers,
-                     userResponseExceptionMappers,
-                     new JAXBElementProvider(),
-                     new JSONProvider(),
-                     new BinaryDataProvider(),
-                     new SourceProvider(),
-                     new FormEncodingProvider(),
-                     new PrimitiveTextProvider(),
-                     new ActivationProvider(),
-                     new WebApplicationExceptionMapper(),
-                     new MappingsHandler());
     }
     
     public static ProviderFactory getInstance() {
@@ -126,9 +110,22 @@
         return pf;
     }
 
+    public static ProviderFactory getSharedInstance() {
+        return SHARED_FACTORY;
+    }
+    
+    public <T> ContextResolver<T> createContextResolver(Type contextType, 
+                                                        Message m) {
+        Object mt = m.get(Message.CONTENT_TYPE);
+        return createContextResolver(contextType, m,
+               mt == null ? MediaType.valueOf("*/*") : MediaType.valueOf(mt.toString()));
+        
+    }
+    
     @SuppressWarnings("unchecked")
-    public <T> ContextResolver<T> createContextResolver(Type contextType, Message m) {
-        for (ProviderInfo<ContextResolver> cr : userContextResolvers) {
+    public <T> ContextResolver<T> createContextResolver(Type contextType, Message m,
+                                                        MediaType mt) {
+        for (ProviderInfo<ContextResolver> cr : contextResolvers) {
             Type[] types = cr.getProvider().getClass().getGenericInterfaces();
             for (Type t : types) {
                 if (t instanceof ParameterizedType) {
@@ -148,27 +145,24 @@
         return null;
     }
     
-    public <T> ExceptionMapper<T> createExceptionMapper(Class<?> exceptionType, Message m) {
+    public <T> ExceptionMapper<T> createExceptionMapper(Class<?> exceptionType, 
+                                                                          Message m) {
         
-        ExceptionMapper<T> mapper = doCreateExceptionMapper(userExceptionMappers,
-                                                            exceptionType,
-                                                            m);
-        if (mapper != null) {
+        ExceptionMapper<T> mapper = doCreateExceptionMapper(exceptionType, m);
+        if (mapper != null || this == SHARED_FACTORY) {
             return mapper;
         }
         
-        return doCreateExceptionMapper(defaultExceptionMappers,
-                                       exceptionType,
-                                       m);
+        return SHARED_FACTORY.createExceptionMapper(exceptionType, m);
     }
     
     @SuppressWarnings("unchecked")
-    private static <T> ExceptionMapper<T> doCreateExceptionMapper(
-        List<ProviderInfo<ExceptionMapper>> mappers, Class<?> exceptionType, Message m) {
+    private <T> ExceptionMapper<T> doCreateExceptionMapper(
+        Class<?> exceptionType, Message m) {
         
         List<ExceptionMapper<T>> candidates = new LinkedList<ExceptionMapper<T>>();
         
-        for (ProviderInfo<ExceptionMapper> em : mappers) {
+        for (ProviderInfo<ExceptionMapper> em : exceptionMappers) {
             handleMapper((List)candidates, em, exceptionType, m);
         }
         if (candidates.size() == 0) {
@@ -183,7 +177,7 @@
         
         List<ParameterHandler<T>> candidates = new LinkedList<ParameterHandler<T>>();
         
-        for (ProviderInfo<ParameterHandler> em : jaxrsParamHandlers) {
+        for (ProviderInfo<ParameterHandler> em : paramHandlers) {
             handleMapper((List)candidates, em, paramType, null);
         }
         if (candidates.size() == 0) {
@@ -199,7 +193,7 @@
         
         List<ResponseExceptionMapper<T>> candidates = new LinkedList<ResponseExceptionMapper<T>>();
         
-        for (ProviderInfo<ResponseExceptionMapper> em : userResponseExceptionMappers) {
+        for (ProviderInfo<ResponseExceptionMapper> em : responseExceptionMappers) {
             handleMapper((List)candidates, em, paramType, null);
         }
         if (candidates.size() == 0) {
@@ -237,31 +231,31 @@
                                                             MediaType mediaType,
                                                             Message m) {
         // Try user provided providers
-        MessageBodyReader<T> mr = chooseMessageReader(userMessageReaders, 
-                                                      bodyType,
+        MessageBodyReader<T> mr = chooseMessageReader(bodyType,
                                                       parameterType,
                                                       parameterAnnotations,
                                                       mediaType,
                                                       m);
         
         //If none found try the default ones
-        if (mr == null) {
-            mr = chooseMessageReader(defaultMessageReaders,
-                                     bodyType,
-                                     parameterType,
-                                     parameterAnnotations,
-                                     mediaType,
-                                     m);
-        }     
-        
-        return mr;
+        if (mr != null ||  this == SHARED_FACTORY) {
+            return mr;
+        }
+        return SHARED_FACTORY.createMessageBodyReader(bodyType, parameterType, 
+                                                        parameterAnnotations, mediaType, m);
     }
     
     
     
     public List<ProviderInfo<RequestHandler>> getRequestHandlers() {
-        
-        return Collections.unmodifiableList(requestHandlers);
+        if (requestHandlers.size() == 0) {
+            return Collections.unmodifiableList(SHARED_FACTORY.requestHandlers);
+        } else {
+            List<ProviderInfo<RequestHandler>> handlers = 
+                new ArrayList<ProviderInfo<RequestHandler>>(SHARED_FACTORY.requestHandlers);
+            handlers.addAll(requestHandlers);
+            return handlers;
+        }
     }
     
     public List<ProviderInfo<ResponseHandler>> getResponseHandlers() {
@@ -275,64 +269,50 @@
                                                             MediaType mediaType,
                                                             Message m) {
         // Try user provided providers
-        MessageBodyWriter<T> mw = chooseMessageWriter(userMessageWriters,
-                                                      bodyType,
+        MessageBodyWriter<T> mw = chooseMessageWriter(bodyType,
                                                       parameterType,
                                                       parameterAnnotations,
                                                       mediaType,
                                                       m);
         
         //If none found try the default ones
-        if (mw == null) {
-            mw = chooseMessageWriter(defaultMessageWriters,
-                                     bodyType,
-                                     parameterType,
-                                     parameterAnnotations,
-                                     mediaType,
-                                     m);
-        }     
-        
-        return mw;
+        if (mw != null || this == SHARED_FACTORY) {
+            return mw;
+        }
+        return SHARED_FACTORY.createMessageBodyWriter(bodyType, parameterType, 
+                                                        parameterAnnotations, mediaType, m);
     }
     
 //CHECKSTYLE:OFF       
-    private void setProviders(List<ProviderInfo<MessageBodyReader>> readers, 
-                              List<ProviderInfo<MessageBodyWriter>> writers,
-                              List<ProviderInfo<ContextResolver>> resolvers,
-                              List<ProviderInfo<RequestHandler>> requestFilters,
-                              List<ProviderInfo<ResponseHandler>> responseFilters,
-                              List<ProviderInfo<ExceptionMapper>> excMappers,
-                              List<ProviderInfo<ParameterHandler>> paramHandlers,
-                              List<ProviderInfo<ResponseExceptionMapper>> responseExcMappers,
-                              Object... providers) {
+    private void setProviders(Object... providers) {
         
         for (Object o : providers) {
             if (MessageBodyReader.class.isAssignableFrom(o.getClass())) {
-                readers.add(new ProviderInfo<MessageBodyReader>((MessageBodyReader)o)); 
+                messageReaders.add(new ProviderInfo<MessageBodyReader>((MessageBodyReader)o)); 
             }
             
             if (MessageBodyWriter.class.isAssignableFrom(o.getClass())) {
-                writers.add(new ProviderInfo<MessageBodyWriter>((MessageBodyWriter)o)); 
+                messageWriters.add(new ProviderInfo<MessageBodyWriter>((MessageBodyWriter)o)); 
             }
             
             if (ContextResolver.class.isAssignableFrom(o.getClass())) {
-                resolvers.add(new ProviderInfo<ContextResolver>((ContextResolver)o)); 
+                contextResolvers.add(new ProviderInfo<ContextResolver>((ContextResolver)o)); 
             }
             
             if (RequestHandler.class.isAssignableFrom(o.getClass())) {
-                requestFilters.add(new ProviderInfo<RequestHandler>((RequestHandler)o)); 
+                requestHandlers.add(new ProviderInfo<RequestHandler>((RequestHandler)o)); 
             }
             
             if (ResponseHandler.class.isAssignableFrom(o.getClass())) {
-                responseFilters.add(new ProviderInfo<ResponseHandler>((ResponseHandler)o)); 
+                responseHandlers.add(new ProviderInfo<ResponseHandler>((ResponseHandler)o)); 
             }
             
             if (ExceptionMapper.class.isAssignableFrom(o.getClass())) {
-                excMappers.add(new ProviderInfo<ExceptionMapper>((ExceptionMapper)o)); 
+                exceptionMappers.add(new ProviderInfo<ExceptionMapper>((ExceptionMapper)o)); 
             }
             
             if (ResponseExceptionMapper.class.isAssignableFrom(o.getClass())) {
-                responseExcMappers.add(new ProviderInfo<ResponseExceptionMapper>((ResponseExceptionMapper)o)); 
+                responseExceptionMappers.add(new ProviderInfo<ResponseExceptionMapper>((ResponseExceptionMapper)o)); 
             }
             
             if (ParameterHandler.class.isAssignableFrom(o.getClass())) {
@@ -340,10 +320,11 @@
             }
         }
         
-        sortReaders(readers);
-        sortWriters(writers);
+        sortReaders();
+        sortWriters();
         
-        injectContexts(readers, writers, resolvers, requestFilters, responseFilters, excMappers);
+        injectContexts(messageReaders, messageWriters, contextResolvers, requestHandlers, responseHandlers,
+                       exceptionMappers);
     }
 //CHECKSTYLE:ON
     
@@ -363,12 +344,12 @@
      * provider that lists *. Quality parameter values are also used such that
      * x/y;q=1.0 < x/y;q=0.7.
      */    
-    private void sortReaders(List<ProviderInfo<MessageBodyReader>> entityProviders) {
-        Collections.sort(entityProviders, new MessageBodyReaderComparator());
+    private void sortReaders() {
+        Collections.sort(messageReaders, new MessageBodyReaderComparator());
     }
     
-    private void sortWriters(List<ProviderInfo<MessageBodyWriter>> entityProviders) {
-        Collections.sort(entityProviders, new MessageBodyWriterComparator());
+    private void sortWriters() {
+        Collections.sort(messageWriters, new MessageBodyWriterComparator());
     }
     
         
@@ -384,14 +365,12 @@
      * @return
      */
     @SuppressWarnings("unchecked")
-    private <T> MessageBodyReader<T> chooseMessageReader(
-                                 List<ProviderInfo<MessageBodyReader>> readers, 
-                                                         Class<T> type,
+    private <T> MessageBodyReader<T> chooseMessageReader(Class<T> type,
                                                          Type genericType,
                                                          Annotation[] annotations,
                                                          MediaType mediaType,
                                                          Message m) {
-        for (ProviderInfo<MessageBodyReader> ep : readers) {
+        for (ProviderInfo<MessageBodyReader> ep : messageReaders) {
             InjectionUtils.injectContextFields(ep.getProvider(), ep, m);
             InjectionUtils.injectContextMethods(ep.getProvider(), ep, m);             
             if (matchesReaderCriterias(ep.getProvider(), type, genericType, annotations, mediaType)) {
@@ -432,14 +411,12 @@
      * @return
      */
     @SuppressWarnings("unchecked")
-    private <T> MessageBodyWriter<T> chooseMessageWriter(
-                          List<ProviderInfo<MessageBodyWriter>> writers, 
-                                                         Class<T> type,
+    private <T> MessageBodyWriter<T> chooseMessageWriter(Class<T> type,
                                                          Type genericType,
                                                          Annotation[] annotations,
                                                          MediaType mediaType,
                                                          Message m) {
-        for (ProviderInfo<MessageBodyWriter> ep : writers) {
+        for (ProviderInfo<MessageBodyWriter> ep : messageWriters) {
             InjectionUtils.injectContextFields(ep.getProvider(), ep, m);
             InjectionUtils.injectContextMethods(ep.getProvider(), ep, m); 
             if (matchesWriterCriterias(ep.getProvider(), type, genericType, annotations, mediaType)) {
@@ -470,24 +447,16 @@
         
     }
     
-    List<ProviderInfo<MessageBodyReader>> getDefaultMessageReaders() {
-        return Collections.unmodifiableList(defaultMessageReaders);
+    List<ProviderInfo<MessageBodyReader>> getMessageReaders() {
+        return Collections.unmodifiableList(messageReaders);
     }
 
-    List<ProviderInfo<MessageBodyWriter>> getDefaultMessageWriters() {
-        return Collections.unmodifiableList(defaultMessageWriters);
-    }
-    
-    List<ProviderInfo<MessageBodyReader>> getUserMessageReaders() {
-        return Collections.unmodifiableList(userMessageReaders);
-    }
-    
-    List<ProviderInfo<MessageBodyWriter>> getUserMessageWriters() {
-        return Collections.unmodifiableList(userMessageWriters);
+    List<ProviderInfo<MessageBodyWriter>> getMessageWriters() {
+        return Collections.unmodifiableList(messageWriters);
     }
     
-    List<ProviderInfo<ContextResolver>> getUserContextResolvers() {
-        return Collections.unmodifiableList(userContextResolvers);
+    List<ProviderInfo<ContextResolver>> getContextResolvers() {
+        return Collections.unmodifiableList(contextResolvers);
     }
     
      
@@ -499,15 +468,7 @@
      * @param entityProviders the entityProviders to set
      */
     public void setUserProviders(List<?> userProviders) {
-        setProviders(userMessageReaders,
-                     userMessageWriters,
-                     userContextResolvers,
-                     requestHandlers,
-                     responseHandlers,
-                     userExceptionMappers,
-                     jaxrsParamHandlers,
-                     userResponseExceptionMappers,
-                     userProviders.toArray());
+        setProviders(userProviders.toArray());
     }
 
     private static class MessageBodyReaderComparator 
@@ -554,14 +515,12 @@
     }
     
     public void clearThreadLocalProxies() {
-        clearProxies(defaultMessageReaders,
-                     defaultMessageWriters,
-                     userMessageReaders,
-                     userMessageWriters,
-                     userContextResolvers,
+        clearProxies(messageReaders,
+                     messageWriters,
+                     contextResolvers,
                      requestHandlers,
                      responseHandlers,
-                     userExceptionMappers);
+                     exceptionMappers);
     }
     
     void clearProxies(List<?> ...lists) {
@@ -574,23 +533,18 @@
     }
     
     void clearProviders() {
-        userMessageReaders.clear();
-        userMessageWriters.clear();
-        userContextResolvers.clear();
-        userExceptionMappers.clear();
+        messageReaders.clear();
+        messageWriters.clear();
+        contextResolvers.clear();
+        exceptionMappers.clear();
         requestHandlers.clear();
         responseHandlers.clear();
-        jaxrsParamHandlers.clear();
+        paramHandlers.clear();
+        responseExceptionMappers.clear();
     }
     
     public void setSchemaLocations(List<String> schemas) {
-        setSchemasOnProviders(userMessageReaders, schemas);
-        setSchemasOnProviders(defaultMessageReaders, schemas);
-    }
-    
-    private void setSchemasOnProviders(List<ProviderInfo<MessageBodyReader>> providers,
-                                       List<String> schemas) {
-        for (ProviderInfo<MessageBodyReader> r : providers) {
+        for (ProviderInfo<MessageBodyReader> r : messageReaders) {
             try {
                 Method m = r.getProvider().getClass().getMethod("setSchemas", 
                                                      new Class[]{List.class});

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSClientFactoryBeanDefinitionParser.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSClientFactoryBeanDefinitionParser.java?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSClientFactoryBeanDefinitionParser.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSClientFactoryBeanDefinitionParser.java Thu Mar 19 13:20:27 2009
@@ -66,7 +66,7 @@
 
     @Override
     protected void mapElement(ParserContext ctx, BeanDefinitionBuilder bean, Element el, String name) {
-        if ("properties".equals(name)) {
+        if ("properties".equals(name) || "headers".equals(name)) {
             Map map = ctx.getDelegate().parseMapElement(el, bean.getBeanDefinition());
             bean.addPropertyValue(name, map);
         } else if ("executor".equals(name)) {
@@ -79,7 +79,8 @@
             || "outInterceptors".equals(name) || "outFaultInterceptors".equals(name)) {
             List list = ctx.getDelegate().parseListElement(el, bean.getBeanDefinition());
             bean.addPropertyValue(name, list);
-        } else if ("features".equals(name) || "providers".equals(name)) {
+        } else if ("features".equals(name) || "providers".equals(name)
+                   || "schemaLocations".equals(name)) {
             List list = ctx.getDelegate().parseListElement(el, bean.getBeanDefinition());
             bean.addPropertyValue(name, list);
         } else {

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/resources/schemas/jaxrs.xsd
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/resources/schemas/jaxrs.xsd?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/resources/schemas/jaxrs.xsd (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/resources/schemas/jaxrs.xsd Thu Mar 19 13:20:27 2009
@@ -70,7 +70,6 @@
       <xsd:complexContent>
         <xsd:extension base="beans:identifiedType">
           <xsd:all>
-            <xsd:element name="binding" type="xsd:anyType" minOccurs="0"/>
             <xsd:element name="executor" type="xsd:anyType" minOccurs="0"/>
             <xsd:element name="features" type="xsd:anyType" minOccurs="0"/>
             <xsd:element name="inInterceptors" type="xsd:anyType" minOccurs="0"/>
@@ -80,10 +79,13 @@
             <xsd:element name="outFaultInterceptors" type="xsd:anyType" minOccurs="0"/>
             <xsd:element name="properties" type="beans:mapType" minOccurs="0"/>
             <xsd:element name="providers" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="headers" type="xsd:anyType" minOccurs="0"/> 
+            <xsd:element name="schemaLocations" type="schemasType" minOccurs="0"/>
           </xsd:all>
           <xsd:attributeGroup ref="cxf-beans:beanAttributes"/>
           <xsd:attribute name="address" type="xsd:string" />
           <xsd:attribute name="serviceClass" type="xsd:string"/>
+          <xsd:attribute name="inheritHeaders" type="xsd:boolean"/>
           <xsd:attribute name="bus" type="xsd:string" />
         </xsd:extension>
       </xsd:complexContent>

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java Thu Mar 19 13:20:27 2009
@@ -123,12 +123,12 @@
         pf.registerUserProvider(new TestStringProvider());
         pf.registerUserProvider(new PrimitiveTextProvider());
         
-        List<ProviderInfo<MessageBodyReader>> readers = pf.getUserMessageReaders();
+        List<ProviderInfo<MessageBodyReader>> readers = pf.getMessageReaders();
 
         assertTrue(indexOf(readers, TestStringProvider.class) 
                    < indexOf(readers, PrimitiveTextProvider.class));
         
-        List<ProviderInfo<MessageBodyWriter>> writers = pf.getUserMessageWriters();
+        List<ProviderInfo<MessageBodyWriter>> writers = pf.getMessageWriters();
 
         assertTrue(indexOf(writers, TestStringProvider.class) 
                    < indexOf(writers, PrimitiveTextProvider.class));
@@ -156,12 +156,12 @@
         json2.setProduceMediaTypes(Collections.singletonList("application/sbc"));
         pf.registerUserProvider(json2);
         
-        List<ProviderInfo<MessageBodyReader>> readers = pf.getUserMessageReaders();
+        List<ProviderInfo<MessageBodyReader>> readers = pf.getMessageReaders();
 
         assertTrue(indexOf(readers, json2) 
                    < indexOf(readers, json1));
         
-        List<ProviderInfo<MessageBodyWriter>> writers = pf.getUserMessageWriters();
+        List<ProviderInfo<MessageBodyWriter>> writers = pf.getMessageWriters();
 
         assertTrue(indexOf(writers, json1) 
                    < indexOf(writers, json2));
@@ -244,7 +244,7 @@
     public void testRegisterCustomResolver() throws Exception {
         ProviderFactory pf = ProviderFactory.getInstance();
         pf.registerUserProvider(new JAXBContextProvider());
-        ContextResolver<JAXBContext> cr = pf.createContextResolver(JAXBContext.class, null);
+        ContextResolver<JAXBContext> cr = pf.createContextResolver(JAXBContext.class, new MessageImpl());
         assertTrue("JAXBContext ContextProvider can not be found", 
                    cr instanceof JAXBContextProvider);
         

Modified: cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java (original)
+++ cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java Thu Mar 19 13:20:27 2009
@@ -37,7 +37,7 @@
     @BeforeClass
     public static void startServers() throws Exception {
         assertTrue("server did not launch correctly",
-                   launchServer(MultipartServer.class));
+                   launchServer(MultipartServer.class, true));
     }
     
     @Test

Modified: cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java (original)
+++ cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java Thu Mar 19 13:20:27 2009
@@ -57,7 +57,7 @@
     @BeforeClass
     public static void startServers() throws Exception {
         assertTrue("server did not launch correctly", 
-                   launchServer(BookServerRestSoap.class));
+                   launchServer(BookServerRestSoap.class, true));
     }
     
     @Test

Modified: cxf/branches/2.1.x-fixes/systests/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/systests/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml?rev=755987&r1=755986&r2=755987&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/systests/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml (original)
+++ cxf/branches/2.1.x-fixes/systests/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml Thu Mar 19 13:20:27 2009
@@ -37,7 +37,12 @@
 
   <jaxrs:client id="restClient"
          address="http://localhost:9092/test/services/rest"
-         serviceClass="org.apache.cxf.systest.jaxrs.BookStoreJaxrsJaxws"/>
+         serviceClass="org.apache.cxf.systest.jaxrs.BookStoreJaxrsJaxws"
+         inheritHeaders="true">
+         <jaxrs:headers>
+             <entry key="Accept" value="text/xml"/>
+         </jaxrs:headers>
+  </jaxrs:client>       
          
   <bean id="bookstore" class="org.apache.cxf.systest.jaxrs.BookStoreSoapRestImpl"/>