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 2010/02/12 15:49:25 UTC
svn commit: r909438 - in /cxf/branches/2.2.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/
systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/
Author: sergeyb
Date: Fri Feb 12 14:49:24 2010
New Revision: 909438
URL: http://svn.apache.org/viewvc?rev=909438&view=rev
Log:
Merged revisions 909396 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r909396 | sergeyb | 2010-02-12 13:25:35 +0000 (Fri, 12 Feb 2010) | 1 line
JAXRS : updates to do with preserving template name/values pairs in proxy-to-subproxy and thread-safe clients
........
Modified:
cxf/branches/2.2.x-fixes/ (props changed)
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientState.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/LocalClientState.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ThreadLocalClientState.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
cxf/branches/2.2.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultithreadedClientTest.java
cxf/branches/2.2.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Feb 12 14:49:24 2010
@@ -1 +1 @@
-/cxf/trunk:908451,909102
+/cxf/trunk:908451,909102,909396
Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java?rev=909438&r1=909437&r2=909438&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java Fri Feb 12 14:49:24 2010
@@ -57,6 +57,7 @@
import org.apache.cxf.jaxrs.impl.MetadataMap;
import org.apache.cxf.jaxrs.impl.UriBuilderImpl;
import org.apache.cxf.jaxrs.model.ParameterType;
+import org.apache.cxf.jaxrs.model.URITemplate;
import org.apache.cxf.jaxrs.provider.ProviderFactory;
import org.apache.cxf.jaxrs.utils.HttpUtils;
import org.apache.cxf.jaxrs.utils.InjectionUtils;
@@ -293,6 +294,21 @@
state.setCurrentBuilder(new UriBuilderImpl(uri));
}
+ protected MultivaluedMap<String, String> getTemplateParametersMap(URITemplate template,
+ List<Object> values) {
+ if (values != null && values.size() != 0) {
+ List<String> vars = template.getVariables();
+ MultivaluedMap<String, String> templatesMap = new MetadataMap<String, String>(vars.size());
+ for (int i = 0; i < vars.size(); i++) {
+ if (i < values.size()) {
+ templatesMap.add(vars.get(i), values.get(i).toString());
+ }
+ }
+ return templatesMap;
+ }
+ return null;
+ }
+
protected ResponseBuilder setResponseBuilder(HttpURLConnection conn, Exchange exchange) throws Throwable {
Message inMessage = exchange.getInMessage();
if (conn == null) {
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java?rev=909438&r1=909437&r2=909438&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java Fri Feb 12 14:49:24 2010
@@ -163,7 +163,8 @@
subHeaders.putAll(headers);
}
- ClientState newState = getState().newState(uri, headers);
+ ClientState newState = getState().newState(uri, subHeaders,
+ getTemplateParametersMap(ori.getURITemplate(), pathParams));
ClientProxyImpl proxyImpl = new ClientProxyImpl(newState, subCri, false, inheritHeaders);
proxyImpl.setConfiguration(getConfiguration());
return JAXRSClientFactory.create(m.getReturnType(), proxyImpl);
@@ -414,16 +415,10 @@
List<Object> pathParams) throws Throwable {
Message outMessage = createMessage(ori.getHttpMethod(), headers, uri);
outMessage.getExchange().setOneWay(ori.isOneway());
- if (pathParams.size() != 0) {
- List<String> vars = ori.getURITemplate().getVariables();
- MultivaluedMap<String, String> templatesMap = new MetadataMap<String, String>(vars.size());
- for (int i = 0; i < vars.size(); i++) {
- if (i < pathParams.size()) {
- templatesMap.add(vars.get(i), pathParams.get(i).toString());
- }
- }
- outMessage.put(URITemplate.TEMPLATE_PARAMETERS, templatesMap);
- }
+
+ getState().setTemplates(getTemplateParametersMap(ori.getURITemplate(), pathParams));
+ outMessage.put(URITemplate.TEMPLATE_PARAMETERS, getState().getTemplates());
+
outMessage.setContent(OperationResourceInfo.class, ori);
setPlainOperationNameProperty(outMessage, ori.getMethodToInvoke().getName());
outMessage.getExchange().put(Method.class, ori.getMethodToInvoke());
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientState.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientState.java?rev=909438&r1=909437&r2=909438&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientState.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientState.java Fri Feb 12 14:49:24 2010
@@ -29,8 +29,9 @@
* Represents the client state :
* - baseURI
* - current uri builder
- * - current requestHeaders,
- * - current response
+ * - current requestHeaders
+ * - current template parameters map
+ * - last response
*/
public interface ClientState {
@@ -83,6 +84,19 @@
MultivaluedMap<String, String> getRequestHeaders();
/**
+ * Sets the map containing template name and value pairs
+ * @param templates
+ */
+ void setTemplates(MultivaluedMap<String, String> map);
+
+ /**
+ * Gets the templates map
+ * @return templates
+ */
+ MultivaluedMap<String, String> getTemplates();
+
+
+ /**
* Resets the current state to the baseURI
*
*/
@@ -94,8 +108,11 @@
* subresource proxies and new web clients respectively to ensure thet stay
* thread-local if needed
* @param baseURI baseURI
- * @param headers request headers
+ * @param headers request headers, can be null
+ * @param templates initial templates map, can be null
* @return client state
*/
- ClientState newState(URI baseURI, MultivaluedMap<String, String> headers);
+ ClientState newState(URI baseURI,
+ MultivaluedMap<String, String> headers,
+ MultivaluedMap<String, String> templates);
}
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java?rev=909438&r1=909437&r2=909438&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java Fri Feb 12 14:49:24 2010
@@ -271,7 +271,7 @@
}
} else {
MultivaluedMap<String, String> headers = inheritHeaders ? client.getHeaders() : null;
- bean.setInitialState(clientState.newState(client.getCurrentURI(), headers));
+ bean.setInitialState(clientState.newState(client.getCurrentURI(), headers, null));
proxy = bean.create(cls);
}
WebClient.copyProperties(WebClient.client(proxy), client);
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java?rev=909438&r1=909437&r2=909438&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java Fri Feb 12 14:49:24 2010
@@ -132,7 +132,7 @@
}
if (initialState != null) {
return headers != null
- ? initialState.newState(URI.create(getAddress()), headers) : initialState;
+ ? initialState.newState(URI.create(getAddress()), headers, null) : initialState;
} else {
return null;
}
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/LocalClientState.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/LocalClientState.java?rev=909438&r1=909437&r2=909438&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/LocalClientState.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/LocalClientState.java Fri Feb 12 14:49:24 2010
@@ -33,6 +33,7 @@
public class LocalClientState implements ClientState {
private MultivaluedMap<String, String> requestHeaders = new MetadataMap<String, String>();
+ private MultivaluedMap<String, String> templates;
private ResponseBuilder responseBuilder;
private URI baseURI;
private UriBuilder currentBuilder;
@@ -48,10 +49,10 @@
public LocalClientState(LocalClientState cs) {
this.requestHeaders = new MetadataMap<String, String>(cs.requestHeaders);
+ this.templates = cs.templates == null ? null : new MetadataMap<String, String>(cs.templates);
this.responseBuilder = cs.responseBuilder != null ? cs.responseBuilder.clone() : null;
this.baseURI = cs.baseURI;
this.currentBuilder = cs.currentBuilder != null ? cs.currentBuilder.clone() : null;
-
}
@@ -88,17 +89,42 @@
return requestHeaders;
}
+ public MultivaluedMap<String, String> getTemplates() {
+ return templates;
+ }
+
+ public void setTemplates(MultivaluedMap<String, String> map) {
+ if (templates == null) {
+ this.templates = map;
+ } else if (map != null) {
+ templates.putAll(map);
+ } else {
+ templates = null;
+ }
+ }
+
public void reset() {
requestHeaders.clear();
responseBuilder = null;
currentBuilder = UriBuilder.fromUri(baseURI);
+ templates = null;
}
- public ClientState newState(URI newBaseURI, MultivaluedMap<String, String> headers) {
+ public ClientState newState(URI newBaseURI,
+ MultivaluedMap<String, String> headers,
+ MultivaluedMap<String, String> templatesMap) {
ClientState state = new LocalClientState(newBaseURI);
if (headers != null) {
state.setRequestHeaders(headers);
}
+ // we need to carry the template parameters forward
+ MultivaluedMap<String, String> newTemplateParams = templates;
+ if (newTemplateParams != null && templatesMap != null) {
+ newTemplateParams.putAll(templatesMap);
+ } else {
+ newTemplateParams = templatesMap;
+ }
+ state.setTemplates(newTemplateParams);
return state;
}
}
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ThreadLocalClientState.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ThreadLocalClientState.java?rev=909438&r1=909437&r2=909438&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ThreadLocalClientState.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ThreadLocalClientState.java Fri Feb 12 14:49:24 2010
@@ -83,15 +83,24 @@
return getState().getRequestHeaders();
}
+ public MultivaluedMap<String, String> getTemplates() {
+ return getState().getTemplates();
+ }
+
+ public void setTemplates(MultivaluedMap<String, String> map) {
+ getState().setTemplates(map);
+ }
+
public void reset() {
removeThreadLocalState(Thread.currentThread());
}
- public ClientState newState(URI baseURI, MultivaluedMap<String, String> headers) {
+ public ClientState newState(URI baseURI,
+ MultivaluedMap<String, String> headers,
+ MultivaluedMap<String, String> templates) {
LocalClientState ls = new LocalClientState(baseURI);
- if (headers != null) {
- ls.setRequestHeaders(headers);
- }
+ ls.setRequestHeaders(headers);
+ ls.setTemplates(templates);
return new ThreadLocalClientState(ls);
}
@@ -148,4 +157,6 @@
}
}
}
+
+
}
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java?rev=909438&r1=909437&r2=909438&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java Fri Feb 12 14:49:24 2010
@@ -24,6 +24,7 @@
import java.lang.reflect.Type;
import java.net.HttpURLConnection;
import java.net.URI;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
@@ -47,7 +48,6 @@
import org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.jaxrs.ext.form.Form;
-import org.apache.cxf.jaxrs.impl.MetadataMap;
import org.apache.cxf.jaxrs.model.ParameterType;
import org.apache.cxf.jaxrs.model.URITemplate;
import org.apache.cxf.jaxrs.utils.HttpUtils;
@@ -64,8 +64,6 @@
*/
public class WebClient extends AbstractClient {
- private MultivaluedMap<String, String> templates;
-
protected WebClient(String baseAddress) {
this(URI.create(baseAddress));
}
@@ -196,7 +194,7 @@
}
} else {
MultivaluedMap<String, String> headers = inheritHeaders ? client.getHeaders() : null;
- webClient = new WebClient(clientState.newState(client.getCurrentURI(), headers));
+ webClient = new WebClient(clientState.newState(client.getCurrentURI(), headers, null));
}
copyProperties(webClient, client);
return webClient;
@@ -410,17 +408,8 @@
* @return updated WebClient
*/
public WebClient path(String path, Object... values) {
- URITemplate t = new URITemplate(path);
- List<String> vars = t.getVariables();
- if (vars.size() > 0 && vars.size() == values.length) {
- if (templates == null) {
- templates = new MetadataMap<String, String>();
- }
- for (int i = 0; i < values.length; i++) {
- templates.add(vars.get(i), values[i].toString());
- }
- }
URI u = UriBuilder.fromUri(URI.create("http://tempuri")).path(path).buildFromEncoded(values);
+ getState().setTemplates(getTemplateParametersMap(new URITemplate(path), Arrays.asList(values)));
return path(u.getRawPath());
}
@@ -463,7 +452,7 @@
* @return updated WebClient
*/
public WebClient to(String newAddress, boolean forward) {
- clearTemplates();
+ getState().setTemplates(null);
if (forward) {
if (!newAddress.startsWith(getBaseURI().toString())) {
throw new IllegalArgumentException("Base address can not be preserved");
@@ -481,7 +470,7 @@
* @return updated WebClient
*/
public WebClient back(boolean fast) {
- clearTemplates();
+ getState().setTemplates(null);
if (fast) {
getCurrentBuilder().replacePath(getBaseURI().getPath());
} else {
@@ -566,7 +555,7 @@
@Override
public WebClient reset() {
- clearTemplates();
+ //clearTemplates();
return (WebClient)super.reset();
}
@@ -584,12 +573,7 @@
headers.putSingle(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML_TYPE.toString());
}
resetResponse();
- try {
- return doChainedInvocation(httpMethod, headers, body, responseClass, genericType);
- } finally {
- clearTemplates();
- }
-
+ return doChainedInvocation(httpMethod, headers, body, responseClass, genericType);
}
protected Response doChainedInvocation(String httpMethod,
@@ -597,7 +581,7 @@
URI uri = getCurrentURI();
Message m = createMessage(httpMethod, headers, uri);
- m.put(URITemplate.TEMPLATE_PARAMETERS, templates);
+ m.put(URITemplate.TEMPLATE_PARAMETERS, getState().getTemplates());
if (body != null) {
MessageContentsList contents = new MessageContentsList(body);
m.setContent(List.class, contents);
@@ -638,13 +622,6 @@
return createHttpConnection(getCurrentBuilder().clone().buildFromEncoded(), methodName);
}
- private void clearTemplates() {
- if (templates != null) {
- templates.clear();
- templates = null;
- }
- }
-
private class BodyWriter extends AbstractOutDatabindingInterceptor {
public BodyWriter() {
Modified: cxf/branches/2.2.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultithreadedClientTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultithreadedClientTest.java?rev=909438&r1=909437&r2=909438&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultithreadedClientTest.java (original)
+++ cxf/branches/2.2.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultithreadedClientTest.java Fri Feb 12 14:49:24 2010
@@ -45,7 +45,7 @@
@BeforeClass
public static void startServers() throws Exception {
assertTrue("server did not launch correctly",
- launchServer(BookServer.class));
+ launchServer(BookServer.class, true));
}
@Test
Modified: cxf/branches/2.2.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java?rev=909438&r1=909437&r2=909438&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java (original)
+++ cxf/branches/2.2.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java Fri Feb 12 14:49:24 2010
@@ -73,7 +73,7 @@
@BeforeClass
public static void startServers() throws Exception {
assertTrue("server did not launch correctly",
- launchServer(BookServerRestSoap.class));
+ launchServer(BookServerRestSoap.class, true));
}
@Test