Repository: camel Updated Branches: refs/heads/master aa6e20a77 -> ced84063a
CAMEL-8092 Fixed the cxf:producer Matrix Params missing issue with thanks to kumarann Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a3bf8472 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a3bf8472 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a3bf8472 Branch: refs/heads/master Commit: a3bf8472a527b96d3b5a974aaf47a355c207ba9f Parents: ff59fae Author: Willem Jiang <willem.ji...@gmail.com> Authored: Wed Dec 3 21:45:15 2014 +0800 Committer: Willem Jiang <willem.ji...@gmail.com> Committed: Wed Dec 3 21:57:52 2014 +0800 ---------------------------------------------------------------------- .../component/cxf/jaxrs/CxfRsProducer.java | 42 ++++++++++++++++++++ 1 file changed, 42 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/a3bf8472/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java index 6a092ce..734d972 100644 --- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java +++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java @@ -44,6 +44,7 @@ import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean; import org.apache.cxf.jaxrs.client.Client; import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean; import org.apache.cxf.jaxrs.client.WebClient; +import org.apache.cxf.message.MessageImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -119,6 +120,30 @@ public class CxfRsProducer extends DefaultProducer { } + protected void setupClientMatrix(WebClient client, Exchange exchange) throws Exception { + + org.apache.cxf.message.Message cxfMessage = (org.apache.cxf.message.Message) exchange.getIn().getHeader("CamelCxfMessage"); + if (cxfMessage != null) { + String requestURL = (String)cxfMessage.get("org.apache.cxf.request.uri"); + String matrixParam = null; + int matrixStart = requestURL.indexOf(";"); + int matrixEnd = requestURL.indexOf("?") > -1 ? requestURL.indexOf("?") : requestURL.length(); + Map<String, String> maps = null; + if (requestURL != null && matrixStart > 0) { + matrixParam = requestURL.substring(matrixStart + 1, matrixEnd); + if (matrixParam != null) { + maps = getMatrixParametersFromMatrixString(matrixParam, IOHelper.getCharsetName(exchange)); + } + } + if (maps != null) { + for (Map.Entry<String, String> entry : maps.entrySet()) { + client.matrix(entry.getKey(), entry.getValue()); + LOG.debug("Matrix param " + entry.getKey() + " :: " + entry.getValue()); + } + } + } + } + protected void setupClientHeaders(Client client, Exchange exchange) throws Exception { Message inMessage = exchange.getIn(); CxfRsEndpoint cxfRsEndpoint = (CxfRsEndpoint) getEndpoint(); @@ -175,6 +200,8 @@ public class CxfRsProducer extends DefaultProducer { } } } + + setupClientMatrix(client, exchange); setupClientQueryAndHeaders(client, exchange); @@ -345,6 +372,21 @@ public class CxfRsProducer extends DefaultProducer { return answer; } + private Map<String, String> getMatrixParametersFromMatrixString(String matrixString, String charset) throws UnsupportedEncodingException { + Map<String, String> answer = new LinkedHashMap<String, String>(); + for (String param : matrixString.split(";")) { + String[] pair = param.split("=", 2); + if (pair.length == 2) { + String name = URLDecoder.decode(pair[0], charset); + String value = URLDecoder.decode(pair[1], charset); + answer.put(name, value); + } else { + throw new IllegalArgumentException("Invalid parameter, expected to be a pair but was " + param); + } + } + return answer; + } + private String arrayToString(Object[] array) { StringBuilder buffer = new StringBuilder("["); for (Object obj : array) {