Author: boday Date: Thu Mar 8 21:10:28 2012 New Revision: 1298581 URL: http://svn.apache.org/viewvc?rev=1298581&view=rev Log: CAMEL-4881/CAMEL-5071 merged from trunk (2.10.0 enhancement) to 2.9.X branch (for future 2.9.2 release)
Modified: camel/branches/camel-2.9.x/components/camel-solr/ (props changed) camel/branches/camel-2.9.x/components/camel-solr/pom.xml camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrComponent.java camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrConstants.java camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/InitSolrEndpointTest.java camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrComponentTestSupport.java camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrSpringTest.java camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrUpdateTest.java camel/branches/camel-2.9.x/components/camel-solr/src/test/resources/SolrSpringTest-context.xml Propchange: camel/branches/camel-2.9.x/components/camel-solr/ ------------------------------------------------------------------------------ svn:mergeinfo = /camel/trunk/components/camel-solr:1227197-1298579 Modified: camel/branches/camel-2.9.x/components/camel-solr/pom.xml URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-solr/pom.xml?rev=1298581&r1=1298580&r2=1298581&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-solr/pom.xml (original) +++ camel/branches/camel-2.9.x/components/camel-solr/pom.xml Thu Mar 8 21:10:28 2012 @@ -17,14 +17,14 @@ limitations under the License. --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - - <modelVersion>4.0.0</modelVersion> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> <parent> <artifactId>components</artifactId> <groupId>org.apache.camel</groupId> - <version>2.9.2-SNAPSHOT</version> + <version>2.10-SNAPSHOT</version> </parent> <groupId>org.apache.camel</groupId> @@ -33,100 +33,98 @@ <name>Camel :: Solr</name> <description>Camel Solr Support</description> - <properties> - <camel.osgi.export.pkg> - org.apache.camel.component.solr.*;${camel.osgi.version} - </camel.osgi.export.pkg> - </properties> - - <dependencies> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-core</artifactId> - </dependency> - <dependency> - <groupId>commons-codec</groupId> - <artifactId>commons-codec</artifactId> - <version>${commons-codec-version}</version> - </dependency> - <dependency> - <groupId>org.apache.solr</groupId> - <artifactId>solr-solrj</artifactId> - <version>${solr-version}</version> - </dependency> - - <!-- testing --> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-test</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.apache.solr</groupId> - <artifactId>solr-core</artifactId> - <version>${solr-version}</version> - <scope>test</scope> - <exclusions> - <!-- exclude jdk14 as we want to use log4j --> - <exclusion> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-jdk14</artifactId> - </exclusion> - </exclusions> - </dependency> - - <dependency> - <groupId>org.apache.solr</groupId> - <artifactId>solr-cell</artifactId> - <version>${solr-version}</version> - <scope>test</scope> - <exclusions> - <!-- exclude netcdf as it has a slf4j binding --> - <exclusion> - <groupId>edu.ucar</groupId> - <artifactId>netcdf</artifactId> - </exclusion> - </exclusions> - </dependency> - - <dependency> - <groupId>org.mortbay.jetty</groupId> - <artifactId>jetty</artifactId> - <version>6.1.24</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-test</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-jms</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-script</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.codehaus.groovy</groupId> - <artifactId>groovy-all</artifactId> - <scope>test</scope> - </dependency> - - <!-- logging --> - <dependency> + <properties> + <camel.osgi.export.pkg> + org.apache.camel.component.solr.*;${camel.osgi.version} + </camel.osgi.export.pkg> + </properties> + + <dependencies> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core</artifactId> + </dependency> + <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + <version>${commons-codec-version}</version> + </dependency> + <dependency> + <groupId>org.apache.solr</groupId> + <artifactId>solr-solrj</artifactId> + <version>${solr-version}</version> + </dependency> + + <!-- testing --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core-xml</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test-spring</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.apache.solr</groupId> + <artifactId>solr-core</artifactId> + <version>${solr-version}</version> + <scope>test</scope> + <exclusions> + <!-- exclude jdk14 as we want to use log4j --> + <exclusion> <groupId>org.slf4j</groupId> - <artifactId>slf4j-log4j12</artifactId> - <scope>test</scope> - </dependency> - - </dependencies> + <artifactId>slf4j-jdk14</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.solr</groupId> + <artifactId>solr-cell</artifactId> + <version>${solr-version}</version> + <scope>test</scope> + <exclusions> + <!-- exclude netcdf as it has a slf4j binding --> + <exclusion> + <groupId>edu.ucar</groupId> + <artifactId>netcdf</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.mortbay.jetty</groupId> + <artifactId>jetty</artifactId> + <version>6.1.24</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-script</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.codehaus.groovy</groupId> + <artifactId>groovy-all</artifactId> + <scope>test</scope> + </dependency> + <!-- logging --> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + <scope>test</scope> + </dependency> + </dependencies> </project> Modified: camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrComponent.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrComponent.java?rev=1298581&r1=1298580&r2=1298581&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrComponent.java (original) +++ camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrComponent.java Thu Mar 8 21:10:28 2012 @@ -26,7 +26,7 @@ import org.apache.camel.impl.DefaultComp public class SolrComponent extends DefaultComponent { protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { - Endpoint endpoint = new SolrEndpoint(uri, this, remaining); + Endpoint endpoint = new SolrEndpoint(uri, this, remaining, parameters); setProperties(endpoint, parameters); return endpoint; } Modified: camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrConstants.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrConstants.java?rev=1298581&r1=1298580&r2=1298581&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrConstants.java (original) +++ camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrConstants.java Thu Mar 8 21:10:28 2012 @@ -25,10 +25,16 @@ public final class SolrConstants { public static final String OPERATION_ROLLBACK = "ROLLBACK"; public static final String OPERATION_OPTIMIZE = "OPTIMIZE"; public static final String OPERATION_INSERT = "INSERT"; + public static final String OPERATION_INSERT_STREAMING = "INSERT_STREAMING"; public static final String OPERATION_ADD_BEAN = "ADD_BEAN"; public static final String OPERATION_DELETE_BY_ID = "DELETE_BY_ID"; public static final String OPERATION_DELETE_BY_QUERY = "DELETE_BY_QUERY"; + public static final String PARAM_STREAMING_QUEUE_SIZE = "streamingQueueSize"; + public static final String PARAM_STREAMING_THREAD_COUNT = "streamingThreadCount"; + public static final int DEFUALT_STREAMING_QUEUE_SIZE = 10; + public static final int DEFAULT_STREAMING_THREAD_COUNT = 2; + private SolrConstants() { throw new AssertionError(); } Modified: camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java?rev=1298581&r1=1298580&r2=1298581&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java (original) +++ camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java Thu Mar 8 21:10:28 2012 @@ -16,11 +16,13 @@ */ package org.apache.camel.component.solr; +import java.util.Map; import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.impl.DefaultEndpoint; import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; +import org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer; /** * Represents a Solr endpoint. @@ -28,22 +30,25 @@ import org.apache.solr.client.solrj.impl public class SolrEndpoint extends DefaultEndpoint { private CommonsHttpSolrServer solrServer; + private CommonsHttpSolrServer streamingSolrServer; private String requestHandler; + private int streamingThreadCount; + private int streamingQueueSize; - public SolrEndpoint() { - } - - public SolrEndpoint(String uri, SolrComponent component) { - super(uri, component); - } + public SolrEndpoint(String endpointUri, SolrComponent component, String address, Map<String, Object> parameters) throws Exception { + super(endpointUri, component); - public SolrEndpoint(String endpointUri) { - super(endpointUri); + solrServer = new CommonsHttpSolrServer("http://" + address); + streamingQueueSize = getIntFromString((String) parameters.get(SolrConstants.PARAM_STREAMING_QUEUE_SIZE), SolrConstants.DEFUALT_STREAMING_QUEUE_SIZE); + streamingThreadCount = getIntFromString((String) parameters.get(SolrConstants.PARAM_STREAMING_THREAD_COUNT), SolrConstants.DEFAULT_STREAMING_THREAD_COUNT); + streamingSolrServer = new StreamingUpdateSolrServer("http://" + address, streamingQueueSize, streamingThreadCount); } - public SolrEndpoint(String endpointUri, SolrComponent component, String address) throws Exception { - super(endpointUri, component); - solrServer = new CommonsHttpSolrServer("http://" + address); + public static int getIntFromString(String value, int defaultValue) { + if (value != null && value.length() > 0) { + return Integer.parseInt(value); + } + return defaultValue; } @Override @@ -65,32 +70,47 @@ public class SolrEndpoint extends Defaul return solrServer; } + public CommonsHttpSolrServer getStreamingSolrServer() { + return streamingSolrServer; + } + + public void setStreamingSolrServer(CommonsHttpSolrServer streamingSolrServer) { + this.streamingSolrServer = streamingSolrServer; + } + public void setMaxRetries(int maxRetries) { solrServer.setMaxRetries(maxRetries); + streamingSolrServer.setMaxRetries(maxRetries); } public void setSoTimeout(int soTimeout) { solrServer.setSoTimeout(soTimeout); + streamingSolrServer.setSoTimeout(soTimeout); } public void setConnectionTimeout(int connectionTimeout) { solrServer.setConnectionTimeout(connectionTimeout); + streamingSolrServer.setConnectionTimeout(connectionTimeout); } public void setDefaultMaxConnectionsPerHost(int defaultMaxConnectionsPerHost) { solrServer.setDefaultMaxConnectionsPerHost(defaultMaxConnectionsPerHost); + streamingSolrServer.setDefaultMaxConnectionsPerHost(defaultMaxConnectionsPerHost); } public void setMaxTotalConnections(int maxTotalConnections) { solrServer.setMaxTotalConnections(maxTotalConnections); + streamingSolrServer.setMaxTotalConnections(maxTotalConnections); } public void setFollowRedirects(boolean followRedirects) { solrServer.setFollowRedirects(followRedirects); + streamingSolrServer.setFollowRedirects(followRedirects); } public void setAllowCompression(boolean allowCompression) { solrServer.setAllowCompression(allowCompression); + streamingSolrServer.setAllowCompression(allowCompression); } public void setRequestHandler(String requestHandler) { @@ -100,4 +120,20 @@ public class SolrEndpoint extends Defaul public String getRequestHandler() { return requestHandler; } + + public int getStreamingThreadCount() { + return streamingThreadCount; + } + + public void setStreamingThreadCount(int streamingThreadCount) { + this.streamingThreadCount = streamingThreadCount; + } + + public int getStreamingQueueSize() { + return streamingQueueSize; + } + + public void setStreamingQueueSize(int streamingQueueSize) { + this.streamingQueueSize = streamingQueueSize; + } } Modified: camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java?rev=1298581&r1=1298580&r2=1298581&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java (original) +++ camel/branches/camel-2.9.x/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java Thu Mar 8 21:10:28 2012 @@ -22,21 +22,22 @@ import org.apache.camel.Exchange; import org.apache.camel.impl.DefaultProducer; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest; +import org.apache.solr.client.solrj.request.DirectXmlRequest; import org.apache.solr.client.solrj.request.UpdateRequest; +import org.apache.solr.common.SolrException; import org.apache.solr.common.SolrInputDocument; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * The Solr producer. */ public class SolrProducer extends DefaultProducer { - private static final transient Logger LOG = LoggerFactory.getLogger(SolrProducer.class); private SolrServer solrServer; + private SolrServer streamingSolrServer; public SolrProducer(SolrEndpoint endpoint) { super(endpoint); solrServer = endpoint.getSolrServer(); + streamingSolrServer = endpoint.getStreamingSolrServer(); } @Override @@ -49,7 +50,9 @@ public class SolrProducer extends Defaul } if (operation.equalsIgnoreCase(SolrConstants.OPERATION_INSERT)) { - insert(exchange); + insert(exchange, false); + } else if (operation.equalsIgnoreCase(SolrConstants.OPERATION_INSERT_STREAMING)) { + insert(exchange, true); } else if (operation.equalsIgnoreCase(SolrConstants.OPERATION_DELETE_BY_ID)) { solrServer.deleteById(exchange.getIn().getBody(String.class)); } else if (operation.equalsIgnoreCase(SolrConstants.OPERATION_DELETE_BY_QUERY)) { @@ -67,11 +70,18 @@ public class SolrProducer extends Defaul } } - private void insert(Exchange exchange) throws Exception { + private void insert(Exchange exchange, boolean isStreaming) throws Exception { Object body = exchange.getIn().getBody(); + boolean hasSolrHeaders = false; + Map<String, Object> headers = exchange.getIn().getHeaders(); + if (headers != null && headers.containsKey(SolrConstants.FIELD + "id")) { + hasSolrHeaders = true; + } + if (body instanceof File) { + ContentStreamUpdateRequest updateRequest = new ContentStreamUpdateRequest(getRequestHandler()); updateRequest.addFile((File) body); @@ -82,8 +92,27 @@ public class SolrProducer extends Defaul } } - updateRequest.process(solrServer); - } else { + if (isStreaming) { + updateRequest.process(streamingSolrServer); + } else { + updateRequest.process(solrServer); + } + + } else if (body instanceof SolrInputDocument) { + + UpdateRequest updateRequest = new UpdateRequest(getRequestHandler()); + updateRequest.add((SolrInputDocument) body); + + if (isStreaming) { + updateRequest.process(streamingSolrServer); + } else { + updateRequest.process(solrServer); + } + + } else if (hasSolrHeaders) { + + UpdateRequest updateRequest = new UpdateRequest(getRequestHandler()); + SolrInputDocument doc = new SolrInputDocument(); for (Map.Entry<String, Object> entry : exchange.getIn().getHeaders().entrySet()) { if (entry.getKey().startsWith(SolrConstants.FIELD)) { @@ -91,10 +120,32 @@ public class SolrProducer extends Defaul doc.setField(fieldName, entry.getValue()); } } - - UpdateRequest updateRequest = new UpdateRequest(getRequestHandler()); updateRequest.add(doc); - updateRequest.process(solrServer); + + if (isStreaming) { + updateRequest.process(streamingSolrServer); + } else { + updateRequest.process(solrServer); + } + + } else if (body instanceof String) { + + String bodyAsString = (String) body; + + if (!bodyAsString.startsWith("<add")) { + bodyAsString = "<add>" + bodyAsString + "</add>"; + } + + DirectXmlRequest xmlRequest = new DirectXmlRequest(getRequestHandler(), bodyAsString); + + if (isStreaming) { + streamingSolrServer.request(xmlRequest); + } else { + solrServer.request(xmlRequest); + } + + } else { + throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "unable to find data in Exchange to update Solr"); } } Modified: camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/InitSolrEndpointTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/InitSolrEndpointTest.java?rev=1298581&r1=1298580&r2=1298581&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/InitSolrEndpointTest.java (original) +++ camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/InitSolrEndpointTest.java Thu Mar 8 21:10:28 2012 @@ -27,16 +27,27 @@ public class InitSolrEndpointTest extend @Test public void endpointCreatedCorrectlyWithAllOptions() throws Exception { SolrEndpoint solrEndpoint = context.getEndpoint(solrUrl + getFullOptions(), SolrEndpoint.class); + assertEquals("queue size incorrect", 5, solrEndpoint.getStreamingQueueSize()); + assertEquals("thread count incorrect", 1, solrEndpoint.getStreamingThreadCount()); assertNotNull(solrEndpoint); } + @Test + public void streamingEndpointCreatedCorrectly() throws Exception { + SolrEndpoint solrEndpoint = context.getEndpoint(solrUrl, SolrEndpoint.class); + assertNotNull(solrEndpoint); + assertEquals("queue size incorrect", SolrConstants.DEFUALT_STREAMING_QUEUE_SIZE, solrEndpoint.getStreamingQueueSize()); + assertEquals("thread count incorrect", SolrConstants.DEFAULT_STREAMING_THREAD_COUNT, solrEndpoint.getStreamingThreadCount()); + } + @Test(expected = ResolveEndpointFailedException.class) public void wrongURLFormatFailsEndpointCreation() throws Exception { context.getEndpoint("solr://localhost:-99/solr"); } private String getFullOptions() { - return "?maxRetries=1&soTimeout=100&connectionTimeout=100" + return "?streamingQueueSize=5&streamingThreadCount=1" + + "&maxRetries=1&soTimeout=100&connectionTimeout=100" + "&defaultMaxConnectionsPerHost=100&maxTotalConnections=100" + "&followRedirects=false&allowCompression=true" + "&requestHandler=/update"; Modified: camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrComponentTestSupport.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrComponentTestSupport.java?rev=1298581&r1=1298580&r2=1298581&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrComponentTestSupport.java (original) +++ camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrComponentTestSupport.java Thu Mar 8 21:10:28 2012 @@ -17,6 +17,8 @@ package org.apache.camel.component.solr; import java.util.HashMap; +import java.util.Map; + import org.apache.camel.builder.RouteBuilder; import org.apache.camel.test.AvailablePortFinder; import org.apache.camel.test.junit4.CamelTestSupport; @@ -38,7 +40,7 @@ public class SolrComponentTestSupport ex protected static CommonsHttpSolrServer solrServer; protected void solrInsertTestEntry() { - HashMap<String, Object> headers = new HashMap<String, Object>(); + Map<String, Object> headers = new HashMap<String, Object>(); headers.put(SolrConstants.OPERATION, SolrConstants.OPERATION_INSERT); headers.put("SolrField.id", TEST_ID); template.sendBodyAndHeaders("direct:start", null, headers); Modified: camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrSpringTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrSpringTest.java?rev=1298581&r1=1298580&r2=1298581&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrSpringTest.java (original) +++ camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrSpringTest.java Thu Mar 8 21:10:28 2012 @@ -26,7 +26,9 @@ import org.apache.solr.client.solrj.Solr import org.apache.solr.client.solrj.embedded.JettySolrRunner; import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; +import org.apache.solr.client.solrj.util.ClientUtils; import org.apache.solr.common.SolrDocument; +import org.apache.solr.common.SolrInputDocument; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; @@ -45,12 +47,35 @@ public class SolrSpringTest extends Abst private static JettySolrRunner solrRunner; private static CommonsHttpSolrServer solrServer; + @Produce(uri = "direct:direct-xml-start") + protected ProducerTemplate directXmlRoute; + @Produce(uri = "direct:xml-start") protected ProducerTemplate xmlRoute; + @Produce(uri = "direct:xml-start-streaming") + protected ProducerTemplate xmlRouteStreaming; + @Produce(uri = "direct:pdf-start") protected ProducerTemplate pdfRoute; + @Produce(uri = "direct:pdf-start-streaming") + protected ProducerTemplate pdfRouteStreaming; + + + @DirtiesContext + @Test + public void endToEndIndexDirectXML() throws Exception { + SolrInputDocument doc = new SolrInputDocument(); + doc.addField("id", "MA147LL/A", 1.0f); + String docAsXml = ClientUtils.toXML(doc); + directXmlRoute.sendBody(docAsXml); + + QueryResponse response = executeSolrQuery("id:MA147LL/A"); + assertEquals(0, response.getStatus()); + assertEquals(1, response.getResults().getNumFound()); + } + @DirtiesContext @Test public void endToEndIndexXMLDocuments() throws Exception { @@ -70,6 +95,26 @@ public class SolrSpringTest extends Abst assertEquals(Arrays.asList("Web", "Technology", "Computers"), doc.getFieldValue("cat")); } + + @DirtiesContext + @Test + public void endToEndIndexXMLDocumentsStreaming() throws Exception { + xmlRouteStreaming.sendBody(new File("src/test/resources/data/books.xml")); + + // Check things were indexed. + QueryResponse response = executeSolrQuery("*:*"); + + assertEquals(0, response.getStatus()); + assertEquals(4, response.getResults().getNumFound()); + + // Check fields were indexed correctly. + response = executeSolrQuery("title:Learning XML"); + + SolrDocument doc = response.getResults().get(0); + assertEquals("Learning XML", doc.getFieldValue("id")); + assertEquals(Arrays.asList("Web", "Technology", "Computers"), doc.getFieldValue("cat")); + } + @DirtiesContext @Test public void endToEndIndexPDFDocument() throws Exception { @@ -86,6 +131,22 @@ public class SolrSpringTest extends Abst assertEquals(Arrays.asList("application/pdf"), doc.getFieldValue("content_type")); } + @DirtiesContext + @Test + public void endToEndIndexPDFDocumentStreaming() throws Exception { + pdfRouteStreaming.sendBody(new File("src/test/resources/data/tutorial.pdf")); + + QueryResponse response = executeSolrQuery("*:*"); + + assertEquals(0, response.getStatus()); + assertEquals(1, response.getResults().getNumFound()); + + SolrDocument doc = response.getResults().get(0); + assertEquals("Solr", doc.getFieldValue("subject")); + assertEquals("tutorial.pdf", doc.getFieldValue("id")); + assertEquals(Arrays.asList("application/pdf"), doc.getFieldValue("content_type")); + } + @BeforeClass public static void beforeClass() throws Exception { // Set appropriate paths for Solr to use. Modified: camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrUpdateTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrUpdateTest.java?rev=1298581&r1=1298580&r2=1298581&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrUpdateTest.java (original) +++ camel/branches/camel-2.9.x/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrUpdateTest.java Thu Mar 8 21:10:28 2012 @@ -19,11 +19,12 @@ package org.apache.camel.component.solr; import java.io.File; import java.util.Arrays; import java.util.List; -import org.apache.camel.EndpointInject; import org.apache.camel.Exchange; import org.apache.solr.client.solrj.response.QueryResponse; +import org.apache.solr.client.solrj.util.ClientUtils; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrException; +import org.apache.solr.common.SolrInputDocument; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -40,6 +41,65 @@ public class SolrUpdateTest extends Solr } @Test + public void testInsertSolrInputDocumentAsXMLWithoutAddRoot() throws Exception { + + SolrInputDocument doc = new SolrInputDocument(); + doc.addField("id", "MA147LL/A", 1.0f); + String docAsXml = ClientUtils.toXML(doc); + template.sendBodyAndHeader("direct:start", docAsXml, SolrConstants.OPERATION, SolrConstants.OPERATION_INSERT); + solrCommit(); + + QueryResponse response = executeSolrQuery("id:MA147LL/A"); + assertEquals(0, response.getStatus()); + assertEquals(1, response.getResults().getNumFound()); + } + + @Test + public void testInsertSolrInputDocumentAsXMLWithAddRoot() throws Exception { + + SolrInputDocument doc = new SolrInputDocument(); + doc.addField("id", "MA147LL/A", 1.0f); + String docAsXml = "<add>" + ClientUtils.toXML(doc) + "</add>"; + template.sendBodyAndHeader("direct:start", docAsXml, SolrConstants.OPERATION, SolrConstants.OPERATION_INSERT); + solrCommit(); + + QueryResponse response = executeSolrQuery("id:MA147LL/A"); + assertEquals(0, response.getStatus()); + assertEquals(1, response.getResults().getNumFound()); + } + + @Test + public void testInsertSolrInputDocument() throws Exception { + + SolrInputDocument doc = new SolrInputDocument(); + doc.addField("id", "MA147LL/A", 1.0f); + template.sendBodyAndHeader("direct:start", doc, SolrConstants.OPERATION, SolrConstants.OPERATION_INSERT); + + solrCommit(); + + QueryResponse response = executeSolrQuery("id:MA147LL/A"); + assertEquals(0, response.getStatus()); + assertEquals(1, response.getResults().getNumFound()); + } + + @Test + public void testInsertStreaming() throws Exception { + + Exchange exchange = createExchangeWithBody(null); + exchange.getIn().setHeader(SolrConstants.OPERATION, SolrConstants.OPERATION_INSERT_STREAMING); + exchange.getIn().setHeader("SolrField.id", "MA147LL/A"); + template.send("direct:start", exchange); + + Thread.sleep(500); + + solrCommit(); + + QueryResponse response = executeSolrQuery("id:MA147LL/A"); + assertEquals(0, response.getStatus()); + assertEquals(1, response.getResults().getNumFound()); + } + + @Test public void indexSingleDocumentOnlyWithId() throws Exception { Exchange exchange = createExchangeWithBody(null); exchange.getIn().setHeader(SolrConstants.OPERATION, SolrConstants.OPERATION_INSERT); @@ -105,7 +165,7 @@ public class SolrUpdateTest extends Solr assertEquals(1, response.getResults().getNumFound()); SolrDocument doc = response.getResults().get(0); - assertArrayEquals(categories, ((List) doc.getFieldValue("cat")).toArray()); + assertArrayEquals(categories, ((List<?>) doc.getFieldValue("cat")).toArray()); } @Test Modified: camel/branches/camel-2.9.x/components/camel-solr/src/test/resources/SolrSpringTest-context.xml URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-solr/src/test/resources/SolrSpringTest-context.xml?rev=1298581&r1=1298580&r2=1298581&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-solr/src/test/resources/SolrSpringTest-context.xml (original) +++ camel/branches/camel-2.9.x/components/camel-solr/src/test/resources/SolrSpringTest-context.xml Thu Mar 8 21:10:28 2012 @@ -7,6 +7,18 @@ <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent"/> <camelContext xmlns="http://camel.apache.org/schema/spring"> + <route id="DirectXMLRoute"> + <from uri="direct:direct-xml-start" /> + <setHeader headerName="SolrOperation"> + <constant>INSERT</constant> + </setHeader> + <to uri="solr://localhost:{{SolrServer.Port}}/solr"/> + <setHeader headerName="SolrOperation"> + <constant>COMMIT</constant> + </setHeader> + <to uri="solr://localhost:{{SolrServer.Port}}/solr"/> + </route> + <route id="XMLRoute"> <from uri="direct:xml-start" /> <split> @@ -35,6 +47,35 @@ <to uri="solr://localhost:{{SolrServer.Port}}/solr"/> </route> + <route id="XMLRoute-Streaming"> + <from uri="direct:xml-start-streaming" /> + <split> + <xpath>/bookstore/book</xpath> + <convertBodyTo type="java.lang.String"/> + <setHeader headerName="SolrOperation"> + <constant>INSERT_STREAMING</constant> + </setHeader> + <setHeader headerName="SolrField.id"> + <xpath resultType="java.lang.String">//title/text()</xpath> + </setHeader> + <setHeader headerName="SolrField.title"> + <xpath resultType="java.lang.String">//title/text()</xpath> + </setHeader> + <setHeader headerName="SolrField.cat"> + <groovy> + def book = new XmlParser().parseText(request.body) + book.cat.collect{ it.text() } as String[] + </groovy> + </setHeader> + <to uri="solr://localhost:{{SolrServer.Port}}/solr"/> + </split> + <delay><constant>500</constant></delay> + <setHeader headerName="SolrOperation"> + <constant>COMMIT</constant> + </setHeader> + <to uri="solr://localhost:{{SolrServer.Port}}/solr"/> + </route> + <route id="PDFRoute"> <from uri="direct:pdf-start" /> <setHeader headerName="SolrOperation"> @@ -49,6 +90,23 @@ </setHeader> <to uri="solr://localhost:{{SolrServer.Port}}/solr"/> </route> + + <route id="PDFRoute-Streaming"> + <from uri="direct:pdf-start-streaming" /> + <setHeader headerName="SolrOperation"> + <constant>INSERT_STREAMING</constant> + </setHeader> + <setHeader headerName="SolrParam.literal.id"> + <simple>${body.name}</simple> + </setHeader> + <to uri="solr://localhost:{{SolrServer.Port}}/solr?requestHandler=/update/extract" /> + <delay><constant>500</constant></delay> + <setHeader headerName="SolrOperation"> + <constant>COMMIT</constant> + </setHeader> + <to uri="solr://localhost:{{SolrServer.Port}}/solr"/> + </route> + </camelContext> </beans>