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/20 11:46:39 UTC

svn commit: r756410 [1/2] - in /cxf/branches/2.1.x-fixes: ./ common/common/src/main/java/org/apache/cxf/common/util/ rt/core/src/main/java/org/apache/cxf/bus/spring/ rt/core/src/main/java/org/apache/cxf/interceptor/ rt/databinding/jaxb/src/main/java/or...

Author: sergeyb
Date: Fri Mar 20 10:46:33 2009
New Revision: 756410

URL: http://svn.apache.org/viewvc?rev=756410&view=rev
Log:
Merged revisions 750522,750663,750948,752099,752280 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r750522 | sergeyb | 2009-03-05 17:52:17 +0000 (Thu, 05 Mar 2009) | 1 line
  
  JAXRS : fixing a bunch of exception-related issues on the outbound path
........
  r750663 | sergeyb | 2009-03-05 23:07:05 +0000 (Thu, 05 Mar 2009) | 1 line
  
  Minor updates to do with output buffering
........
  r750948 | sergeyb | 2009-03-06 15:54:07 +0000 (Fri, 06 Mar 2009) | 1 line
  
  JAXRS: client recursive subresource test
........
  r752099 | sergeyb | 2009-03-10 12:55:44 +0000 (Tue, 10 Mar 2009) | 1 line
  
  JAXRS: client api updates
........
  r752280 | sergeyb | 2009-03-10 21:47:47 +0000 (Tue, 10 Mar 2009) | 1 line
  
  CXF-2085 : optionally setting a thread context loader to that of the service object class loader
........

Added:
    cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/common/util/SystemUtils.java
      - copied, changed from r750522, cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/SystemUtils.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/InvocationHandlerAware.java
      - copied unchanged from r752099, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/InvocationHandlerAware.java
    cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/CustomOutInterceptor.java
      - copied unchanged from r750522, cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/CustomOutInterceptor.java
    cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java
      - copied, changed from r750522, cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java
Modified:
    cxf/branches/2.1.x-fixes/   (props changed)
    cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java
    cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java
    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/JAXRSInvoker.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/Client.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/JAXRSClientFactory.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/ext/MessageContext.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/Messages.properties
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WebApplicationExceptionMapper.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractConfigurableProvider.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/BinaryDataProvider.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/SourceProvider.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
    cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/multipart/AttachmentUtils.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/client/WebClientTest.java
    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/BookServer.java
    cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
    cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreJaxrsJaxws.java
    cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSoapRestImpl.java
    cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresource.java
    cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
    cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.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/java/org/apache/cxf/systest/jaxrs/security/JAXRSHttpsBookTest.java
    cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/security/JAXRSSpringSecurityInterfaceTest.java
    cxf/branches/2.1.x-fixes/systests/src/test/resources/jaxrs_atom/WEB-INF/beans.xml

Propchange: cxf/branches/2.1.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Mar 20 10:46:33 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,747390,747406-747407,747454,747649,747766,747806-747846,747986,748159,748192-748193,748223,748305,748313,748597,748603-748604,748768,749420,749449,749454-749456,749505,749511,749513,749584,749596,749767,749771,749799,749890,749963,750010,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,747806-747846,747986,748159,748192-748193,748223,748305,748313,748597,748603-748604,748768,749420,749449,749454-749456,749505,749511,749513,749584,749596,749767,749771,749799,749890,749963,750010,750059-750060,750302,750522,750591,750663,750689,750935,750948,751067-751110,751233,751527,751567,751576,751607,751732,751740,751787,751828,751840,751972-751974,752099,752122,752132,752136,752280,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.

Copied: cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/common/util/SystemUtils.java (from r750522, cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/SystemUtils.java)
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/common/util/SystemUtils.java?p2=cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/common/util/SystemUtils.java&p1=cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/SystemUtils.java&r1=750522&r2=756410&rev=756410&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/SystemUtils.java (original)
+++ cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/common/util/SystemUtils.java Fri Mar 20 10:46:33 2009
@@ -25,7 +25,6 @@
  */
 public final class SystemUtils {
     
-    public static final String OUT_BUFFERING = "org.apache.cxf.output.buffering";
     public static final String SPRING_VALIDATION_MODE = "org.apache.cxf.spring.validation.mode";
     
     private SystemUtils() {
@@ -33,22 +32,6 @@
     }
 
     /**
-     * Checks org.apache.cxf.output.buffering property value, defaults to false 
-     * @return true if output buffering is enabled
-     */
-    public static boolean isBufferingEnabled() { 
-        return Boolean.getBoolean(System.getProperty(OUT_BUFFERING, "false"));    
-    }
-    
-    /**
-     * Checks if org.apache.cxf.output.buffering property was explicitly set 
-     * @return true if it was set
-     */
-    public static boolean isBufferingSet() { 
-        return System.getProperty(OUT_BUFFERING) != null;    
-    }
-    
-    /**
      * Gets org.apache.cxf.spring.validation.mode property value if available 
      * @return Spring validation mode
      */

Modified: cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java (original)
+++ cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java Fri Mar 20 10:46:33 2009
@@ -34,6 +34,7 @@
 import org.apache.cxf.common.classloader.ClassLoaderUtils;
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.common.util.SystemUtils;
 import org.apache.cxf.configuration.Configurer;
 import org.springframework.beans.factory.support.DefaultListableBeanFactory;
 import org.springframework.beans.factory.xml.BeansDtdResolver;
@@ -231,10 +232,7 @@
         }
         reader.setNamespaceHandlerResolver(nsHandlerResolver);
         
-        String mode = System.getProperty("org.apache.cxf.spring.validation.mode");
-        if (mode == null) {
-            mode = System.getProperty("spring.validation.mode");
-        }
+        String mode = SystemUtils.getSpringValidationMode();
         if (null != mode) {
             reader.setValidationModeName(mode);
         }

