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/07/08 17:19:27 UTC
svn commit: r792183 - in /cxf/trunk:
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/
rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/
systests/src/test/java/org/apache/cxf/systest/jaxrs/
Author: sergeyb
Date: Wed Jul 8 15:19:27 2009
New Revision: 792183
URL: http://svn.apache.org/viewvc?rev=792183&view=rev
Log:
JAX-RS : access for proxy and http clients to its config
Added:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientMessageObserver.java (with props)
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientConfiguration.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java?rev=792183&r1=792182&r2=792183&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java Wed Jul 8 15:19:27 2009
@@ -29,6 +29,7 @@
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
@@ -47,7 +48,6 @@
import javax.ws.rs.ext.MessageBodyWriter;
import org.apache.cxf.Bus;
-import org.apache.cxf.BusFactory;
import org.apache.cxf.common.i18n.BundleUtils;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.endpoint.ConduitSelector;
@@ -75,7 +75,9 @@
public class AbstractClient implements Client {
private static final Logger LOG = LogUtils.getL7dLogger(AbstractClient.class);
private static final ResourceBundle BUNDLE = BundleUtils.getBundle(AbstractClient.class);
-
+ private static final String REQUEST_CONTEXT = "RequestContext";
+ private static final String RESPONSE_CONTEXT = "ResponseContext";
+
protected ClientConfiguration cfg = new ClientConfiguration();
private MultivaluedMap<String, String> requestHeaders = new MetadataMap<String, String>();
@@ -495,19 +497,19 @@
message.getExchange().put(ConduitSelector.class, cfg.getConduitSelector());
}
- protected PhaseInterceptorChain setupOutInterceptorChain(Endpoint endpoint) {
+ protected static PhaseInterceptorChain setupOutInterceptorChain(ClientConfiguration cfg) {
PhaseManager pm = cfg.getBus().getExtension(PhaseManager.class);
List<Interceptor> i1 = cfg.getBus().getOutInterceptors();
List<Interceptor> i2 = cfg.getOutInterceptors();
- List<Interceptor> i3 = endpoint.getOutInterceptors();
+ List<Interceptor> i3 = cfg.getConduitSelector().getEndpoint().getOutInterceptors();
return new PhaseChainCache().get(pm.getOutPhases(), i1, i2, i3);
}
- protected PhaseInterceptorChain setupInInterceptorChain(Endpoint endpoint) {
+ protected static PhaseInterceptorChain setupInInterceptorChain(ClientConfiguration cfg) {
PhaseManager pm = cfg.getBus().getExtension(PhaseManager.class);
List<Interceptor> i1 = cfg.getBus().getInInterceptors();
List<Interceptor> i2 = cfg.getInInterceptors();
- List<Interceptor> i3 = endpoint.getInInterceptors();
+ List<Interceptor> i3 = cfg.getConduitSelector().getEndpoint().getInInterceptors();
return new PhaseChainCache().get(pm.getInPhases(), i1, i2, i3);
}
@@ -536,44 +538,28 @@
exchange.setSynchronous(true);
exchange.setOutMessage(m);
exchange.put(Bus.class, cfg.getBus());
- exchange.put(MessageObserver.class, new ClientMessageObserver());
+ exchange.put(MessageObserver.class, new ClientMessageObserver(cfg));
exchange.put(Endpoint.class, cfg.getConduitSelector().getEndpoint());
exchange.setOneWay(false);
m.setExchange(exchange);
- PhaseInterceptorChain chain = setupOutInterceptorChain(cfg.getConduitSelector().getEndpoint());
+ PhaseInterceptorChain chain = setupOutInterceptorChain(cfg);
m.setInterceptorChain(chain);
+ // context
+ if (cfg.getRequestContext().size() > 0 || cfg.getResponseContext().size() > 0) {
+ Map<String, Object> context = new HashMap<String, Object>();
+ context.put(REQUEST_CONTEXT, cfg.getRequestContext());
+ context.put(RESPONSE_CONTEXT, cfg.getResponseContext());
+ m.put(Message.INVOCATION_CONTEXT, context);
+ m.putAll(cfg.getRequestContext());
+ exchange.putAll(cfg.getRequestContext());
+ }
+
//setup conduit selector
prepareConduitSelector(m);
return m;
}
- private class ClientMessageObserver implements MessageObserver {
-
- public void onMessage(Message m) {
-
- Message message = cfg.getConduitSelector().getEndpoint().getBinding().createMessage(m);
- message.put(Message.REQUESTOR_ROLE, Boolean.TRUE);
- message.put(Message.INBOUND_MESSAGE, Boolean.TRUE);
- PhaseInterceptorChain chain = setupInInterceptorChain(cfg.getConduitSelector().getEndpoint());
- message.setInterceptorChain(chain);
- message.getExchange().setInMessage(message);
- Bus origBus = BusFactory.getThreadDefaultBus(false);
- BusFactory.setThreadDefaultBus(cfg.getBus());
-
- // execute chain
- try {
- chain.doIntercept(message);
- } finally {
- BusFactory.setThreadDefaultBus(origBus);
- }
- }
-
- }
-
-
-
-
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientConfiguration.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientConfiguration.java?rev=792183&r1=792182&r2=792183&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientConfiguration.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientConfiguration.java Wed Jul 8 15:19:27 2009
@@ -18,13 +18,21 @@
*/
package org.apache.cxf.jaxrs.client;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.cxf.Bus;
import org.apache.cxf.common.util.ModCountCopyOnWriteArrayList;
import org.apache.cxf.endpoint.ConduitSelector;
import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.interceptor.InterceptorProvider;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.ExchangeImpl;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.transport.Conduit;
+import org.apache.cxf.transport.MessageObserver;
public class ClientConfiguration implements InterceptorProvider {
@@ -34,7 +42,10 @@
private List<Interceptor> inFault = new ModCountCopyOnWriteArrayList<Interceptor>();
private ConduitSelector conduitSelector;
private Bus bus;
-
+ private Map<String, Object> requestContext = new HashMap<String, Object>();
+ private Map<String, Object> responseContext = new HashMap<String, Object>();
+
+
public void setConduitSelector(ConduitSelector cs) {
this.conduitSelector = cs;
}
@@ -82,4 +93,21 @@
public void setOutFaultInterceptors(List<Interceptor> interceptors) {
outFault = interceptors;
}
+
+ public Conduit getConduit() {
+ Message message = new MessageImpl();
+ Exchange exchange = new ExchangeImpl();
+ message.setExchange(exchange);
+ exchange.put(MessageObserver.class, new ClientMessageObserver(this));
+ exchange.put(Bus.class, bus);
+ return getConduitSelector().selectConduit(message);
+ }
+
+ public Map<String, Object> getResponseContext() {
+ return responseContext;
+ }
+
+ public Map<String, Object> getRequestContext() {
+ return requestContext;
+ }
}
Added: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientMessageObserver.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientMessageObserver.java?rev=792183&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientMessageObserver.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientMessageObserver.java Wed Jul 8 15:19:27 2009
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxrs.client;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.PhaseInterceptorChain;
+import org.apache.cxf.transport.MessageObserver;
+
+class ClientMessageObserver implements MessageObserver {
+
+ private ClientConfiguration cfg;
+
+ public ClientMessageObserver(ClientConfiguration cfg) {
+ this.cfg = cfg;
+ }
+
+ public void onMessage(Message m) {
+
+ Message message = cfg.getConduitSelector().getEndpoint().getBinding().createMessage(m);
+ message.put(Message.REQUESTOR_ROLE, Boolean.TRUE);
+ message.put(Message.INBOUND_MESSAGE, Boolean.TRUE);
+ PhaseInterceptorChain chain = AbstractClient.setupInInterceptorChain(cfg);
+ message.setInterceptorChain(chain);
+ message.getExchange().setInMessage(message);
+ Bus origBus = BusFactory.getThreadDefaultBus(false);
+ BusFactory.setThreadDefaultBus(cfg.getBus());
+
+ // execute chain
+ try {
+ chain.doIntercept(message);
+ } finally {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
+ }
+
+}
Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientMessageObserver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientMessageObserver.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java?rev=792183&r1=792182&r2=792183&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java Wed Jul 8 15:19:27 2009
@@ -176,6 +176,23 @@
}
/**
+ * Retieves ClientConfiguration
+ * @param client proxy or http-centric Client
+ * @return underlying ClientConfiguration instance
+ */
+ public static ClientConfiguration getConfig(Object client) {
+ if (client instanceof Client) {
+ if (client instanceof WebClient) {
+ return ((AbstractClient)client).getConfiguration();
+ } else if (client instanceof InvocationHandlerAware) {
+ Object handler = ((InvocationHandlerAware)client).getInvocationHandler();
+ return ((AbstractClient)handler).getConfiguration();
+ }
+ }
+ throw new IllegalArgumentException("Not a valid Client");
+ }
+
+ /**
* Does HTTP invocation
* @param httpMethod HTTP method
* @param body request body, can be null
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java?rev=792183&r1=792182&r2=792183&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java Wed Jul 8 15:19:27 2009
@@ -31,6 +31,8 @@
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
+import org.apache.cxf.transport.Conduit;
+import org.apache.cxf.transport.http.HTTPConduit;
import org.junit.Assert;
import org.junit.Test;
@@ -46,6 +48,16 @@
}
@Test
+ public void testGetConduit() throws Exception {
+ JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
+ bean.setAddress("http://bar");
+ bean.setResourceClass(BookStore.class);
+ BookStore store = bean.create(BookStore.class);
+ Conduit conduit = WebClient.getConfig(store).getConduit();
+ assertTrue(conduit instanceof HTTPConduit);
+ }
+
+ @Test
public void testTemplateInRootPathInherit() throws Exception {
JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
bean.setAddress("http://bar");
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java?rev=792183&r1=792182&r2=792183&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java Wed Jul 8 15:19:27 2009
@@ -21,6 +21,9 @@
import java.net.URI;
+import org.apache.cxf.jaxrs.resources.BookInterface;
+import org.apache.cxf.jaxrs.resources.BookStore;
+
import org.junit.Assert;
import org.junit.Test;
@@ -143,4 +146,21 @@
assertEquals(URI.create("http://foo"), wc.getBaseURI());
assertEquals(URI.create("http://foo/1/2"), wc.getCurrentURI());
}
+
+ @Test
+ public void testWebClientConfiguration() {
+ WebClient wc = WebClient.create(URI.create("http://foo"));
+ assertNotNull(WebClient.getConfig(wc) != null);
+ }
+
+ @Test
+ public void testProxyConfiguration() {
+ // interface
+ BookInterface proxy = JAXRSClientFactory.create("http://foo", BookInterface.class);
+ assertNotNull(WebClient.getConfig(proxy) != null);
+ // cglib
+ BookStore proxy2 = JAXRSClientFactory.create("http://foo", BookStore.class);
+ assertNotNull(WebClient.getConfig(proxy2) != null);
+ }
+
}
Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java?rev=792183&r1=792182&r2=792183&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java Wed Jul 8 15:19:27 2009
@@ -58,6 +58,7 @@
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+import org.apache.cxf.transport.http.HTTPConduit;
import org.junit.BeforeClass;
import org.junit.Ignore;
@@ -104,9 +105,14 @@
String baseAddress = "http://localhost:9092/test/services/rest";
BookStoreJaxrsJaxws proxy = JAXRSClientFactory.create(baseAddress,
BookStoreJaxrsJaxws.class);
+ HTTPConduit conduit = (HTTPConduit)WebClient.getConfig(proxy).getConduit();
+
Book b = proxy.getBook(new Long("123"));
assertEquals(123, b.getId());
assertEquals("CXF in Action", b.getName());
+
+ HTTPConduit conduit2 = (HTTPConduit)WebClient.getConfig(proxy).getConduit();
+ assertSame(conduit, conduit2);
}
@Test