[jboss-svn-commits] JBL Code SVN: r31832 - in labs/jbossrules/branches/drools_server_camel_lucaz_baunax: drools-server and 10 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Feb 24 11:32:51 EST 2010


Author: lucazamador
Date: 2010-02-24 11:32:49 -0500 (Wed, 24 Feb 2010)
New Revision: 31832

Added:
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServerApplication.java
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServiceRest.java
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceBaseTest.java
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/rest/
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/rest/KnowledgeServiceRestTest.java
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/model/
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/model/person.xsd
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person2.drl
Modified:
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/pom.xml
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeService.java
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeServiceServlet.java
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/KnowledgeContextProfile.java
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/StartupCommand.java
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/webapp/WEB-INF/web.xml
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceServletTest.java
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHTTPResponse.java
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHttpRequest.java
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/changesets/change-set-2.xml
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/profiles.xml
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person.drl
Log:
RestWS integration

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java	2010-02-24 16:32:49 UTC (rev 31832)
@@ -89,6 +89,8 @@
 		marshaller.setProperty("jaxb.formatted.output", true);
 		marshaller.marshal(cmd, xmlReq);
 		
+		System.out.println(xmlReq.toString());
+		
 		byte[] xmlResp = (byte[]) template.requestBodyAndHeader("direct:test-with-session", xmlReq.toString(), "jaxb-context", jaxbContext);
 		
 		ExecutionResults resp = (ExecutionResults) jaxbContext.createUnmarshaller().unmarshal(new ByteArrayInputStream(xmlResp));

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/pom.xml
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/pom.xml	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/pom.xml	2010-02-24 16:32:49 UTC (rev 31832)
@@ -23,6 +23,8 @@
    <build>
       <finalName>drools-server</finalName>
    </build>
+   <repositories>
+   </repositories>
    <dependencies>
    	  <dependency>
       	<groupId>org.drools</groupId>
@@ -59,5 +61,30 @@
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
       </dependency>
+      <!-- Resteasy deps -->
+      <dependency>
+      	<groupId>org.jboss.resteasy</groupId>
+      	<artifactId>resteasy-jaxrs</artifactId>
+      	<version>1.2.1.GA</version>
+	  </dependency>
+	  <dependency>
+      	<groupId>tjws</groupId>
+      	<artifactId>webserver</artifactId>
+      	<version>1.3.3</version>
+      	<scope>test</scope>
+	  </dependency>
+	  <dependency>
+	  	<groupId>javax.servlet</groupId>
+		<artifactId>servlet-api</artifactId>
+		<version>2.5</version>
+		<scope>test</scope>
+	  </dependency>
+	  <dependency>
+	  	<groupId>commons-httpclient</groupId>
+	  	<artifactId>commons-httpclient</artifactId>
+	  	<version>3.1</version>
+	  	<scope>test</scope>
+	  </dependency>
    </dependencies>
+   
 </project>

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeService.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeService.java	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeService.java	2010-02-24 16:32:49 UTC (rev 31832)
@@ -1,28 +1,30 @@
 package org.drools.server;
 
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
+import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.naming.Context;
 import javax.xml.bind.JAXBContext;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.util.jndi.JndiContext;
 import org.drools.KnowledgeBase;
-import org.drools.agent.KnowledgeAgent;
-import org.drools.agent.KnowledgeAgentProvider;
 import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.ResourceType;
 import org.drools.builder.help.KnowledgeBuilderHelper;
 import org.drools.camel.component.DroolsComponent;
 import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
 import org.drools.server.profile.KnowledgeContextProfile;
 import org.drools.server.profile.KnowledgeServerProfile;
 import org.drools.server.profile.ProfileFile;