Modified: cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java (original)
+++ cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java Fri Mar 20 10:46:33 2009
@@ -48,7 +48,7 @@
 public abstract class AbstractOutDatabindingInterceptor extends AbstractPhaseInterceptor<Message> {
 
     public static final String DISABLE_OUTPUTSTREAM_OPTIMIZATION = "disable.outputstream.optimization";
-    
+    public static final String OUT_BUFFERING = "org.apache.cxf.output.buffering";
     
     public AbstractOutDatabindingInterceptor(String phase) {
         super(phase);
@@ -72,8 +72,9 @@
         XMLStreamWriter xmlWriter = origXmlWriter;
         CachingXmlEventWriter cache = null;
         
-        if (shouldValidate(message) && !isRequestor(message)) {
-            //need to cache the events in case validation fails
+        // need to cache the events in case validation fails or buffering is enabled
+        if (shouldValidate(message) && !isRequestor(message)
+            || isBufferingEnabled(message)) {
             cache = new CachingXmlEventWriter();
             try {
                 cache.setNamespaceContext(origXmlWriter.getNamespaceContext());
@@ -126,6 +127,11 @@
     }
     
     
+    protected boolean isBufferingEnabled(Message m) {
+        Object en = m.getContextualProperty(OUT_BUFFERING);
+        return Boolean.TRUE.equals(en) || "true".equals(en);
+    }
+    
     protected boolean shouldValidate(Message m) {
         Object en = m.getContextualProperty(Message.SCHEMA_VALIDATION_ENABLED);
         return Boolean.TRUE.equals(en) || "true".equals(en);

Propchange: cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Mar 20 10:46:33 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,747390,747407,747806-747846,748193,748597,749596,749963,750010,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,747806-747846,748193,748597,749596,749963,750010,750522,750663,750948,752099,752280,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 Fri Mar 20 10:46:33 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,747390,747407,747806-747846,748193,748597,749596,749963,750010,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,747806-747846,748193,748597,749596,749963,750010,750522,750663,750948,752099,752280,755514,755806

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java Fri Mar 20 10:46:33 2009
@@ -57,7 +57,8 @@
 public class JAXRSInvoker extends AbstractInvoker {
     private static final Logger LOG = LogUtils.getL7dLogger(JAXRSServiceFactoryBean.class);
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(JAXRSInvoker.class);
-
+    private static final String SERVICE_LOADER_AS_CONTEXT = "org.apache.cxf.serviceloader-context";
+    
     private List<Object> resourceObjects;
 
     public JAXRSInvoker() {
@@ -115,7 +116,11 @@
         }
 
         Object result = null;
+        ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
         try {
+            if (setServiceLoaderAsContextLoader(exchange.getInMessage())) {
+                Thread.currentThread().setContextClassLoader(resourceObject.getClass().getClassLoader());
+            }
             result = invoke(exchange, resourceObject, methodToInvoke, params);
         } catch (Fault ex) {
             Response excResponse = JAXRSUtils.convertFaultToResponse(ex.getCause(), 
@@ -131,6 +136,8 @@
                 throw ex;
             }
             return new MessageContentsList(excResponse);
+        } finally {
+            Thread.currentThread().setContextClassLoader(contextLoader);
         }
 
         if (ori.isSubResourceLocator()) {
@@ -194,6 +201,11 @@
         return result;
     }
 
+    private boolean setServiceLoaderAsContextLoader(Message inMessage) {
+        Object en = inMessage.getContextualProperty(SERVICE_LOADER_AS_CONTEXT);
+        return Boolean.TRUE.equals(en) || "true".equals(en);
+    }
+    
     public Object getServiceObject(Exchange exchange) {
         return getServiceObject(exchange, resourceObjects);
     }

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=756410&r1=756409&r2=756410&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 Fri Mar 20 10:46:33 2009
@@ -68,7 +68,7 @@
 import org.apache.cxf.phase.PhaseManager;
 import org.apache.cxf.transport.MessageObserver;
 
-public class AbstractClient implements Client {
+public class AbstractClient implements Client, InvocationHandlerAware {
 
     protected static final MediaType WILDCARD = MediaType.valueOf("*/*");
     private static final Logger LOG = LogUtils.getL7dLogger(AbstractClient.class);
@@ -90,14 +90,6 @@
         this.currentBuilder = new UriBuilderImpl(currentURI);
     }
     
-    protected AbstractClient(Client client, boolean inheritHeaders) {
-        this.baseURI = client.getCurrentURI();
-        this.currentBuilder = new UriBuilderImpl(client.getCurrentURI());
-        if (inheritHeaders) {
-            this.requestHeaders = client.getHeaders();
-        }
-    }
-    
     public Client header(String name, Object... values) {
         if (values == null) {
             throw new IllegalArgumentException();
@@ -197,11 +189,9 @@
     
     public Response getResponse() {
         if (responseBuilder == null) {
-            throw new IllegalStateException();
+            return null;
         }
-        Response r = responseBuilder.build();
-        responseBuilder = null;
-        return r;
+        return responseBuilder.build();
     }
     
     public Client reset() {
@@ -459,10 +449,11 @@
         public void onMessage(Message m) {
             
             Message message = conduitSelector.getEndpoint().getBinding().createMessage(m);
-            message.put(Message.REQUESTOR_ROLE, Boolean.TRUE);
+            message.put(Message.REQUESTOR_ROLE, Boolean.FALSE);
             message.put(Message.INBOUND_MESSAGE, Boolean.TRUE);
             PhaseInterceptorChain chain = setupInInterceptorChain(conduitSelector.getEndpoint());
             message.setInterceptorChain(chain);
+            message.getExchange().setInMessage(message);
             Bus origBus = BusFactory.getThreadDefaultBus(false);
             BusFactory.setThreadDefaultBus(bus);
 
@@ -475,4 +466,8 @@
         }
         
     }
+
+    public Object getInvocationHandler() {
+        return this;
+    }
 }

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/Client.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/Client.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/Client.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/Client.java Fri Mar 20 10:46:33 2009
@@ -54,5 +54,9 @@
     URI getBaseURI();
     URI getCurrentURI();
     
+    /**
+     * Gets the response state if any
+     * @return JAXRS Response response
+     */
     Response getResponse();
 }

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=756410&r1=756409&r2=756410&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 Fri Mar 20 10:46:33 2009
@@ -67,22 +67,24 @@
     
     private ClassResourceInfo cri;
     private boolean inheritHeaders;
+    private boolean isRoot;
     
-    public ClientProxyImpl(URI baseURI, URI currentURI, ClassResourceInfo cri, boolean inheritHeaders) {
+    public ClientProxyImpl(URI baseURI, URI currentURI, ClassResourceInfo cri, boolean isRoot, 
+                           boolean inheritHeaders) {
         super(baseURI, currentURI);
         this.cri = cri;
+        this.isRoot = isRoot;
         this.inheritHeaders = inheritHeaders;
     }
     
     public Object invoke(Object o, Method m, Object[] params) throws Throwable {
         
-        resetResponse();
-        
         Class<?> declaringClass = m.getDeclaringClass();
-        if (Client.class == declaringClass || Object.class == declaringClass) {
+        if (Client.class == declaringClass || InvocationHandlerAware.class == declaringClass
+            || Object.class == declaringClass) {
             return m.invoke(this, params);
         }
-        
+        resetResponse();
         OperationResourceInfo ori = cri.getMethodDispatcher().getOperationResourceInfo(m);
         if (ori == null) {
             reportInvalidResourceMethod(m, "INVALID_RESOURCE_METHOD");
@@ -95,7 +97,7 @@
         int bodyIndex = getBodyIndex(types, ori);
         
         UriBuilder builder = getCurrentBuilder().clone(); 
-        if (cri.isRoot()) {
+        if (isRoot) {
             builder.path(ori.getClassResourceInfo().getServiceClass());
         }
         builder.path(m);
@@ -114,7 +116,7 @@
             if (subCri == null) {
                 reportInvalidResourceMethod(m, "INVALID_SUBRESOURCE");
             }
-            ClientProxyImpl proxyImpl = new ClientProxyImpl(getBaseURI(), uri, subCri, inheritHeaders);
+            ClientProxyImpl proxyImpl = new ClientProxyImpl(getBaseURI(), uri, subCri, false, inheritHeaders);
             proxyImpl.setBus(bus);
             proxyImpl.setConduitSelector(conduitSelector);
             proxyImpl.setInInterceptors(inInterceptors);
@@ -132,11 +134,8 @@
         setRequestHeaders(headers, ori, types.containsKey(ParameterType.FORM), 
             bodyIndex == -1 ? null : params[bodyIndex].getClass(), m.getReturnType());
         
-        if (conduitSelector == null) {
-            return doDirectInvocation(uri, headers, ori, params, bodyIndex, types);
-        } else {
-            return doChainedInvocation(uri, headers, ori, params, bodyIndex, types);
-        }
+        return doChainedInvocation(uri, headers, ori, params, bodyIndex, types);
+        
     }
 
     private static MultivaluedMap<ParameterType, Parameter> getParametersInfo(OperationResourceInfo ori, 
@@ -351,33 +350,6 @@
         
     }
     
-    protected Object doDirectInvocation(URI uri, MultivaluedMap<String, String> headers, 
-        OperationResourceInfo ori, Object[] params, int bodyIndex, 
-        MultivaluedMap<ParameterType, Parameter> types) throws Throwable {
-
-        // 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], message, params[bodyIndex].getClass(), 
-                          m.getGenericParameterTypes()[bodyIndex],
-                          m.getParameterAnnotations()[bodyIndex], headers, connect.getOutputStream());
-            } else {
-                MultivaluedMap<String, String> form = handleForm(types, params);
-                writeBody(form, message, form.getClass(), form.getClass(), m.getDeclaredAnnotations(),
-                          headers, connect.getOutputStream());
-            }
-        }
-        
-        return handleResponse(connect, message, ori);
-        
-    }
-    
     private Object doChainedInvocation(URI uri, MultivaluedMap<String, String> headers, 
                           OperationResourceInfo ori, Object[] params, int bodyIndex, 
                           MultivaluedMap<ParameterType, Parameter> types) throws Throwable {

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java Fri Mar 20 10:46:33 2009
@@ -20,16 +20,11 @@
 
 import java.lang.reflect.InvocationHandler;
 import java.net.URI;
+import java.util.List;
 
-import javax.ws.rs.Path;
 import javax.ws.rs.core.MediaType;
 
-import org.apache.cxf.Bus;
-import org.apache.cxf.bus.spring.SpringBusFactory;
 import org.apache.cxf.common.util.ProxyHelper;
-import org.apache.cxf.jaxrs.model.ClassResourceInfo;
-import org.apache.cxf.jaxrs.utils.AnnotationUtils;
-import org.apache.cxf.jaxrs.utils.ResourceUtils;
 
 public final class JAXRSClientFactory {
     
@@ -49,58 +44,71 @@
      * Creates a proxy
      * @param baseURI baseURI
      * @param cls proxy class, if not interface then a CGLIB proxy will be created
-     * @param inheritHeaders if true then subresource proxies will inherit the headers
-     *        set on parent proxies 
+     * @param inheritHeaders if true then existing proxy headers will be inherited by 
+     *        subresource proxies if any
      * @return typed proxy
      */
     public static <T> T create(URI baseURI, Class<T> cls, boolean inheritHeaders) {
         
-        return create(baseURI, cls, inheritHeaders, false);
+        JAXRSClientFactoryBean bean = getBean(baseURI.toString(), cls, null);
+        bean.setInheritHeaders(inheritHeaders);
+        return bean.create(cls);
+        
     }
     
-    
     /**
      * Creates a proxy
-     * @param baseURI baseURI
+     * @param baseAddress baseAddress
      * @param cls proxy class, if not interface then a CGLIB proxy will be created
-     * @param config Spring configuration file location
+     * @param config classpath location of Spring configuration resource
      * @return typed proxy
      */
-    public static <T> T create(URI baseURI, Class<T> cls, String configLocation) {
-        SpringBusFactory bf = new SpringBusFactory();
-        Bus bus = bf.createBus(configLocation);
-        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
-        bean.setAddress(baseURI.toString());
-        bean.setServiceClass(cls);
-        bean.setBus(bus);
+    public static <T> T create(String baseAddress, Class<T> cls, String configLocation) {
+        JAXRSClientFactoryBean bean = getBean(baseAddress, cls, configLocation);
         return bean.create(cls);
     }
     
+    
     /**
      * Creates a proxy
-     * @param baseURI baseURI
+     * @param baseAddress baseAddress
      * @param cls proxy class, if not interface then a CGLIB proxy will be created
-     * @param inheritHeaders if true then existing proxy headers will be inherited by 
-     *        subresource proxies if any
-     * @param direct if true then no bus and chains will be created
+     * @param providers list of providers
      * @return typed proxy
      */
-    public static <T> T create(URI baseURI, Class<T> cls, boolean inheritHeaders, boolean direct) {
-        
-        if (!direct) {
-            JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
-            bean.setAddress(baseURI.toString());
-            bean.setServiceClass(cls);
-            bean.setInheritHeaders(inheritHeaders);
-            return bean.create(cls);
-        } else {
-            boolean isRoot = AnnotationUtils.getClassAnnotation(cls, Path.class) != null;
-            ClassResourceInfo cri = ResourceUtils.createClassResourceInfo(cls, cls, isRoot, true);
-            
-            return cls.cast(ProxyHelper.getProxy(cls.getClassLoader(),
-                            new Class[]{cls, Client.class}, 
-                            new ClientProxyImpl(baseURI, baseURI, cri, inheritHeaders)));
-        }
+    public static <T> T create(String baseAddress, Class<T> cls, List<?> providers) {
+        return create(baseAddress, cls, providers, null);
+    }
+    
+    /**
+     * Creates a proxy
+     * @param baseAddress baseAddress
+     * @param cls proxy class, if not interface then a CGLIB proxy will be created
+     * @param providers list of providers
+     * @param config classpath location of Spring configuration resource
+     * @return typed proxy
+     */
+    public static <T> T create(String baseAddress, Class<T> cls, List<?> providers, String configLocation) {
+        JAXRSClientFactoryBean bean = getBean(baseAddress, cls, configLocation);
+        bean.setProviders(providers);
+        return bean.create(cls);
+    }
+    
+    /**
+     * Creates a proxy which will do basic authentication
+     * @param baseAddress baseAddress
+     * @param cls proxy class, if not interface then a CGLIB proxy will be created
+     * @param username username
+     * @param password password
+     * @param config classpath location of Spring configuration resource
+     * @return typed proxy
+     */
+    public static <T> T create(String baseAddress, Class<T> cls, String username,
+                               String password, String configLocation) {
+        JAXRSClientFactoryBean bean = getBean(baseAddress, cls, configLocation);
+        bean.setUsername(username);
+        bean.setPassword(password);
+        return bean.create(cls);
     }
     
     /**
@@ -126,9 +134,6 @@
      * @return typed proxy
      */
     public static <T> T fromClient(Client client, Class<T> cls) {
-        if (cls.isAssignableFrom(client.getClass())) {
-            return cls.cast(client);
-        }
         return fromClient(client, cls, false);
     }
     
@@ -141,30 +146,25 @@
      * @return typed proxy
      */
     public static <T> T fromClient(Client client, Class<T> cls, boolean inheritHeaders) {
-        return fromClient(client, cls, inheritHeaders, false);
-    }
-    
-    /**
-     * Creates a proxy, baseURI will be set to Client currentURI
-     * @param client Client instance
-     * @param cls proxy class, if not interface then a CGLIB proxy will be created
-     * @param inheritHeaders if true then existing Client headers will be inherited by new proxy 
-     *        and subresource proxies if any 
-     * @param direct if true then no bus and chains will be created       
-     * @return typed proxy
-     */
-    public static <T> T fromClient(Client client, Class<T> cls, boolean inheritHeaders, boolean direct) {
         
-        T proxy = create(client.getCurrentURI(), cls, inheritHeaders, direct);
+        T proxy = create(client.getCurrentURI(), cls, inheritHeaders);
         if (inheritHeaders) {
             WebClient.client(proxy).headers(client.getHeaders());
         }
+        WebClient.copyProperties(WebClient.client(proxy), client);
         return proxy;
     }
     
     static <T> T create(Class<T> cls, InvocationHandler handler) {
         
-        return cls.cast(ProxyHelper.getProxy(cls.getClassLoader(),
-                        new Class[]{cls, Client.class}, handler));
+        return cls.cast(ProxyHelper.getProxy(cls.getClassLoader(), new Class[]{cls, Client.class}, handler));
+    }
+    
+    private static JAXRSClientFactoryBean getBean(String baseAddress, Class<?> cls, String configLocation) {
+        JAXRSClientFactoryBean bean = WebClient.getBean(baseAddress, configLocation);
+        bean.setServiceClass(cls);
+        return bean;
     }
+    
+    
 }

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=756410&r1=756409&r2=756410&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 Fri Mar 20 10:46:33 2009
@@ -21,10 +21,12 @@
 import java.net.URI;
 import java.util.Map;
 
+import javax.ws.rs.Path;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.MultivaluedMap;
 
 import org.apache.cxf.common.util.ProxyHelper;
+import org.apache.cxf.configuration.security.AuthorizationPolicy;
 import org.apache.cxf.endpoint.ConduitSelector;
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.endpoint.UpfrontConduitSelector;
@@ -34,10 +36,13 @@
 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.jaxrs.utils.AnnotationUtils;
 import org.apache.cxf.service.Service;
 
 public class JAXRSClientFactoryBean extends AbstractJAXRSFactoryBean {
     
+    private String username;
+    private String password;
     private boolean inheritHeaders; 
     private MultivaluedMap<String, String> headers;
     
@@ -51,6 +56,22 @@
         
     }
     
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+    
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+    
     public void setInheritHeaders(boolean ih) {
         inheritHeaders = ih;
     }
@@ -102,12 +123,13 @@
             Endpoint ep = createEndpoint();
             URI baseURI = URI.create(getAddress());
             ClassResourceInfo cri = serviceFactory.getClassResourceInfo().get(0);
-            
-            ClientProxyImpl proxyImpl = new ClientProxyImpl(baseURI, baseURI, cri, inheritHeaders);
+            boolean isRoot = AnnotationUtils.getClassAnnotation(cri.getServiceClass(), Path.class) != null;
+            ClientProxyImpl proxyImpl = new ClientProxyImpl(baseURI, baseURI, cri, isRoot, inheritHeaders);
             initClient(proxyImpl, ep);    
             
             return (Client)ProxyHelper.getProxy(cri.getServiceClass().getClassLoader(),
-                                        new Class[]{cri.getServiceClass(), Client.class}, 
+                                        new Class[]{cri.getServiceClass(), Client.class, 
+                                                    InvocationHandlerAware.class}, 
                                         proxyImpl);
         } catch (Exception ex) {
             throw new WebApplicationException();
@@ -124,6 +146,15 @@
     }
     
     protected void initClient(AbstractClient client, Endpoint ep) {
+        
+        if (username != null) {
+            AuthorizationPolicy authPolicy = new AuthorizationPolicy();
+            authPolicy.setUserName(username);
+            authPolicy.setPassword(password);
+            ep.getEndpointInfo().addExtensor(authPolicy);
+        }
+        
+        
         client.setConduitSelector(getConduitSelector(ep));
         client.setBus(getBus());
         client.setOutInterceptors(getOutInterceptors());

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=756410&r1=756409&r2=756410&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 Fri Mar 20 10:46:33 2009
@@ -18,7 +18,6 @@
  */
 package org.apache.cxf.jaxrs.client;
 
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.lang.annotation.Annotation;
@@ -54,22 +53,116 @@
 
 public class WebClient extends AbstractClient {
     
-    public WebClient(String baseAddress) {
+    protected WebClient(String baseAddress) {
         this(URI.create(baseAddress));
     }
     
-    public WebClient(URI baseURI) {
-        super(baseURI, baseURI);
+    protected WebClient(URI baseAddress) {
+        super(baseAddress, baseAddress);
     }
     
-    public WebClient(Client client) {
-        this(client, false);
+    /**
+     * Creates WebClient
+     * @param baseAddress baseAddress
+     */
+    public static WebClient create(String baseAddress) {
+        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
+        bean.setAddress(baseAddress);
+        return bean.createWebClient();
     }
     
-    public WebClient(Client client, boolean inheritHeaders) {
-        super(client, inheritHeaders);
+    public static WebClient create(URI baseURI) {
+        return create(baseURI.toString());
     }
     
+    /**
+     * Creates WebClient
+     * @param baseURI baseURI
+     * @param providers list of providers
+     */
+    public static WebClient create(String baseAddress, List<?> providers) {
+        return create(baseAddress, providers, null);        
+    }
+    
+    /**
+     * Creates a Spring-configuration aware WebClient
+     * @param baseAddress baseAddress
+     * @param providers list of providers
+     * @param configLocation classpath location of Spring configuration resource, can be null  
+     * @return WebClient instance
+     */
+    public static WebClient create(String baseAddress, List<?> providers, String configLocation) {
+        JAXRSClientFactoryBean bean = getBean(baseAddress, configLocation);
+        bean.setProviders(providers);
+        return bean.createWebClient();
+    }
+    
+    /**
+     * Creates a Spring-configuration aware WebClient
+     * @param baseAddress baseAddress
+     * @param configLocation classpath location of Spring configuration resource, can be null  
+     * @return WebClient instance
+     */
+    public static WebClient create(String baseAddress, String configLocation) {
+        JAXRSClientFactoryBean bean = getBean(baseAddress, configLocation);
+        
+        return bean.createWebClient();
+    }
+    
+    /**
+     * Creates a Spring-configuration aware WebClient which will do basic authentication
+     * @param baseAddress baseAddress
+     * @param username username
+     * @param password password
+     * @param configLocation classpath location of Spring configuration resource, can be null  
+     * @return WebClient instance
+     */
+    public static WebClient create(String baseAddress, String username, String password, 
+                                         String configLocation) {
+        JAXRSClientFactoryBean bean = getBean(baseAddress, configLocation);
+        
+        bean.setUsername(username);
+        bean.setPassword(password);
+        
+        return bean.createWebClient();
+    }
+    
+    /**
+     * Creates WebClient, baseURI will be set to Client currentURI
+     * @param client existing client
+     */
+    public static WebClient fromClient(Client client) {
+        return fromClient(client, false);
+    }
+    
+    public static WebClient fromClient(Client client, boolean inheritHeaders) {
+        WebClient webClient = create(client.getCurrentURI());
+        if (inheritHeaders) {
+            webClient.headers(client.getHeaders());
+        }
+        copyProperties(webClient, client);
+        return webClient;
+    }
+    
+    /**
+     * Converts proxy to Client
+     * @param proxy the proxy
+     * @return proxy as a Client 
+     */
+    public static Client client(Object proxy) {
+        if (proxy instanceof Client) {
+            return (Client)proxy;
+        }
+        return null;
+    }
+    
+    /**
+     * Does HTTP invocation
+     * @param httpMethod HTTP method
+     * @param body request body, can be null
+     * @return JAXRS Response, entity may hold a string representaion of 
+     *         error message if client or server error occured
+     */
     public Response invoke(String httpMethod, Object body) {
         return doInvoke(httpMethod, body, InputStream.class);
     }
@@ -175,34 +268,6 @@
         return this;
     }
     
-    /**
-     * Converts proxy to Client
-     * @param proxy the proxy
-     * @return proxy as a Client 
-     */
-    public static Client client(Object proxy) {
-        if (proxy instanceof Client) {
-            return (Client)proxy;
-        }
-        return null;
-    }
-    
-    
-    public static WebClient createClient(String baseAddress, String configLocation) {
-        SpringBusFactory bf = new SpringBusFactory();
-        Bus bus = bf.createBus(configLocation);
-        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
-        bean.setBus(bus);
-        bean.setAddress(baseAddress);
-        return bean.createWebClient();
-    }
-    
-    public static WebClient createClient(String baseAddress) {
-        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
-        bean.setAddress(baseAddress);
-        return bean.createWebClient();
-    }
-    
     @Override
     public WebClient type(MediaType ct) {
         return (WebClient)super.type(ct);
@@ -273,7 +338,7 @@
         return (WebClient)super.reset();
     }
     
-    private Response doInvoke(String httpMethod, Object body, Class<?> responseClass) {
+    protected Response doInvoke(String httpMethod, Object body, Class<?> responseClass) {
         
         MultivaluedMap<String, String> headers = getHeaders();
         if (body != null && headers.getFirst(HttpHeaders.CONTENT_TYPE) == null) {
@@ -282,34 +347,14 @@
         if (responseClass != null && headers.getFirst(HttpHeaders.ACCEPT) == null) {
             headers.putSingle(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML_TYPE.toString());
         }
-        if (conduitSelector == null) {
-            return doDirectInvocation(httpMethod, headers, body, responseClass);
-        } else {
-            return doChainedInvocation(httpMethod, headers, body, responseClass);
-        }
-    }
-
-    protected Response doDirectInvocation(String httpMethod, 
-        MultivaluedMap<String, String> headers, Object body, Class<?> responseClass) {
+        resetResponse();
+        return doChainedInvocation(httpMethod, headers, body, responseClass);
         
-        HttpURLConnection conn = getConnection(httpMethod);
-        
-        setAllHeaders(headers, conn);
-        Message message = createSimpleMessage();
-        if (body != null) {
-            try {
-                writeBody(body, message, body.getClass(), body.getClass(), 
-                      new Annotation[]{}, headers, conn.getOutputStream());
-            } catch (IOException ex) {
-                throw new WebApplicationException(ex);
-            }
-        }
-        return handleResponse(conn, message, responseClass);
     }
-    
+
     protected Response doChainedInvocation(String httpMethod, 
         MultivaluedMap<String, String> headers, Object body, Class<?> responseClass) {
-
+        
         Message m = createMessage(httpMethod, headers, getCurrentURI());
         
         if (body != null) {
@@ -372,10 +417,35 @@
             } catch (Exception ex) {
                 throw new Fault(ex);
             }
-            
         }
-        
     }
 
+    static void copyProperties(Client toClient, Client fromClient) {
+        AbstractClient newClient = toAbstractClient(toClient);
+        AbstractClient oldClient = toAbstractClient(fromClient);
+        newClient.bus = oldClient.bus;
+        newClient.conduitSelector = oldClient.conduitSelector;
+        newClient.inInterceptors = oldClient.inInterceptors;
+        newClient.outInterceptors = oldClient.outInterceptors;
+    }
+    
+    private static AbstractClient toAbstractClient(Client client) {
+        if (client instanceof AbstractClient) {
+            return (AbstractClient)client;
+        } else {
+            return (AbstractClient)((InvocationHandlerAware)client).getInvocationHandler();
+        }
+    }
     
+    static JAXRSClientFactoryBean getBean(String baseAddress, String configLocation) {
+        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
+        
+        if (configLocation != null) {
+            SpringBusFactory bf = new SpringBusFactory();
+            Bus bus = bf.createBus(configLocation);
+            bean.setBus(bus);
+        }
+        bean.setAddress(baseAddress);
+        return bean;
+    }
 }

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContext.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContext.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContext.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContext.java Fri Mar 20 10:46:33 2009
@@ -36,7 +36,7 @@
 public interface MessageContext {
     
     Object get(Object key);
-    void put(Object key, Object value, boolean outbound);
+    void put(Object key, Object value);
     
     UriInfo getUriInfo();
     Request getRequest();

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java Fri Mar 20 10:46:33 2009
@@ -49,7 +49,6 @@
 public class MessageContextImpl implements MessageContext {
 
     private Message m;
-    
     public MessageContextImpl(Message m) {
         this.m = m;
     }
@@ -112,11 +111,7 @@
         return JAXRSUtils.createServletResourceValue(m, ServletContext.class);
     }
 
-    public void put(Object key, Object value, boolean outbound) {
-        if (outbound) {
-            throw new UnsupportedOperationException(
-                      "MessageContext.put() is not supported for outbound properties");
-        }
+    public void put(Object key, Object value) {
         m.put(key.toString(), value);
     }
 

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/Messages.properties
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/Messages.properties?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/Messages.properties (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/Messages.properties Fri Mar 20 10:46:33 2009
@@ -18,6 +18,6 @@
 #    under the License.
 #
 #
-WEB_APP_EXCEPTION=WebApplicationExceptionMapper has caught an exception {0}
+WEB_APP_EXCEPTION=WebApplicationException has been caught : {0}
 DEFAULT_EXCEPTION_MESSAGE=Internal server exception occurred. Please consult logs for more information.
 

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WebApplicationExceptionMapper.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WebApplicationExceptionMapper.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WebApplicationExceptionMapper.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WebApplicationExceptionMapper.java Fri Mar 20 10:46:33 2009
@@ -38,14 +38,20 @@
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(WebApplicationExceptionMapper.class);
     
     public Response toResponse(WebApplicationException ex) {
-        if (LOG.isLoggable(Level.FINE)) {
+        if (LOG.isLoggable(Level.WARNING)) {
+            String message = ex.getCause() == null ? ex.getMessage() : ex.getCause().getMessage();
+            if (message == null) {
+                if (ex.getCause() != null) {
+                    message = "cause is " + ex.getCause().getClass().getName();
+                } else {
+                    message = "no cause is available";
+                }
+            }
             org.apache.cxf.common.i18n.Message errorMsg = 
-                new org.apache.cxf.common.i18n.Message("WEB_APP_EXCEPTION", 
-                    BUNDLE, ex.getCause() == null ? ex.getMessage() : ex.getCause().getMessage());
-            LOG.fine(errorMsg.toString());
+                new org.apache.cxf.common.i18n.Message("WEB_APP_EXCEPTION", BUNDLE, message);
+            LOG.warning(errorMsg.toString());
         }
-         
-        Response r = ex.getResponse();
+        Response r = ex.getResponse(); 
         if (r == null) {
             String message = null;
             if (ex.getCause() == null) {

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java Fri Mar 20 10:46:33 2009
@@ -37,7 +37,7 @@
     public Object get(Object key) {
         return get() != null ? get().get(key) : null;
     }
-
+    
     public <T> T getContext(Class<T> contextClass) {
         return get() != null ? get().getContext(contextClass) : null;
     }
@@ -78,12 +78,11 @@
         return get() != null ? get().getRequest() : null;
     }
 
-    public void put(Object key, Object value, boolean outbound) {
+    public void put(Object key, Object value) {
         if (get() != null) {
-            get().put(key, value, outbound);
+            get().put(key, value);
         }
         throw new IllegalStateException("MessageContext is not set");
-        
     }
 
     public <T, E> T getResolver(Class<T> resolverClass, Class<E> resolveClazz) {

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java Fri Mar 20 10:46:33 2009
@@ -119,7 +119,7 @@
                 new org.apache.cxf.common.i18n.Message("NO_ROOT_EXC", 
                                                    BUNDLE, 
                                                    rawPath);
-            LOG.severe(errorMsg.toString());
+            LOG.warning(errorMsg.toString());
 
             throw new WebApplicationException(Response.Status.NOT_FOUND);
         }

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java Fri Mar 20 10:46:33 2009
@@ -25,6 +25,7 @@
 import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.ResourceBundle;
 import java.util.logging.Logger;
 
@@ -32,21 +33,27 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.ext.MessageBodyWriter;
+import javax.xml.stream.XMLStreamWriter;
+import javax.xml.stream.events.XMLEvent;
 
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor;
+import org.apache.cxf.io.CachedOutputStream;
 import org.apache.cxf.jaxrs.ext.ResponseHandler;
 import org.apache.cxf.jaxrs.model.ClassResourceInfo;
 import org.apache.cxf.jaxrs.model.OperationResourceInfo;
 import org.apache.cxf.jaxrs.model.ProviderInfo;
 import org.apache.cxf.jaxrs.provider.ProviderFactory;
 import org.apache.cxf.jaxrs.utils.HttpUtils;
+import org.apache.cxf.jaxrs.utils.InjectionUtils;
 import org.apache.cxf.jaxrs.utils.JAXRSUtils;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageContentsList;
 import org.apache.cxf.phase.Phase;
+import org.apache.cxf.staxutils.CachingXmlEventWriter;
+import org.apache.cxf.staxutils.StaxUtils;
 
 public class JAXRSOutInterceptor extends AbstractOutDatabindingInterceptor {
     private static final Logger LOG = LogUtils.getL7dLogger(JAXRSOutInterceptor.class);
@@ -116,18 +123,27 @@
                                   String baseAddress,
                                   boolean firstTry) {
         message.put(Message.RESPONSE_CODE, response.getStatus());
-        message.put(Message.PROTOCOL_HEADERS, response.getMetadata());
-                        
+        Map<String, List<String>> theHeaders = 
+            (Map<String, List<String>>)message.get(Message.PROTOCOL_HEADERS);
+        if (firstTry && theHeaders != null) {
+            // some headers might've been setup by custom cxf interceptors
+            theHeaders.putAll((Map)response.getMetadata());
+        } else {
+            message.put(Message.PROTOCOL_HEADERS, response.getMetadata());
+        }
+        
         Object responseObj = response.getEntity();
         if (responseObj == null) {
             return;
         }
         
         Class targetType = responseObj.getClass();
-        List<MediaType> availableContentTypes = 
-            computeAvailableContentTypes(message, response);  
+        List<MediaType> availableContentTypes = computeAvailableContentTypes(message, response);  
         
-        Method invoked = ori == null ? null : ori.getMethodToInvoke();
+        Method invoked = null;
+        if (firstTry) {
+            invoked = ori == null ? null : ori.getMethodToInvoke();
+        }
         
         MessageBodyWriter writer = null;
         MediaType responseType = null;
@@ -137,7 +153,7 @@
                       invoked != null ? invoked.getGenericReturnType() : null, 
                       invoked != null ? invoked.getAnnotations() : new Annotation[]{}, 
                       type,
-                      message.getExchange().getInMessage());
+                      message);
             
             if (writer != null) {
                 responseType = type;
@@ -145,15 +161,13 @@
             }
         }
     
-        OutputStream out = message.getContent(OutputStream.class);
+        OutputStream outOriginal = message.getContent(OutputStream.class);
         if (writer == null) {
             message.put(Message.RESPONSE_CODE, 500);
-            writeResponseErrorMessage(out, 
-                  "NO_MSG_WRITER",
-                  invoked != null ? invoked.getReturnType().getSimpleName() : "");
+            writeResponseErrorMessage(outOriginal, "NO_MSG_WRITER", targetType.getSimpleName());
             return;
         }
-        
+        boolean enabled = checkBufferingMode(message, writer, firstTry);
         try {
             
             responseType = checkFinalContentType(responseType);
@@ -161,24 +175,80 @@
             message.put(Message.CONTENT_TYPE, responseType.toString());
             
             LOG.fine("Response EntityProvider is: " + writer.getClass().getName());
-            writer.writeTo(responseObj, targetType, invoked.getGenericReturnType(), 
-                           invoked != null ? invoked.getAnnotations() : new Annotation[]{}, 
-                           responseType, 
-                           response.getMetadata(), 
-                           out);
+            try {
+                writer.writeTo(responseObj, targetType, 
+                               invoked != null ? invoked.getGenericReturnType() : null, 
+                               invoked != null ? invoked.getAnnotations() : new Annotation[]{}, 
+                               responseType, 
+                               response.getMetadata(), 
+                               message.getContent(OutputStream.class));
+                checkCachedStream(message, outOriginal, enabled);
+            } finally {
+                if (enabled) {
+                    message.setContent(OutputStream.class, outOriginal);
+                    message.put(XMLStreamWriter.class.getName(), null);
+                }
+            }
             
         } catch (IOException ex) {
             handleWriteException(message, response, ori, baseAddress, ex, responseObj, firstTry);
-        } catch (Exception ex) {
+        } catch (Throwable ex) {
             handleWriteException(message, response, ori, baseAddress, ex, responseObj, firstTry);
         }
     }
     
+    private boolean checkBufferingMode(Message m, MessageBodyWriter w, boolean firstTry) {
+        if (!firstTry) {
+            return false;
+        }
+        Object outBuf = m.getContextualProperty(OUT_BUFFERING);
+        boolean enabled = Boolean.TRUE.equals(outBuf) || "true".equals(outBuf);
+        if (!enabled && outBuf == null) {
+            enabled = InjectionUtils.invokeBooleanGetter(w, "getEnableBuffering");
+        }
+        if (enabled) {
+            boolean streamingOn = 
+                "org.apache.cxf.jaxrs.provider.JAXBElementProvider".equals(w.getClass().getName())
+                && InjectionUtils.invokeBooleanGetter(w, "getEnableStreaming");
+            if (streamingOn) {
+                m.put(XMLStreamWriter.class.getName(), new CachingXmlEventWriter());
+            } else {
+                m.setContent(OutputStream.class, new CachedOutputStream());
+            }
+        }
+        return enabled;
+    }
+    
+    private void checkCachedStream(Message m, OutputStream osOriginal, boolean enabled) throws Exception {
+        if (!enabled) {
+            return;
+        }
+        XMLStreamWriter writer = (XMLStreamWriter)m.get(XMLStreamWriter.class.getName());
+        if (writer instanceof CachingXmlEventWriter) {
+            CachingXmlEventWriter cache = (CachingXmlEventWriter)writer;
+            if (cache.getEvents().size() != 0) {
+                XMLStreamWriter origWriter = StaxUtils.createXMLStreamWriter(osOriginal);
+                for (XMLEvent event : cache.getEvents()) {
+                    StaxUtils.writeEvent(event, origWriter);
+                }
+            }
+            m.put(XMLStreamWriter.class.getName(), null);
+            return;
+        }
+        OutputStream os = m.getContent(OutputStream.class);
+        if (os != osOriginal && os instanceof CachedOutputStream) {
+            CachedOutputStream cos = (CachedOutputStream)os;
+            if (cos.size() != 0) {
+                cos.writeCacheTo(osOriginal);
+            }
+        }
+    }
+    
     private void handleWriteException(Message message, 
                                          Response response, 
                                          OperationResourceInfo ori,
                                          String baseAddress,
-                                         Exception ex,
+                                         Throwable ex,
                                          Object responseObj,
                                          boolean firstTry) {
         OutputStream out = message.getContent(OutputStream.class);
@@ -218,7 +288,7 @@
         List<MediaType> produceTypes = null;
         OperationResourceInfo operation = exchange.get(OperationResourceInfo.class);
         if (contentType != null) {
-            produceTypes = Collections.singletonList(MediaType.valueOf(contentType.toString()));
+            return Collections.singletonList(MediaType.valueOf(contentType.toString()));
         } else if (operation != null) {
             produceTypes = operation.getProduceTypes();
         } else {

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractConfigurableProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractConfigurableProvider.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractConfigurableProvider.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractConfigurableProvider.java Fri Mar 20 10:46:33 2009
@@ -25,8 +25,9 @@
 
     private List<String> consumeMediaTypes;
     private List<String> produceMediaTypes;
+    private boolean enableBuffering;
     
-    protected void setConsumeMediaTypes(List<String> types) {
+    public void setConsumeMediaTypes(List<String> types) {
         consumeMediaTypes = types;
     }
     
@@ -34,11 +35,19 @@
         return consumeMediaTypes;    
     }
     
-    protected void setProduceMediaTypes(List<String> types) {
+    public void setProduceMediaTypes(List<String> types) {
         produceMediaTypes = types;
     }
     
     public List<String> getProduceMediaTypes() {
         return produceMediaTypes;    
     }
+    
+    public void setEnableBuffering(boolean enableBuf) {
+        enableBuffering = enableBuf;
+    }
+    
+    public boolean getEnableBuffering() {
+        return enableBuffering;
+    }
 }

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java Fri Mar 20 10:46:33 2009
@@ -161,7 +161,6 @@
         // TODO: still not checked : 
         // - XmlJavaTypeAdapter at package level
         // - anything else ?
-        
         return type.getAnnotation(XmlRootElement.class) != null
             || JAXBElement.class.isAssignableFrom(type)
             || objectFactoryForClass(type)
@@ -277,6 +276,7 @@
             ? e.getLinkedException() : e.getCause() != null ? e.getCause() : e;
         String message = new org.apache.cxf.common.i18n.Message("JAXB_EXCEPTION", 
                              BUNDLE, t.getMessage()).toString();
+        LOG.warning(message);
         Response r = Response.status(Response.Status.INTERNAL_SERVER_ERROR)
             .type(MediaType.TEXT_PLAIN).entity(message).build();
         throw new WebApplicationException(t, r);

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/BinaryDataProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/BinaryDataProvider.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/BinaryDataProvider.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/BinaryDataProvider.java Fri Mar 20 10:46:33 2009
@@ -40,7 +40,7 @@
 
 import org.apache.cxf.helpers.IOUtils;
 
-public class BinaryDataProvider 
+public class BinaryDataProvider extends AbstractConfigurableProvider 
     implements MessageBodyReader<Object>, MessageBodyWriter<Object> {
     
     private static final int BUFFER_SIZE = 4096;

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java Fri Mar 20 10:46:33 2009
@@ -39,10 +39,12 @@
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
+import javax.xml.stream.XMLStreamWriter;
 import javax.xml.transform.stream.StreamSource;
 
 import org.apache.cxf.jaxrs.ext.MessageContext;
 import org.apache.cxf.jaxrs.utils.schemas.SchemaHandler;
+import org.apache.cxf.staxutils.StaxUtils;
 
 @ProduceMime({"application/xml", "text/xml" })
 @ConsumeMime({"application/xml", "text/xml" })
@@ -50,12 +52,25 @@
 public class JAXBElementProvider extends AbstractJAXBProvider  {
     
     private Map<String, Object> mProperties = new HashMap<String, Object>();
+    private boolean enableStreaming;
     
     @Context
     public void setMessageContext(MessageContext mc) {
         super.setContext(mc);
     }
     
+    public void setEnableStreaming(boolean enableStream) {
+        enableStreaming = enableStream; 
+    }
+    
+    public boolean getEnableStreaming() {
+        return enableStreaming;
+    }
+    
+    public void setEnableBuffering(boolean enableBuf) {
+        super.setEnableBuffering(enableBuf);
+    }
+    
     public void setConsumeMediaTypes(List<String> types) {
         super.setConsumeMediaTypes(types);
     }
@@ -121,10 +136,19 @@
             for (Map.Entry<String, Object> entry : mProperties.entrySet()) {
                 ms.setProperty(entry.getKey(), entry.getValue());
             }
-            ms.marshal(actualObject, os);
+            if (enableStreaming) {
+                XMLStreamWriter writer = 
+                    (XMLStreamWriter)getContext().get(XMLStreamWriter.class.getName());
+                if (writer == null) {
+                    writer = StaxUtils.createXMLStreamWriter(os);
+                }
+                ms.marshal(actualObject, writer);
+            } else {
+                ms.marshal(actualObject, os);
+            }
             
         } catch (JAXBException e) {
-            throw new WebApplicationException(e);
+            handleJAXBException(e);
         }  catch (WebApplicationException e) {
             throw e;
         } catch (Exception e) {

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java Fri Mar 20 10:46:33 2009
@@ -70,6 +70,10 @@
         super.setContext(mc);
     }
     
+    public void setEnableBuffering(boolean enableBuf) {
+        super.setEnableBuffering(enableBuf);
+    }
+    
     public void setConsumeMediaTypes(List<String> types) {
         super.setConsumeMediaTypes(types);
     }
@@ -163,7 +167,7 @@
             xsw.close();
             
         } catch (JAXBException e) {
-            throw new WebApplicationException(e);
+            handleJAXBException(e);
         } catch (XMLStreamException e) {
             throw new WebApplicationException(e);
         } catch (Exception e) {

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/SourceProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/SourceProvider.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/SourceProvider.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/SourceProvider.java Fri Mar 20 10:46:33 2009
@@ -25,6 +25,8 @@
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 
+import javax.ws.rs.ConsumeMime;
+import javax.ws.rs.ProduceMime;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
@@ -44,6 +46,8 @@
 import org.w3c.dom.Document;
 
 @Provider
+@ProduceMime({"application/xml", "text/xml" })
+@ConsumeMime({"application/xml", "text/xml" })
 public class SourceProvider implements 
     MessageBodyReader<Object>, MessageBodyWriter<Source> {
 

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java Fri Mar 20 10:46:33 2009
@@ -87,6 +87,16 @@
         
     }
 
+    public static boolean invokeBooleanGetter(Object o, String name) {
+        try {
+            Method method = o.getClass().getMethod(name, new Class[]{});
+            return (Boolean)method.invoke(o, new Object[]{});
+        } catch (Exception ex) {
+            LOG.finest("Can not invoke method " + name + " on object of class " + o.getClass().getName());
+        }
+        return false;
+    }
+    
     public static Method checkProxy(Method methodToInvoke, Object resourceObject) {
         if (Proxy.class.isInstance(resourceObject)) {
             for (Class<?> c : resourceObject.getClass().getInterfaces()) {

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java Fri Mar 20 10:46:33 2009
@@ -300,7 +300,7 @@
                                                    path,
                                                    requestType.toString(),
                                                    convertTypesToString(acceptContentTypes));
-        LOG.severe(errorMsg.toString());
+        LOG.warning(errorMsg.toString());
         
         throw new WebApplicationException(status);
         
@@ -582,24 +582,28 @@
     
     public static <T> T createContextValue(Message m, Type genericType, Class<T> clazz) {
  
+        Message contextMessage = m.getExchange() != null ? m.getExchange().getInMessage() : m;
+        if (contextMessage == null && Boolean.FALSE.equals(m.get(Message.INBOUND_MESSAGE))) { 
+            contextMessage = m;
+        }
         Object o = null;
         if (UriInfo.class.isAssignableFrom(clazz)) {
-            o = createUriInfo(m);
+            o = createUriInfo(contextMessage);
         } else if (HttpHeaders.class.isAssignableFrom(clazz)) {
-            o = new HttpHeadersImpl(m);
+            o = new HttpHeadersImpl(contextMessage);
         } else if (Request.class.isAssignableFrom(clazz)) {
-            o = new RequestImpl(m);
+            o = new RequestImpl(contextMessage);
         } else if (SecurityContext.class.isAssignableFrom(clazz)) {
-            o = new SecurityContextImpl(m);
+            o = new SecurityContextImpl(contextMessage);
         } else if (MessageBodyWorkers.class.isAssignableFrom(clazz)) {
-            o = new ProvidersImpl(m);
+            o = new ProvidersImpl(contextMessage);
         } else if (ContextResolver.class.isAssignableFrom(clazz)) {
-            o = createContextResolver(genericType, m);
+            o = createContextResolver(genericType, contextMessage);
         } else if (MessageContext.class.isAssignableFrom(clazz)) {
             o = new MessageContextImpl(m);
         }
         
-        o = o == null ? createServletResourceValue(m, clazz) : o;
+        o = o == null ? createServletResourceValue(contextMessage, clazz) : o;
         return clazz.cast(o);
     }
     
@@ -761,14 +765,18 @@
                                           + targetTypeClass.getSimpleName() 
                                            + ", content type : " + contentType;
                     LOG.severe(errorMessage);
-                    throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
-                }    
+                    throw new WebApplicationException(e);
+                } catch (WebApplicationException ex) {
+                    throw ex;
+                } catch (Exception ex) {
+                    throw new WebApplicationException(ex);
+                }
             } else {
                 String errorMessage = new org.apache.cxf.common.i18n.Message("NO_MSG_READER",
                                                        BUNDLE,
                                                        targetTypeClass.getSimpleName(),
                                                        contentType).toString();
-                LOG.severe(errorMessage);
+                LOG.warning(errorMessage);
                 throw new WebApplicationException(Response.Status.UNSUPPORTED_MEDIA_TYPE);
             }
         }

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java Fri Mar 20 10:46:33 2009
@@ -72,8 +72,10 @@
                     if (enableStatic) {
                         ClassResourceInfo subCri = cri.findResource(subClass, subClass);
                         if (subCri == null) {
-                            subCri = createClassResourceInfo(subClass, subClass, false, enableStatic);
+                            subCri = subClass == cri.getServiceClass() ? cri
+                                     : createClassResourceInfo(subClass, subClass, false, enableStatic);
                         }
+                        
                         if (subCri != null) {
                             cri.addSubClassResourceInfo(subCri);
                         }

Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/multipart/AttachmentUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/multipart/AttachmentUtils.java?rev=756410&r1=756409&r2=756410&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/multipart/AttachmentUtils.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/multipart/AttachmentUtils.java Fri Mar 20 10:46:33 2009
@@ -73,10 +73,10 @@
     public static MultipartBody getMultipartBody(MessageContext mc,
         String attachmentDir, String attachmentThreshold) {
         if (attachmentDir != null) {
-            mc.put(AttachmentDeserializer.ATTACHMENT_DIRECTORY, attachmentDir, false);
+            mc.put(AttachmentDeserializer.ATTACHMENT_DIRECTORY, attachmentDir);
         }
         if (attachmentThreshold != null) {
-            mc.put(AttachmentDeserializer.ATTACHMENT_MEMORY_THRESHOLD, attachmentThreshold, false);
+            mc.put(AttachmentDeserializer.ATTACHMENT_MEMORY_THRESHOLD, attachmentThreshold);
         }
         return (MultipartBody)mc.get(MultipartBody.INBOUND_MESSAGE_ATTACHMENTS);
     }

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=756410&r1=756409&r2=756410&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 Fri Mar 20 10:46:33 2009
@@ -87,6 +87,8 @@
           <xsd:attribute name="serviceClass" type="xsd:string"/>
           <xsd:attribute name="inheritHeaders" type="xsd:boolean"/>
           <xsd:attribute name="bus" type="xsd:string" />
+          <xsd:attribute name="username" type="xsd:string"/>
+          <xsd:attribute name="password" type="xsd:string"/>
         </xsd:extension>
       </xsd:complexContent>
     </xsd:complexType>