You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by jb...@apache.org on 2009/05/01 08:22:24 UTC
svn commit: r770546 - in
/servicemix/components/engines/servicemix-exec/trunk/src:
main/java/org/apache/servicemix/exec/
main/java/org/apache/servicemix/exec/marshaler/
main/java/org/apache/servicemix/exec/utils/
test/java/org/apache/servicemix/exec/ma...
Author: jbonofre
Date: Fri May 1 06:22:24 2009
New Revision: 770546
URL: http://svn.apache.org/viewvc?rev=770546&view=rev
Log:
[SMXCOMP-508] The user can now provided its own implementation of the ExecMarshalerSupport interface to constructs the exec command using the in normalized message.
Added:
servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/
servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshaler.java (with props)
servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/ExecMarshalerSupport.java (with props)
servicemix/components/engines/servicemix-exec/trunk/src/test/java/org/apache/servicemix/exec/marshaler/
servicemix/components/engines/servicemix-exec/trunk/src/test/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshalerTest.java (with props)
Removed:
servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/utils/ExecMarshaler.java
Modified:
servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/ExecEndpoint.java
Modified: servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/ExecEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/ExecEndpoint.java?rev=770546&r1=770545&r2=770546&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/ExecEndpoint.java (original)
+++ servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/ExecEndpoint.java Fri May 1 06:22:24 2009
@@ -23,7 +23,8 @@
import javax.jbi.messaging.NormalizedMessage;
import org.apache.servicemix.common.endpoints.ProviderEndpoint;
-import org.apache.servicemix.exec.utils.ExecMarshaler;
+import org.apache.servicemix.exec.marshaler.DefaultExecMarshaler;
+import org.apache.servicemix.exec.marshaler.ExecMarshalerSupport;
import org.apache.servicemix.exec.utils.ExecUtils;
import org.apache.servicemix.jbi.jaxp.StringSource;
@@ -37,15 +38,49 @@
private String command; // the command can be static (define in the
// descriptor) or provided in the incoming message
+ private ExecMarshalerSupport marshaler = new DefaultExecMarshaler(); // the marshaler that parse the in message
public String getCommand() {
return command;
}
+ /**
+ * <p>
+ * This attribute specifies the default command to use if no is provided
+ * in the incoming message.
+ * </p>
+ * <i> The default value is <code>null</code>.
+ *
+ * @param command
+ */
public void setCommand(String command) {
this.command = command;
}
+
+ public ExecMarshalerSupport getMarshaler() {
+ return marshaler;
+ }
+
+ /**
+ * <p>
+ * With this method you can specify a marshaler class which provides the
+ * logic for converting a message into a execution command. This class
+ * has to implement the interface class <code>ExecMarshalerSupport</code>.
+ * If you don't specify a marshaler, the <code>DefaultExecMarshaler</code>
+ * will be used.
+ * </p>
+ *
+ * @param marshaler a <code>ExecMarshalerSupport</code> class representing the
+ * marshaler.
+ */
+ public void setMarshaler(ExecMarshalerSupport marshaler) {
+ this.marshaler = marshaler;
+ }
+ /*
+ * (non-Javadoc)
+ * @see org.apache.servicemix.common.endpoints.ProviderEndpoint#process(javax.jbi.messaging.MessageExchange)
+ */
@Override
public void process(MessageExchange exchange) throws Exception {
// The component acts as a provider, this means that another component
@@ -84,7 +119,7 @@
// gets the in message
NormalizedMessage in = exchange.getMessage("in");
// parses the in message and get the execution command
- String exec = ExecMarshaler.constructExecCommand(in);
+ String exec = marshaler.constructExecCommand(in);
if (exec == null || exec.trim().length() < 1) {
exec = command;
}
Added: servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshaler.java?rev=770546&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshaler.java (added)
+++ servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshaler.java Fri May 1 06:22:24 2009
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.exec.marshaler;
+
+import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.transform.TransformerException;
+
+import org.apache.servicemix.jbi.jaxp.SourceTransformer;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+
+/**
+ * Default exec marshaler.
+ *
+ * @author jbonofre
+ */
+public class DefaultExecMarshaler implements ExecMarshalerSupport {
+
+ private static final String TAG_COMMAND = "command";
+ private static final String TAG_ARGUMENT = "argument";
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.servicemix.exec.marshaler.ExecMarshalerSupport#constructExecCommand(javax.jbi.messaging.NormalizedMessage)
+ */
+ public String constructExecCommand(NormalizedMessage message) throws TransformerException {
+ String execString = null;
+ // create a source transformer
+ SourceTransformer transformer = new SourceTransformer();
+ try {
+ // transform the message content into a DOM document
+ Document document = transformer.toDOMDocument(message);
+ document.getDocumentElement().normalize();
+
+ // get the command node
+ NodeList commandNode = document.getElementsByTagName(TAG_COMMAND);
+ if (commandNode != null && commandNode.getLength() > 1) {
+ throw new TransformerException("Invalid message content. Only one command tag is supported.");
+ }
+ if (commandNode != null && commandNode.item(0) != null) {
+ execString = commandNode.item(0).getChildNodes().item(0).getNodeValue();
+ }
+
+ // get the argument nodes
+ NodeList argumentNodes = document.getElementsByTagName(TAG_ARGUMENT);
+ for (int i = 0; i < argumentNodes.getLength(); i++) {
+ execString = execString + " " + argumentNodes.item(i).getChildNodes().item(0).getNodeValue();
+ }
+
+ } catch (Exception e) {
+ throw new TransformerException(e);
+ }
+ return execString;
+ }
+
+}
Propchange: servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshaler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/ExecMarshalerSupport.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/ExecMarshalerSupport.java?rev=770546&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/ExecMarshalerSupport.java (added)
+++ servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/ExecMarshalerSupport.java Fri May 1 06:22:24 2009
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.exec.marshaler;
+
+import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.transform.TransformerException;
+
+/**
+ * This interface describes the behavior of an exec marshaler.
+ *
+ * @author jbonofre
+ */
+public interface ExecMarshalerSupport {
+
+ /**
+ * <p>
+ * Parses the content of the <code>NormalizedMessage</code>, extracts command and arguments
+ * to constructs the execution command.
+ * </p>
+ *
+ * @param message the <code>NormalizedMessage</code>.
+ * @return the execution command.
+ * @throws TransformerException in case of error during command construction.
+ */
+ public String constructExecCommand(NormalizedMessage message) throws TransformerException;
+
+}
Propchange: servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/ExecMarshalerSupport.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: servicemix/components/engines/servicemix-exec/trunk/src/test/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshalerTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-exec/trunk/src/test/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshalerTest.java?rev=770546&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-exec/trunk/src/test/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshalerTest.java (added)
+++ servicemix/components/engines/servicemix-exec/trunk/src/test/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshalerTest.java Fri May 1 06:22:24 2009
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.exec.marshaler;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessageExchangeFactory;
+import javax.jbi.messaging.NormalizedMessage;
+
+import junit.framework.TestCase;
+
+import org.apache.servicemix.id.IdGenerator;
+import org.apache.servicemix.jbi.helper.MessageExchangePattern;
+import org.apache.servicemix.jbi.jaxp.StringSource;
+import org.apache.servicemix.jbi.messaging.MessageExchangeFactoryImpl;
+
+/**
+ * Unit tests on the default exec marshaler.
+ *
+ * @author jbonofre
+ */
+public class DefaultExecMarshalerTest extends TestCase {
+
+ private static final String COMMAND = "ls";
+ private static final String FIRST_ARG = "-lt";
+ private static final String SECOND_ARG = "/tmp";
+
+ private static final String MSG_VALID = "<message>"
+ + "<command>" + COMMAND + "</command>"
+ + "<arguments>"
+ + "<argument>" + FIRST_ARG + "</argument>"
+ + "<argument>" + SECOND_ARG + "</argument>"
+ + "</arguments>"
+ + "</message>";
+
+ private ExecMarshalerSupport marshaler;
+ private MessageExchangeFactory factory;
+
+ /*
+ * (non-Javadoc)
+ * @see junit.framework.TestCase#setUp()
+ */
+ public void setUp() throws Exception {
+ this.marshaler = new DefaultExecMarshaler();
+ this.factory = new MessageExchangeFactoryImpl(new IdGenerator(), new AtomicBoolean(false));
+ }
+
+ public void testValidMessage() throws Exception {
+ MessageExchange exchange = this.factory.createExchange(MessageExchangePattern.IN_ONLY);
+ NormalizedMessage message = exchange.createMessage();
+ message.setContent(new StringSource(MSG_VALID));
+ exchange.setMessage(message, "in");
+
+ String execCommand = marshaler.constructExecCommand(message);
+
+ assertEquals("ls -lt /tmp", execCommand);
+ }
+
+}
Propchange: servicemix/components/engines/servicemix-exec/trunk/src/test/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshalerTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain