Author: boday Date: Thu Mar 8 19:23:31 2012 New Revision: 1298525 URL: http://svn.apache.org/viewvc?rev=1298525&view=rev Log: CAMEL-5071 added SolrJ DirectXMLRequest support via the Exchange Body
Modified: camel/trunk/components/camel-solr/pom.xml camel/trunk/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java camel/trunk/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrSpringTest.java camel/trunk/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrUpdateTest.java camel/trunk/components/camel-solr/src/test/resources/SolrSpringTest-context.xml Modified: camel/trunk/components/camel-solr/pom.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-solr/pom.xml?rev=1298525&r1=1298524&r2=1298525&view=diff ============================================================================== --- camel/trunk/components/camel-solr/pom.xml (original) +++ camel/trunk/components/camel-solr/pom.xml Thu Mar 8 19:23:31 2012 @@ -58,6 +58,12 @@ <!-- 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> Modified: camel/trunk/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java?rev=1298525&r1=1298524&r2=1298525&view=diff ============================================================================== --- camel/trunk/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java (original) +++ camel/trunk/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java Thu Mar 8 19:23:31 2012 @@ -22,7 +22,9 @@ 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; /** @@ -72,7 +74,14 @@ public class SolrProducer extends Defaul 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); @@ -89,28 +98,54 @@ public class SolrProducer extends Defaul updateRequest.process(solrServer); } - } else { + } else if (body instanceof SolrInputDocument) { UpdateRequest updateRequest = new UpdateRequest(getRequestHandler()); + updateRequest.add((SolrInputDocument) body); - if (body instanceof SolrInputDocument) { - updateRequest.add((SolrInputDocument) body); + if (isStreaming) { + updateRequest.process(streamingSolrServer); } else { - SolrInputDocument doc = new SolrInputDocument(); - for (Map.Entry<String, Object> entry : exchange.getIn().getHeaders().entrySet()) { - if (entry.getKey().startsWith(SolrConstants.FIELD)) { - String fieldName = entry.getKey().substring(SolrConstants.FIELD.length()); - doc.setField(fieldName, entry.getValue()); - } + 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)) { + String fieldName = entry.getKey().substring(SolrConstants.FIELD.length()); + doc.setField(fieldName, entry.getValue()); } - updateRequest.add(doc); } + updateRequest.add(doc); 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/trunk/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrSpringTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrSpringTest.java?rev=1298525&r1=1298524&r2=1298525&view=diff ============================================================================== --- camel/trunk/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrSpringTest.java (original) +++ camel/trunk/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrSpringTest.java Thu Mar 8 19:23:31 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,6 +47,9 @@ 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; @@ -57,6 +62,20 @@ public class SolrSpringTest extends Abst @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 { Modified: camel/trunk/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrUpdateTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrUpdateTest.java?rev=1298525&r1=1298524&r2=1298525&view=diff ============================================================================== --- camel/trunk/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrUpdateTest.java (original) +++ camel/trunk/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrUpdateTest.java Thu Mar 8 19:23:31 2012 @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.List; 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; @@ -40,6 +41,34 @@ 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(); Modified: camel/trunk/components/camel-solr/src/test/resources/SolrSpringTest-context.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-solr/src/test/resources/SolrSpringTest-context.xml?rev=1298525&r1=1298524&r2=1298525&view=diff ============================================================================== --- camel/trunk/components/camel-solr/src/test/resources/SolrSpringTest-context.xml (original) +++ camel/trunk/components/camel-solr/src/test/resources/SolrSpringTest-context.xml Thu Mar 8 19:23:31 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>