You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2009/06/22 13:52:47 UTC
svn commit: r787210 - in /camel/trunk/components/camel-cxf/src:
main/java/org/apache/camel/component/cxf/
main/java/org/apache/camel/component/cxf/jaxrs/
test/java/org/apache/camel/component/cxf/jaxrs/
Author: ningjiang
Date: Mon Jun 22 11:52:47 2009
New Revision: 787210
URL: http://svn.apache.org/viewvc?rev=787210&view=rev
Log:
CAMEL-1737 support http central client API in camel-cxfrs producer
Modified:
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConstants.java
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java
Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConstants.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConstants.java?rev=787210&r1=787209&r2=787210&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConstants.java (original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConstants.java Mon Jun 22 11:52:47 2009
@@ -42,6 +42,9 @@
String CAMEL_TRANSPORT_PREFIX = "camel:";
String CXF_EXCHANGE = "org.apache.cxf.message.exchange";
String CAMEL_EXCHANGE = "org.apache.camel.exchange";
+ String CAMEL_CXF_RS_USING_HTTP_API = "CamelCxfRsUsingHttpAPI";
+ String CAMEL_CXF_RS_VAR_VALUES = "CamelCxfRsVarValues";
+ String CAMEL_CXF_RS_RESPONSE_CLASS = "CamelCxfRsResponseClass";
}
Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java?rev=787210&r1=787209&r2=787210&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java (original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java Mon Jun 22 11:52:47 2009
@@ -90,7 +90,9 @@
protected void setupJAXRSClientFactoryBean(JAXRSClientFactoryBean cfb) {
// address
cfb.setAddress(getEndpointUri());
- cfb.setResourceClass(getResourceClasses().get(0));
+ if (getResourceClasses() != null) {
+ cfb.setResourceClass(getResourceClasses().get(0));
+ }
}
public JAXRSServerFactoryBean createJAXRSServerFactoryBean() {
Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java?rev=787210&r1=787209&r2=787210&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java (original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java Mon Jun 22 11:52:47 2009
@@ -17,9 +17,12 @@
package org.apache.camel.component.cxf.jaxrs;
+import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.List;
+import javax.ws.rs.core.Response;
+
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
@@ -28,6 +31,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;
/**
* CxfRsProducer binds a Camel exchange to a CXF exchange, acts as a CXF
@@ -44,7 +48,38 @@
public void process(Exchange exchange) throws Exception {
Message inMessage = exchange.getIn();
- Object[] varValues = inMessage.getHeader("VarValues", Object[].class);
+ Boolean httpClientAPI = inMessage.getHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, Boolean.class);
+ if (httpClientAPI != null && httpClientAPI.booleanValue()) {
+ invokeHttpClient(exchange);
+ } else {
+ invokeProxyClient(exchange);
+ }
+
+ }
+
+ @SuppressWarnings("unchecked")
+ private void invokeHttpClient(Exchange exchange) {
+ Message inMessage = exchange.getIn();
+ WebClient client = cfb.createWebClient();
+ String httpMethod = inMessage.getHeader(Exchange.HTTP_METHOD, String.class);
+ Class responseClass = inMessage.getHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, Class.class);
+ String path = inMessage.getHeader(Exchange.HTTP_RELATIVE_PATH, String.class);
+ client.path(path);
+ Object body = inMessage.getBody();
+ Object response = null;
+ if (responseClass == null) {
+ response = client.invoke(httpMethod, body, InputStream.class);
+ } else {
+ response = client.invoke(httpMethod, body, responseClass);
+ }
+ if (exchange.getPattern().isOutCapable()) {
+ exchange.getOut().setBody(response);
+ }
+ }
+
+ private void invokeProxyClient(Exchange exchange) throws Exception {
+ Message inMessage = exchange.getIn();
+ Object[] varValues = inMessage.getHeader(CxfConstants.CAMEL_CXF_RS_VAR_VALUES, Object[].class);
String methodName = inMessage.getHeader(CxfConstants.OPERATION_NAME, String.class);
Client target = null;
if (varValues == null) {
Modified: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java?rev=787210&r1=787209&r2=787210&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java (original)
+++ camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java Mon Jun 22 11:52:47 2009
@@ -35,7 +35,7 @@
}
@Test
- public void testGetConstumer() {
+ public void testGetConstumerWithClientProxyAPI() {
// START SNIPPET: example
Exchange exchange = template.send("direct:start", new Processor() {
@@ -44,6 +44,8 @@
Message inMessage = exchange.getIn();
// set the operation name
inMessage.setHeader(CxfConstants.OPERATION_NAME, "getCustomer");
+ // using the proxy client API
+ inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, Boolean.FALSE);
// set the parameters , if you just have one parameter
// camel will put this object into an Object[] itself
inMessage.setBody("123");
@@ -60,5 +62,36 @@
// END SNIPPET: example
}
+ @Test
+ public void testGetConstumerWithHttpCentralClientAPI() {
+ // START SNIPPET: example-http
+ Exchange exchange = template.send("direct:start", new Processor() {
+
+ public void process(Exchange exchange) throws Exception {
+ exchange.setPattern(ExchangePattern.InOut);
+ Message inMessage = exchange.getIn();
+ // using the http central client API
+ inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, Boolean.TRUE);
+ // set the Http method
+ inMessage.setHeader(Exchange.HTTP_METHOD, "GET");
+ // set the relative path
+ inMessage.setHeader(Exchange.HTTP_RELATIVE_PATH, "/customerservice/customers/123");
+ // Specify the response class , cxfrs will use InputStream as the response object type
+ inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, Customer.class);
+ // since we use the Get method, so we don't need to set the message body
+ inMessage.setBody(null);
+ }
+
+ });
+
+ // get the response message
+ Customer response = (Customer) exchange.getOut().getBody();
+
+ assertNotNull("The response should not be null ", response);
+ assertEquals("Get a wrong customer id ", String.valueOf(response.getId()), "123");
+ assertEquals("Get a wrong customer name", response.getName(), "John");
+ // END SNIPPET: example-http
+ }
+
}