@@ -43,50 +45,54 @@
  *
  */
 public class KnowledgeService {
-	
+
 	private static final String PROFILE_FILENAME = "/profiles.xml";
 
 	private static KnowledgeService instance;
-	
-	private Map<String, KnowledgeAgent> cachedAgents = new ConcurrentHashMap<String, KnowledgeAgent>();
+
+	private Map<String, KnowledgeBase> kbases = new ConcurrentHashMap<String, KnowledgeBase>();
 	private Map<String, JAXBContext> cachedJaxbContexts = new ConcurrentHashMap<String, JAXBContext>();
 
 	private CamelContext camelContext;
 	private KnowledgeServerProfile profiles;
 	private ServiceManager serviceManager;
 	private ProducerTemplate template;
-	
+
 	public KnowledgeService() throws Exception {
 		serviceManager = new ServiceManagerLocalClient();
-		camelContext = new DefaultCamelContext();
-		camelContext.addComponent("drools", new DroolsComponent(camelContext));
+		Context context = new JndiContext();
+		context.bind("sm", serviceManager);
+		camelContext = new DefaultCamelContext(context);
 		camelContext.addRoutes(createRouteBuilder());
+		camelContext.start();
 		template = camelContext.createProducerTemplate();
 		readKnowledgeContextProfiles();
 	}
-	
+
 	public static KnowledgeService getInstance() throws Exception {
 		if (instance==null) {
-			instance = new KnowledgeService();
+			synchronized(KnowledgeService.class) {
+				if (instance==null) {
+					instance = new KnowledgeService();
+				}
+			}
 		}
 		return instance;
 	}
-	
+
 	public KnowledgeContextProfile getContextProfile(String profileName) {
 		return profiles.getProfile(profileName);
 	}
-	
+
 	public void checkContextStatus(KnowledgeContextProfile contextProfile) throws Exception  {
-		if (!cachedAgents.containsKey(contextProfile.getId())) {
-			KnowledgeAgentProvider knowledgeAgentFactory = serviceManager.getKnowledgeAgentFactory();
+		if (!kbases.containsKey(contextProfile.getId())) {
 			KnowledgeBase kbase = serviceManager.getKnowledgeBaseFactoryService().newKnowledgeBase();
+			KnowledgeBuilder kbuilder = serviceManager.getKnowledgeBuilderFactoryService().newKnowledgeBuilder();
 
 			List<String> allClassNames = new ArrayList<String>();
-
 			if (contextProfile.hasJaxbModels()) {
 				for (ProfileFile modelFile : contextProfile.getJaxbModels()) {
 					// Create model from xsd definition and add to kbase classloader
-					KnowledgeBuilder kbuilder = serviceManager.getKnowledgeBuilderFactoryService().newKnowledgeBuilder();
 
 					Options xjcOpts = new Options();
 					xjcOpts.setSchemaLanguage( Language.XMLSCHEMA );
@@ -99,48 +105,64 @@
 						for (int i = 0; i < classNames.length; i++) {
 							allClassNames.add(classNames[i]);
 						}
+						kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
 					} catch (IOException e) {
 						throw new Exception("Error creating XSD model", e);
 					}
 				}
-
-				if (allClassNames.size() > 0) {
-					JAXBContext jaxbContext = KnowledgeBuilderHelper.newJAXBContext( allClassNames.toArray(new String[allClassNames.size()]), kbase );
-					cachedJaxbContexts.put(contextProfile.getId(), jaxbContext);
-				}
 			}
 
-			KnowledgeAgent kagent = knowledgeAgentFactory.newKnowledgeAgent(contextProfile.getId(), kbase);
 			for (ProfileFile changeSet : contextProfile.getChangeSetFiles()) {
-				kagent.applyChangeSet(ResourceFactory.newClassPathResource(changeSet.getFileName()));
+				kbuilder.add(ResourceFactory.newClassPathResource(changeSet.getFileName()), ResourceType.CHANGE_SET);
 			}
-			StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
-			serviceManager.register(contextProfile.getId(), session);
-			cachedAgents.put(contextProfile.getId(), kagent);
+			kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
 
+			if (allClassNames.size() > 0) {
+				JAXBContext jaxbContext = KnowledgeBuilderHelper.newJAXBContext( allClassNames.toArray(new String[allClassNames.size()]), kbase );
+				cachedJaxbContexts.put(contextProfile.getId(), jaxbContext);
+			}
+
+			if ("stateful".equalsIgnoreCase(contextProfile.getSessionType())) {
+				StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+				serviceManager.register(contextProfile.getId(), session);
+			}
+			else if ("stateless".equalsIgnoreCase(contextProfile.getSessionType())) {
+				StatelessKnowledgeSession session = kbase.newStatelessKnowledgeSession();
+				serviceManager.register(contextProfile.getId(), session);
+			}
+			else 
+				throw new Exception("Bad session type. Expected stateless or stateful");
+
+			kbases.put(contextProfile.getId(), kbase);
+
 			// Execute the startups commands
-			for (StartupCommand command : contextProfile.getStartupCommands()) {
-				executeCommand(contextProfile, command.getContent());
+			if (contextProfile.hasStartupCommands()) {
+				for (StartupCommand command : contextProfile.getStartupCommands()) {
+					executeCommand(contextProfile, command.getContent());
+				}
 			}
 
 		}
 	}
-	
+
 	public String executeService(InputStream inputStream, KnowledgeContextProfile contextProfile) throws Exception {
-		BufferedInputStream bis = new BufferedInputStream(inputStream);
-		ByteArrayOutputStream cmd = new ByteArrayOutputStream();
-		byte[] buffer = new byte[2048];
-		int count;
+		StringBuilder sb = new StringBuilder();
+		String line;
 		try {
-			while ((count = bis.read()) != -1) {
-				cmd.write(buffer, 0, count);
-			}        
-			return executeCommand(contextProfile, cmd.toString());
+			BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
+			while ((line = reader.readLine()) != null) {
+				sb.append(line).append("\n");
+			}
+			return executeCommand(contextProfile, sb.toString());
 		} catch (IOException e) {
 			throw new Exception("Unable to read the xml command", e);
 		}
+		finally {
+			inputStream.close();
+		}
+
 	}
-	
+
 	private String executeCommand(KnowledgeContextProfile contextProfile, String cmd) throws Exception {
 		if (contextProfile.hasJaxbModels()) {
 			JAXBContext jaxbContext = getJaxbContext(contextProfile.getId());
@@ -155,7 +177,7 @@
 		}
 		else {
 			if ("stateless".equalsIgnoreCase(contextProfile.getSessionType())) {
-				return new String((byte[])template.requestBody("direct:no-session-xstream", cmd));
+				return new String((byte[])template.requestBodyAndHeader("direct:no-session-xstream", cmd, DroolsComponent.DROOLS_LOOKUP, contextProfile.getId()));
 			}
 			else if ("stateful".equalsIgnoreCase(contextProfile.getSessionType())) {
 				return new String((byte[])template.requestBody("direct:with-session-xstream", cmd));
@@ -163,8 +185,15 @@
 			else
 				throw new Exception("Bad session type. Expected stateless or stateful");
 		}
+//		if (contextProfile.hasJaxbModels()) {
+//			JAXBContext jaxbContext = getJaxbContext(contextProfile.getId());
+//			return new String((byte[])template.requestBodyAndHeader("direct:with-session-jaxb", cmd, "jaxb-context", jaxbContext));
+//		}
+//		else {
+//			return new String((byte[])template.requestBody("direct:with-session-xstream", cmd));
+//		}
 	}
-	
+
 	private static RouteBuilder createRouteBuilder() throws Exception {
 		return new RouteBuilder() {
 			public void configure() throws Exception {
@@ -196,7 +225,7 @@
 			throw new Exception("Error reading profiles configurations", e);
 		}
 	}
-	
+
 	private JAXBContext getJaxbContext(String profileId) {
 		if (cachedJaxbContexts.containsKey(profileId)) {
 			return cachedJaxbContexts.get(profileId);
@@ -204,6 +233,6 @@
 		// TODO: work on this possible error. Trying to execute jaxb command on xstream session?
 		return null;
 	}
-	
 
+
 }

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeServiceServlet.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeServiceServlet.java	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeServiceServlet.java	2010-02-24 16:32:49 UTC (rev 31832)
@@ -25,7 +25,7 @@
 
 	private static final long serialVersionUID = 1L;
 
-	public static Pattern urlPattern = Pattern.compile(".*/(.*)/");
+	public static Pattern urlPattern = Pattern.compile(".*/servlet/(.*)");
 	
 	private static KnowledgeService service;
 

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/KnowledgeContextProfile.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/KnowledgeContextProfile.java	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/KnowledgeContextProfile.java	2010-02-24 16:32:49 UTC (rev 31832)
@@ -88,6 +88,10 @@
 		}
 		this.startupCommands.add(new StartupCommand(content));
 	}
+	
+	public boolean hasStartupCommands() {
+		return this.startupCommands!=null && this.startupCommands.size() > 0;
+	}
 
 	public boolean isValid() {
 		return id!=null && sessionType!=null && changeSetFiles.size()>0 && sessionType!=null &&

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/StartupCommand.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/StartupCommand.java	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/StartupCommand.java	2010-02-24 16:32:49 UTC (rev 31832)
@@ -16,7 +16,7 @@
 	}
 
 	public String getContent() {
-		return content;
+		return content.trim();
 	}
 
 }
\ No newline at end of file

Added: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServerApplication.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServerApplication.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServerApplication.java	2010-02-24 16:32:49 UTC (rev 31832)
@@ -0,0 +1,27 @@
+package org.drools.server.rest;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.ws.rs.core.Application;
+
+public class KnowledgeServerApplication extends Application {
+	
+	private Set<Object> singletons = new HashSet<Object>();
+	private Set<Class<?>> classes = new HashSet<Class<?>>();
+
+	public KnowledgeServerApplication() {
+		singletons.add(new KnowledgeServiceRest());
+	}
+
+	@Override
+	public Set<Class<?>> getClasses() {
+		return classes;
+	}
+
+	@Override
+	public Set<Object> getSingletons() {
+		return singletons;
+	}
+
+}


Property changes on: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServerApplication.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServiceRest.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServiceRest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServiceRest.java	2010-02-24 16:32:49 UTC (rev 31832)
@@ -0,0 +1,68 @@
+package org.drools.server.rest;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.ws.rs.FormParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+import javax.ws.rs.core.Response.Status;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.server.KnowledgeService;
+import org.drools.server.profile.KnowledgeContextProfile;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * RestWS interface to execute commands
+ * @author lucas
+ *
+ */
+ at Path("/commands")
+public class KnowledgeServiceRest {
+	
+	private static Logger logger = LoggerFactory.getLogger(KnowledgeServiceRest.class);
+	private static KnowledgeService service;
+	
+	static {
+		try {
+			service = KnowledgeService.getInstance();
+		} catch (Exception e) {
+			throw new RuntimeDroolsException(e);
+		}
+	}
+	
+	@POST()
+	@Path("/execute")
+	public Response execute(@FormParam("profile") String profile, @FormParam("command") String command) {
+		if (profile==null || profile.length()==0 || command==null || command.length()==0) {
+			logger.error("Bad parameters:\nprofile: " + profile + "\ncommand: " + command + "\n");			
+			return Response.status(Status.BAD_REQUEST).build();
+		}
+		String response;
+		logger.info("profile: " + profile);
+		try {
+			KnowledgeContextProfile contextProfile = service.getContextProfile(profile);
+			if (contextProfile==null) {
+				logger.error("Context profile don't exists");
+				return Response.status(Status.FORBIDDEN).build();
+			}
+			service.checkContextStatus(contextProfile);
+			InputStream input = new ByteArrayInputStream(command.getBytes());
+			response = service.executeService(input, contextProfile);
+		} catch (IOException e) {
+			logger.error(e.getMessage());
+			return Response.status(Status.BAD_REQUEST).build();
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+			return Response.status(Status.CONFLICT).build();
+		}
+		ResponseBuilder builder = Response.ok(response, "application/xml");
+        return builder.build();
+	}
+	
+}


Property changes on: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServiceRest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/webapp/WEB-INF/web.xml
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/webapp/WEB-INF/web.xml	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/webapp/WEB-INF/web.xml	2010-02-24 16:32:49 UTC (rev 31832)
@@ -4,20 +4,42 @@
 
     <display-name>JBoss Drools Execution Server</display-name>
 
+	<context-param>                                                                                                                                                                                          
+		<param-name>javax.ws.rs.Application</param-name>                                                                                                                                                 
+        <param-value>org.drools.server.rest.KnowledgeServerApplication</param-value>                                                                                                                       
+	</context-param>
+
+    <context-param>                                                                                                                                                                                          
+		<param-name>resteasy.servlet.mapping.prefix</param-name>                                                                                                                                         
+        <param-value>/rest</param-value>                                                                                                                                                                 
+    </context-param>                                                                                                                                                                                         
+
+    <listener>                                                                                                                                                                                               
+        <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>                                                                                                             
+    </listener>                                                                                                                                                                                              
+
 	<servlet>
-		<servlet-name>statelessService</servlet-name>
-		<servlet-class>org.drools.server.KnowledgeStatelessServlet</servlet-class>
+		<servlet-name>knowledgeService</servlet-name>
+		<servlet-class>org.drools.server.KnowledgeServiceServlet</servlet-class>
 	</servlet>
+	
+	<servlet>                                                                                                                                                                                                
+        <servlet-name>Resteasy</servlet-name>                                                                                                                                                                    
+        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>                                                                                                           
+    </servlet>   
 
-
 	<servlet-mapping>
-		<servlet-name>statelessService</servlet-name>
-		<url-pattern>/knowledgebase/*</url-pattern>
+		<servlet-name>knowledgeService</servlet-name>
+		<url-pattern>/servlet/*</url-pattern>
 	</servlet-mapping>
+                                                                                                                                                                                         
+    <servlet-mapping>                                                                                                                                                                                        
+        <servlet-name>Resteasy</servlet-name>                                                                                                                                                                    
+        <url-pattern>/rest/*</url-pattern>                                                                                                                                                                       
+    </servlet-mapping>                                     
 
     <session-config>
         <session-timeout>10</session-timeout>
     </session-config>
 
-
 </web-app>

Added: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceBaseTest.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceBaseTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceBaseTest.java	2010-02-24 16:32:49 UTC (rev 31832)
@@ -0,0 +1,48 @@
+package org.drools.server;
+
+import junit.framework.TestCase;
+
+public abstract class KnowledgeServiceBaseTest extends TestCase {
+
+	public String getJaxbCommand() throws Exception {
+		String cmd = "";
+		cmd += "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n";
+		cmd += "<batch-execution lookup='ksession1' xmlns:ns2='http://drools.org/model'>\n";
+		cmd += "    <insert out-identifier='lucaz'>\n";
+		cmd += "        <object xsi:type='ns2:person' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\n";
+		cmd += "            <ns2:name>lucaz</ns2:name>\n";
+		cmd += "            <ns2:age>25</ns2:age>\n";
+		cmd += "        </object>\n";
+		cmd += "    </insert>\n";
+		cmd += "    <insert out-identifier='baunax'>\n";
+		cmd += "        <object xsi:type='ns2:person' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\n";
+		cmd += "            <ns2:name>baunax</ns2:name>\n";
+		cmd += "            <ns2:age>21</ns2:age>\n";
+		cmd += "        </object>\n";
+		cmd += "    </insert>\n";
+		cmd += "    <query name='persons' out-identifier='persons'/>\n";
+		cmd += "    <fire-all-rules max='-1'/>\n";
+		cmd += "</batch-execution>\n";
+		return cmd;
+	}
+	
+	public String getXStreamCommand() {
+		String cmd = "";
+		cmd += "<batch-execution lookup='ksession2'>\n";
+		cmd += "   <insert out-identifier='baunax'>\n";
+		cmd += "      <org.drools.pipeline.camel.Person>\n";
+		cmd += "         <name>baunax</name>\n";
+		cmd += "      </org.drools.pipeline.camel.Person>\n";
+		cmd += "   </insert>\n";
+		cmd += "   <insert out-identifier='lucaz'>\n";
+		cmd += "      <org.drools.pipeline.camel.Person>\n";
+		cmd += "         <name>lucaz</name>\n";
+		cmd += "      </org.drools.pipeline.camel.Person>\n";
+		cmd += "   </insert>\n";
+		cmd += "   <query name='persons' out-identifier='persons'/>\n";
+		cmd += "   <fire-all-rules/>\n";
+		cmd += "</batch-execution>\n";
+		return cmd;
+	}
+	
+}


Property changes on: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceBaseTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceServletTest.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceServletTest.java	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceServletTest.java	2010-02-24 16:32:49 UTC (rev 31832)
@@ -1,139 +1,90 @@
 package org.drools.server;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.util.regex.Matcher;
 
 import javax.servlet.http.HttpServletResponse;
 
-import junit.framework.TestCase;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.help.BatchExecutionHelper;
+import org.drools.runtime.rule.impl.FlatQueryResults;
 
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.drools.camel.component.DroolsComponent;
+public class KnowledgeServiceServletTest extends KnowledgeServiceBaseTest {
 
-public class KnowledgeServiceServletTest extends TestCase {
-
 	public void testURLPattern() {
-		Matcher matcher = KnowledgeServiceServlet.urlPattern.matcher("hostname/xstreamSession/");
+		Matcher matcher = KnowledgeServiceServlet.urlPattern.matcher("hostname/servlet/xstreamProfile");
 		assertTrue(matcher.matches());
-		assertEquals("xstreamSession", matcher.group(1));
-		matcher = KnowledgeServiceServlet.urlPattern.matcher("hostname/xstreamSession");
+		assertEquals("xstreamProfile", matcher.group(1));
+		matcher = KnowledgeServiceServlet.urlPattern.matcher("hostname/unknow/xstreamProfile");
 		assertFalse(matcher.matches());
 	}
-	
-	public void testCreateCamelContext() throws Exception {
-		CamelContext camelContext = new DefaultCamelContext();
-		camelContext.addComponent("drools", new DroolsComponent(camelContext));
-		camelContext.addRoutes(new RouteBuilder() {
-			public void configure() throws Exception {
-				from("direct:no-session-jaxb").to("drools:sm?dataFormat=drools-jaxb");
-				from("direct:no-session-xstream").to("drools:sm?dataFormat=drools-xstream");
-				from("direct:with-session-jaxb").to("drools:sm/ksession1?dataFormat=drools-jaxb");
-				from("direct:with-session-xstream").to("drools:sm/ksession1?dataFormat=drools-xstream");
-			}
-		});
-		ProducerTemplate template = camelContext.createProducerTemplate();
-		System.out.println(template);
+
+	public void testUnknowProfile() throws Exception {
+		StubbedServlet stubbedServlet = new StubbedServlet();
+		MockHTTPResponse resp = new MockHTTPResponse();
+		stubbedServlet.doPost(new MockHttpRequest("hostname/servlet/ksession3", "application/xml"), resp);
+		assertEquals(HttpServletResponse.SC_BAD_REQUEST, resp.errorCode);
 	}
 
-	public void testEndToEndIntegration() throws Exception {
+	public void testBadCommand() throws Exception {
+		String cmd = "bad command";
+
 		StubbedServlet stubbedServlet = new StubbedServlet();
-		InputStream inXML = getClass().getResourceAsStream("samples/command1.xml");
+		InputStream inXML = new ByteArrayInputStream(cmd.getBytes());
 		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
 		stubbedServlet.setInputStream(inXML);
 		stubbedServlet.setOutputStream(outStream);
 
-		// Execution 
 		MockHTTPResponse resp = new MockHTTPResponse();
-		stubbedServlet.doPost(new MockHttpRequest("something/xstreamProfile/", "application/xml"), resp);
+		stubbedServlet.doPost(new MockHttpRequest("hostname/servlet/ksession1", "application/xml"), resp);
 
-		String resultXML = new String(outStream.toByteArray());
-		assertTrue(resultXML.indexOf("<value>42</value>") > -1);
-		assertEquals("application/xml", resp.contentType);
+		assertEquals(HttpServletResponse.SC_NOT_ACCEPTABLE, resp.errorCode);
+	}
 
-		// Bad URL Request
-		resp = new MockHTTPResponse();
-		stubbedServlet.setInputStream(getClass().getResourceAsStream("samples/command1.xml"));
-		outStream = new ByteArrayOutputStream();
+	public void testJaxbInsertCommand() throws Exception {
+		String cmd = getJaxbCommand();
+
+		StubbedServlet stubbedServlet = new StubbedServlet();
+		InputStream inXML = new ByteArrayInputStream(cmd.getBytes());
+		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+		stubbedServlet.setInputStream(inXML);
 		stubbedServlet.setOutputStream(outStream);
-		stubbedServlet.doPost(new MockHttpRequest("something/foox", "application/xml"), resp);
-		assertEquals(HttpServletResponse.SC_BAD_REQUEST, resp.errorCode);
 
-		//check bad
-		stubbedServlet.doPost(new MockHttpRequest("something/knowledgebase/XXX", "application/json"), resp);
-		assertEquals(HttpServletResponse.SC_NOT_FOUND, resp.errorCode);
+		// Execution 
+		MockHTTPResponse resp = new MockHTTPResponse();
+		stubbedServlet.doPost(new MockHttpRequest("hostname/servlet/ksession1", "application/xml"), resp);
 
-		// Check inexistent knowledge context request
-		resp = new MockHTTPResponse();
-		stubbedServlet.setInputStream(getClass().getResourceAsStream("samples/command1.xml"));
-		stubbedServlet.setOutputStream(new ByteArrayOutputStream());
-		stubbedServlet.doPost(new MockHttpRequest("something/knowledgebase/testservice", "application/json"), resp);
-		assertEquals(HttpServletResponse.SC_NOT_ACCEPTABLE, resp.errorCode);
+		String response = new String(outStream.toByteArray());
+
+		assertTrue(response.indexOf("<ns2:name>santa</ns2:name>") > -1);
+		assertTrue(response.indexOf("<item key=\"lucaz\">\n            <value xsi:type=\"disconnectedFactHandle\"") > -1);
+		assertTrue(response.indexOf("<item key=\"baunax\">\n            <value xsi:type=\"disconnectedFactHandle\"") > -1);
 	}
 
-//	public void testSample() throws Exception {
-//
-//		PackageBuilder pb = new PackageBuilder();
-//		pb.addPackageFromDrl(new InputStreamReader(getClass().getResourceAsStream("test_rules1.drl")));
-//		assertFalse(pb.hasErrors());
-//
-//		RuleBase rb = RuleBaseFactory.newRuleBase();
-//		rb.addPackage(pb.getPackage());
-//
-//		KnowledgeStatelessServlet serv = new KnowledgeStatelessServlet();
-//
-//
-//		//serv.xmlInstance = KnowledgeStatelessServlet.configureXStream(false);
-//
-//		final InputStream inXML = getClass().getResourceAsStream("sample_request.xml");
-//		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-//
-//
-//		ClassLoader cl = Thread.currentThread().getContextClassLoader();
-//
-//		serv.doService(inXML, outStream, rb, false);
-//
-//		String result = new String(outStream.toByteArray());
-//
-//		assertTrue(result.indexOf("<id>prs</id>") > -1);
-//		assertTrue(result.indexOf("<id>result</id>") > -1);
-//		assertTrue(result.indexOf("<name>Jo</name>") > -1);
-//		assertTrue(result, result.indexOf("<status>crazy</status>") > -1);
-//		assertTrue(result.indexOf("<value>42</value>") > -1);
-//		assertTrue(result.indexOf("<explanation>just cause it is</explanation>") > -1);
-//
-//		assertSame(cl, Thread.currentThread().getContextClassLoader());
-//
-//
-//		InputStream inJSON = getClass().getResourceAsStream("sample_request.json");
-//		outStream = new ByteArrayOutputStream();
-//		serv.doService(inJSON, outStream, rb, true);
-//
-//		result = new String(outStream.toByteArray());
-//
-//		assertTrue(result.indexOf("\"id\":\"prs\"") > -1);
-//		assertTrue(result.indexOf("\"id\":\"result\"") > -1);
-//		assertTrue(result.indexOf("\"status\":\"crazy\"") > -1);
-//
-//	}
+	public void testXStreamInsertCommand() throws Exception {
+		String cmd = getXStreamCommand();
 
-//	public void testExample() {
-//		String xml = KnowledgeStatelessServlet.getRequestExample(false);
-//		assertNotNull(xml);
-//		String json = KnowledgeStatelessServlet.getRequestExample(true);
-//		assertNotNull(json);
-//		assertFalse(json.equals(xml));
-//
-//
-//		xml = KnowledgeStatelessServlet.getResponseExample(false);
-//		assertNotNull(xml);
-//		json = KnowledgeStatelessServlet.getResponseExample(true);
-//		assertNotNull(json);
-//		assertFalse(json.equals(xml));
-//
-//	}
+		StubbedServlet stubbedServlet = new StubbedServlet();
+		InputStream inXML = new ByteArrayInputStream(cmd.getBytes());
+		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+		stubbedServlet.setInputStream(inXML);
+		stubbedServlet.setOutputStream(outStream);
 
+		// Execution 
+		MockHTTPResponse resp = new MockHTTPResponse();
+		stubbedServlet.doPost(new MockHttpRequest("hostname/servlet/ksession2", "application/xml"), resp);
+
+		String response = new String(outStream.toByteArray());
+
+		ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML(response);
+
+		assertNotNull(result.getFactHandle("lucaz"));
+
+		FlatQueryResults personsQuery = (FlatQueryResults) result.getValue("persons");
+		assertEquals(2, personsQuery.size());
+
+	}
+
 }

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHTTPResponse.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHTTPResponse.java	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHTTPResponse.java	2010-02-24 16:32:49 UTC (rev 31832)
@@ -1,7 +1,6 @@
 package org.drools.server;
 
 import java.io.IOException;
-import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.HashMap;
@@ -23,57 +22,42 @@
 
 
 	public MockHTTPResponse() {
-
 	}
 
 	public void addCookie(Cookie arg0) {
-		// TODO Auto-generated method stub
-
 	}
 
 	public void addDateHeader(String arg0, long arg1) {
-		// TODO Auto-generated method stub
-
 	}
 
 	public void addHeader(String arg0, String arg1) {
-		// TODO Auto-generated method stub
-
 	}
 
 	public void addIntHeader(String arg0, int arg1) {
-		// TODO Auto-generated method stub
-
 	}
 
 	public boolean containsHeader(String a) {
-
 		return this.headers.containsKey(a);
 	}
 
 	public String encodeRedirectURL(String arg0) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String encodeRedirectUrl(String arg0) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String encodeURL(String arg0) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String encodeUrl(String arg0) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public void sendError(int i) throws IOException {
 		this.errorCode = i;
-
 	}
 
 	public void sendError(int arg0, String arg1) throws IOException {
@@ -82,51 +66,37 @@
 
 	public void sendRedirect(String arg0) throws IOException {
 		this.redirect = arg0;
-
 	}
 
 	public void setDateHeader(String arg0, long arg1) {
-		// TODO Auto-generated method stub
-
 	}
 
 	public void setHeader(String k, String v) {
 		this.headers.put(k, v);
-
 	}
 
 	public void setIntHeader(String arg0, int arg1) {
-		// TODO Auto-generated method stub
-
 	}
 
 	public void setStatus(int arg0) {
-		// TODO Auto-generated method stub
-
 	}
 
 	public void setStatus(int arg0, String arg1) {
-		// TODO Auto-generated method stub
 
 	}
 
 	public void flushBuffer() throws IOException {
-		// TODO Auto-generated method stub
-
 	}
 
 	public int getBufferSize() {
-		// TODO Auto-generated method stub
 		return 0;
 	}
 
 	public String getCharacterEncoding() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public Locale getLocale() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
@@ -135,45 +105,43 @@
 	}
 
 	public PrintWriter getWriter() throws IOException {
-
 		return writer ;
 	}
 
 	public boolean isCommitted() {
-		// TODO Auto-generated method stub
 		return false;
 	}
 
 	public void reset() {
-		// TODO Auto-generated method stub
 
 	}
 
 	public void resetBuffer() {
-		// TODO Auto-generated method stub
 
 	}
 
 	public void setBufferSize(int arg0) {
-		// TODO Auto-generated method stub
 
 	}
 
 	public void setContentLength(int arg0) {
-		// TODO Auto-generated method stub
 
 	}
 
 	public void setContentType(String s) {
 		this.contentType = s;
-
 	}
 
 	public void setLocale(Locale arg0) {
-		// TODO Auto-generated method stub
 
 	}
 
+	public String getContentType() {
+		return null;
+	}
 
+	public void setCharacterEncoding(String charset) {
+		
+	}
 
 }

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHttpRequest.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHttpRequest.java	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHttpRequest.java	2010-02-24 16:32:49 UTC (rev 31832)
@@ -25,67 +25,54 @@
 	}
 
 	public String getAuthType() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getContextPath() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public Cookie[] getCookies() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public long getDateHeader(String arg0) {
-		// TODO Auto-generated method stub
 		return 0;
 	}
 
 	public String getHeader(String arg0) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public Enumeration getHeaderNames() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public Enumeration getHeaders(String arg0) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public int getIntHeader(String arg0) {
-		// TODO Auto-generated method stub
 		return 0;
 	}
 
 	public String getMethod() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getPathInfo() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getPathTranslated() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getQueryString() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getRemoteUser() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
@@ -94,77 +81,62 @@
 	}
 
 	public StringBuffer getRequestURL() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getRequestedSessionId() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getServletPath() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public HttpSession getSession() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public HttpSession getSession(boolean arg0) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public Principal getUserPrincipal() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public boolean isRequestedSessionIdFromCookie() {
-		// TODO Auto-generated method stub
 		return false;
 	}
 
 	public boolean isRequestedSessionIdFromURL() {
-		// TODO Auto-generated method stub
 		return false;
 	}
 
 	public boolean isRequestedSessionIdFromUrl() {
-		// TODO Auto-generated method stub
 		return false;
 	}
 
 	public boolean isRequestedSessionIdValid() {
-		// TODO Auto-generated method stub
 		return false;
 	}
 
 	public boolean isUserInRole(String arg0) {
-		// TODO Auto-generated method stub
 		return false;
 	}
 
 	public Object getAttribute(String arg0) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public Enumeration getAttributeNames() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getCharacterEncoding() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public int getContentLength() {
-		// TODO Auto-generated method stub
 		return 0;
 	}
 
@@ -177,101 +149,95 @@
 	}
 
 	public Locale getLocale() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public Enumeration getLocales() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getParameter(String arg0) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public Map getParameterMap() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public Enumeration getParameterNames() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String[] getParameterValues(String arg0) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getProtocol() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public BufferedReader getReader() throws IOException {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getRealPath(String arg0) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getRemoteAddr() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getRemoteHost() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public RequestDispatcher getRequestDispatcher(String arg0) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getScheme() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String getServerName() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public int getServerPort() {
-		// TODO Auto-generated method stub
 		return 0;
 	}
 
 	public boolean isSecure() {
-		// TODO Auto-generated method stub
 		return false;
 	}
 
 	public void removeAttribute(String arg0) {
-		// TODO Auto-generated method stub
 
 	}
 
 	public void setAttribute(String arg0, Object arg1) {
-		// TODO Auto-generated method stub
 
 	}
 
-	public void setCharacterEncoding(String arg0)
-			throws UnsupportedEncodingException {
-		// TODO Auto-generated method stub
+	public void setCharacterEncoding(String arg0) throws UnsupportedEncodingException {
 
 	}
 
+	public String getLocalAddr() {
+		return null;
+	}
 
+	public String getLocalName() {
+		return null;
+	}
 
+	public int getLocalPort() {
+		return 0;
+	}
+
+	public int getRemotePort() {
+		return 0;
+	}
+
 }

Added: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/rest/KnowledgeServiceRestTest.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/rest/KnowledgeServiceRestTest.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/rest/KnowledgeServiceRestTest.java	2010-02-24 16:32:49 UTC (rev 31832)
@@ -0,0 +1,123 @@
+package org.drools.server.rest;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+
+import javax.ws.rs.core.Response.Status;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.NameValuePair;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.help.BatchExecutionHelper;
+import org.drools.runtime.rule.impl.FlatQueryResults;
+import org.drools.server.KnowledgeServiceBaseTest;
+import org.jboss.resteasy.plugins.server.tjws.TJWSEmbeddedJaxrsServer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class KnowledgeServiceRestTest extends KnowledgeServiceBaseTest {
+
+	static Logger logger = LoggerFactory.getLogger(KnowledgeServiceRestTest.class);
+
+	private TJWSEmbeddedJaxrsServer server;
+	private HttpClient httpClient;
+
+	protected void setUp() throws Exception {
+		server = new TJWSEmbeddedJaxrsServer();
+		server.setPort(9091);
+		server.setBindAddress("localhost");
+		server.getDeployment().getActualResourceClasses().add(KnowledgeServiceRest.class);
+		server.start();
+		httpClient = new HttpClient();
+		httpClient.getHostConfiguration().setHost("localhost", 9091, "http");
+	}
+
+	public void testInvalidCommand() throws Exception {
+		PostMethod postMethod = new PostMethod("/commands/execute");
+		NameValuePair profile = new NameValuePair("profile", "ksession1");
+		NameValuePair command = new NameValuePair("command", null);
+
+		postMethod.setRequestBody(new NameValuePair[] {profile, command});
+		httpClient.executeMethod(postMethod);
+
+		assertEquals(Status.BAD_REQUEST.getStatusCode(), postMethod.getStatusCode());
+	}
+
+	public void testInvalidProfile() throws Exception {
+		PostMethod postMethod = new PostMethod("/commands/execute");
+		NameValuePair profile = new NameValuePair("profile", "inexistentProfile");
+		NameValuePair command = new NameValuePair("command", "xml definition");
+
+		postMethod.setRequestBody(new NameValuePair[] {profile, command});
+		httpClient.executeMethod(postMethod);
+
+		assertEquals(Status.BAD_REQUEST.getStatusCode(), postMethod.getStatusCode());
+	}
+
+	public void testJaxbInsertCommand() throws Exception {
+		String cmd = getJaxbCommand();
+
+		PostMethod postMethod = new PostMethod("/commands/execute");
+		NameValuePair profile = new NameValuePair("profile", "ksession1");
+		NameValuePair command = new NameValuePair("command", cmd);
+
+		postMethod.setRequestBody(new NameValuePair[] {profile, command});
+		httpClient.executeMethod(postMethod);
+
+		assertEquals(200, postMethod.getStatusCode());
+
+		InputStream responseBodyAsStream = postMethod.getResponseBodyAsStream();
+
+		String response = readInputStream(responseBodyAsStream);
+
+		assertTrue(response.indexOf("<ns2:name>santa</ns2:name>") > -1);
+		assertTrue(response.indexOf("<item key=\"lucaz\">\n            <value xsi:type=\"disconnectedFactHandle\"") > -1);
+		assertTrue(response.indexOf("<item key=\"baunax\">\n            <value xsi:type=\"disconnectedFactHandle\"") > -1);
+
+	}
+
+	public void testXStreamInsertCommand() throws Exception {
+		String cmd = getXStreamCommand();
+
+		PostMethod postMethod = new PostMethod("/commands/execute");
+		NameValuePair profile = new NameValuePair("profile", "ksession2");
+		NameValuePair command = new NameValuePair("command", cmd);
+
+		postMethod.setRequestBody(new NameValuePair[] {profile, command});
+		httpClient.executeMethod(postMethod);
+
+		assertEquals(200, postMethod.getStatusCode());
+
+		InputStream responseBodyAsStream = postMethod.getResponseBodyAsStream();
+
+		String response = readInputStream(responseBodyAsStream);
+
+		ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML(response);
+
+		assertNotNull(result.getFactHandle("lucaz"));
+
+		FlatQueryResults personsQuery = (FlatQueryResults) result.getValue("persons");
+		assertEquals(2, personsQuery.size());
+
+	}
+
+	private String readInputStream(InputStream inputStream) throws UnsupportedEncodingException, IOException {
+		StringBuilder sb = new StringBuilder();
+		String line;
+		try {
+			BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
+			while ((line = reader.readLine()) != null) {
+				sb.append(line).append("\n");
+			}
+		}
+		finally {
+			inputStream.close();
+		}
+		return sb.toString();
+	}
+
+}


Property changes on: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/rest/KnowledgeServiceRestTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/changesets/change-set-2.xml
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/changesets/change-set-2.xml	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/changesets/change-set-2.xml	2010-02-24 16:32:49 UTC (rev 31832)
@@ -1,10 +1,7 @@
 <change-set xmlns='http://drools.org/drools-5.0/change-set'
-            xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
-            xs:schemaLocation='http://drools.org/drools-5.0/change-set.xsd' >
-   <add>
-<!--  
-	ADD CLASSPATH RESOURCE
-      <resource source='file:/project/myrules.drl' type='DRL' />
--->
-   </add>
+		xmlns:xs='http://www.w3.org/2001/XMLSchema-instance' 
+		xs:schemaLocation='http://drools.org/drools-5.0/change-set.xsd'>
+	<add>
+		<resource source='classpath:rules/person2.drl' type='DRL' />
+	</add>
 </change-set>
\ No newline at end of file

Added: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/model/person.xsd
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/model/person.xsd	                        (rev 0)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/model/person.xsd	2010-02-24 16:32:49 UTC (rev 31832)
@@ -0,0 +1,15 @@
+<xsd:schema 
+	xmlns:person="http://drools.org/model" 
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	targetNamespace="http://drools.org/model" 
+	elementFormDefault="qualified"
+>
+
+	<xsd:complexType name="person">
+		<xsd:sequence>
+			<xsd:element name="name" type="xsd:string" />
+			<xsd:element name="age" type="xsd:integer" />
+		</xsd:sequence>
+	</xsd:complexType>
+
+</xsd:schema>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/model/person.xsd
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/profiles.xml
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/profiles.xml	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/profiles.xml	2010-02-24 16:32:49 UTC (rev 31832)
@@ -1,42 +1,35 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <profiles>
-  <knowledge-context-profile id="xstreamProfile">
-    <session-type>stateless</session-type>
-    <change-sets>
-      <file>changesets/change-set-1.xml</file>
-      <file>changesets/change-set-2.xml</file>
-    </change-sets>
-    <startup-commands>
-      <command>
-        <![CDATA[
-      	<batch-execution lookup='ksession1'>
-   	       <insert out-identifier='lucaz'>
-              <org.drools.pipeline.camel.Person>
-        		 <name>lucaz</name>
-	     	    <age>25</age>
-    		  </org.drools.pipeline.camel.Person>
-		   </insert>
-		   <insert out-identifier='baunax'>
-       	  	  <org.drools.pipeline.camel.Person>
-        		 <name>baunax</name>
-	     	     <age>21</age>
-    		  </org.drools.pipeline.camel.Person>
-		   </insert>
-	   	 <fire-all-rules />
-	   	</batch-execution>
-	   	]]>
-   	  </command>
-    </startup-commands>
-  </knowledge-context-profile>
-  
-  <knowledge-context-profile id="jaxbProfile">
-    <session-type>stateful</session-type>
-    <change-sets>
-      <file>changesets/change-set-1.xml</file>
-    </change-sets>
-    <jaxb-models>
-      <file>person.xsd</file>
-    </jaxb-models>
-  </knowledge-context-profile>
-  
+	<knowledge-context-profile id="ksession1">
+		<session-type>stateful</session-type>
+		<change-sets>
+			<file>changesets/change-set-1.xml</file>
+		</change-sets>
+		<jaxb-models>
+			<file>model/person.xsd</file>
+		</jaxb-models>
+		<startup-commands>
+			<command>
+        	<![CDATA[
+			<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+			<batch-execution lookup="ksession1" xmlns:ns2="http://drools.org/model">
+			    <insert out-identifier="santa">
+			        <object xsi:type="ns2:person" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+			            <ns2:name>santa</ns2:name>
+			            <ns2:age>99</ns2:age>
+			        </object>
+			    </insert>
+			</batch-execution>
+  	   		]]>
+			</command>
+		</startup-commands>
+	</knowledge-context-profile>
+
+	<knowledge-context-profile id="ksession2">
+		<session-type>stateless</session-type>
+		<change-sets>
+			<file>changesets/change-set-2.xml</file>
+		</change-sets>
+	</knowledge-context-profile>
+
 </profiles>

Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person.drl
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person.drl	2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person.drl	2010-02-24 16:32:49 UTC (rev 31832)
@@ -1,8 +1,14 @@
 package org.drools.test.model
 
-rule "Test Rule"
+import org.drools.model.Person;
+
+query persons
+	$p : Person(name != null)
+end
+
+rule "Test Rule 1"
 	when
-		eval (true)
+		$p : Person()
 	then 
-		System.out.println("fired");
-end
+		System.out.println("fired " + $p.getName());
+end
\ No newline at end of file

Added: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person2.drl
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person2.drl	                        (rev 0)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person2.drl	2010-02-24 16:32:49 UTC (rev 31832)
@@ -0,0 +1,14 @@
+package org.drools.test.model
+
+import org.drools.pipeline.camel.Person;
+
+query persons
+	$p : Person(name != null)
+end
+
+rule "Test Rule 2"
+	when
+		$p : Person()
+	then 
+		System.out.println("fired " + $p.getName());
+end


Property changes on: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person2.drl
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the jboss-svn-commits mailing list