Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

When used with an InOut MEP, the Exec components executes the command and get the command output buffer. The command output is put in the out message and send back in the exchange.

Abstract WSDL

ServiceMix Exec endpoint exposes an abstract WSDL (in

...

the endpoint descriptor) to define the format of exchanged message.

Code Block
xml
xml

<message>
  <command>ls</command>
  <arguments>
    <argument>-l</argument>
    <argument>/tmp</argument>
  </arguments>
</message>
Note

If the in message doesn't contain the command tag, Exec component uses the command attribute provided in the xbean.xml. If no command is provided in the in message and in the xbean.xml, the component throws an exception and the exchange fails.

Note

You can support any message format by defining your own exec marshaler implementation. The endpoint supports a marshaler attribute where you can define your class that implements the ExecMarshalerSupport interface.

Exec out message format

When used with an InOut MEP, the Exec return the command execution output into the out message. The out message content looks like:

Code Block
xmlxml

<result>
  <started>1241756756376</started>
  <finished>1241756756390</finished>
  <duration>14</duration>
  <exitcode>0</exitcode>
  <output><![CDATA[
total 6729
-rw------- 1 jb       jb   1693752 2009-04-09 09:07 f9G0lWzx.tar.part
-rw-r--r-- 1 jb       jb
<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<wsdl:definitions name="servicemix-exec" 
    targetNamespace="http://servicemix.apache.org/exec"
    xmlns:tns="http://servicemix.apache.org/exec"
    xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
    <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                targetNamespace="http://servicemix.apache.org/exec"
                xmlns:tns="http://servicemix.apache.org/exec"
                attributeFormDefault="unqualified"
                elementFormDefault="unqualified">
                
              <xs:complexType name="execRequest">
                <xs:sequence>
                    <xs:element name="command" type="xs:string" minOccurs="0"/>
                    <xs:element name="arguments" minOccurs="0">
                        <xs:complexType>

                            <xs:sequence>
                                <xs:element name="argument" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
             </xs:complexType>
             
             <xs:complexType name="execResponse">
                <xs:sequence>

                    <xs:element name="endTime" type="xs:long"/>
                    <xs:element name="errorData" type="tns:stringBuffer" minOccurs="0"/>
                    <xs:element name="executionDuration" type="xs:long"/>
                  8 2009-03-27 18:27 gnome-session-manager
srwxr-xr-x 1 jb<xs:element name="exitCode" type="xs:int"/>
            jb        <xs:element name="outputData" type="tns:stringBuffer" minOccurs="0 2009-03-26 10:56 gnome-system-monitor.jb.3619273851
drwxr-xr-x 2 jb "/>
                    <xs:element name="startTime" type="xs:long"/>
                </xs:sequence>
            </xs:complexType>

            <xs:complexType name="stringBuffer" final="extension restriction">
                <xs:complexContent>
                    <xs:extension base="tns:abstractStringBuilder">
                        <xs:sequence/>
                    </xs:extension>
                </xs:complexContent>
            </xs:complexType>

            <xs:complexType name="abstractStringBuilder" abstract="true">

                <xs:sequence/>
            </xs:complexType>
                
        </xs:schema>
    </wsdl:types>
    
    <wsdl:message name="execRequest">
        <wsdl:part name="parameters" element="tns:execRequest"/>
    </wsdl:message>
    
    <wsdl:message name="execResponse">
      jb  <wsdl:part name="parameters" element="tns:execResponse"/>

  1024 2009-04-23 08:43 hsperfdata_jb
drwxr-xr-x 2 jboss    java </wsdl:message>
    
    <wsdl:portType name="ExecPortType">
      1024 2009-04-17 12<wsdl:46 hsperfdata_jboss
drwxr-xr-x 2 weblogic javaoperation name="execute">
          1024 2009-04-17 09<wsdl:40 hsperfdata_weblogic
-rw-r--r-- 1 jbinput message="tns:execRequest"/>
            <wsdl:output message="tns:execResponse"/>
       jb </wsdl:operation>
    </wsdl:portType>
  870 2009-03-26 10:59 jbi12672.zip
-rw-r--r-- 1 jb       jb       870 2009-03-26 10:59 jbi12673.zip
]]></output>
  <error><![CDATA[
]]></error>
</result>

What does the tags contain

 
</wsdl:definitions>             
Note

It's possible to expose an Exec endpoint directly using a SOAP compliant BC such as ServiceMix HTTP or ServiceMix CXF-BC.
For example, using a ServiceMix HTTP endpoint, the HTTP component create a concrete WSDL (adding SOAP bindings) using the Exec abstract one. See the Exec sample.

Note

An exec endpoint expects an ExecRequest message and provide an ExecResponse. The way to marshal/unmarshal ExecRequest and ExecResponse can be override by defining your own ExecMarshaler.

ExecRequest

The ExecRequest describes the command to execute with or without arguments. The arguments can be append directly on the command or using the dedicated attributes.

Note

If the ExecRequest is empty (without command provided), the Exec endpoint will use the static command provided in the xbean.xml (using the command attribute). If no command is provided (neither in the ExecRequest and in the xbean.xml), the Exec endpoint throws an exception and the exchange fails.

The ExecRequest defines the following attributes:

No Format

command   - the command to execute (for example ls). The command arguments can be provided directly here (for example ls -lt).
arguments - the command arguments.

Here is an example of ExecRequest:

Code Block
xml
xml

<?xml version="1.0" encoding="UTF-8"?>
<exec:execRequest xmlns:exec="http://servicemix.apache.org/exec">
  <command>ls</command>
  <arguments>
   <argument>-lt</argument>
   <argument>/tmp</argument>
  <arguments>
</exec:execRequest>
{code:xml}

h4. ExecResponse 

When used with an InOut MEP, the Exec endpoint returns an ExecResponse. The ExecResponse contains all information about the command execution.

{noformat}
No Format
started  - contains the execution start time in millis (System.currentTimeMillis() is used).
finished - contains the time the process execution finished in millis (System.currentTimeMillis() is used).
duration - the duration in millis the execution took.
exitcode - the return code of the process (0 means all fine; != 0 means an error code).
output   - the contents of the output stream of the process.
error    - the contents of the error stream of the process.

Some words on the output and error stream contents. 
It may happen that some information at the very beginning will get lost depending on how 
fast the stream listeners are set up and how fast the executed process will push information to it.
{noformat}

Here is an example of an ExecResponse:

{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<exec:execResponse xmlns:exec="http://servicemix.apache.org/exec">
  <started>1241756756376</started>
  <finished>1241756756390</finished>
  <duration>14</duration>
  <exitcode>0</exitcode>
  <output><![CDATA[
total 6729
-rw------- 1 jb       jb   1693752 2009-04-09 09:07 f9G0lWzx.tar.part
-rw-r--r-- 1 jb       jb         8 2009-03-27 18:27 gnome-session-manager
srwxr-xr-x 1 jb       jb         0 2009-03-26 10:56 gnome-system-monitor.jb.3619273851
drwxr-xr-x 2 jb       jb      1024 2009-04-23 08:43 hsperfdata_jb
drwxr-xr-x 2 jboss    java    1024 2009-04-17 12:46 hsperfdata_jboss
drwxr-xr-x 2 weblogic java    1024 2009-04-17 09:40 hsperfdata_weblogic
-rw-r--r-- 1 jb       jb       870 2009-03-26 10:59 jbi12672.zip
-rw-r--r-- 1 jb       jb       870 2009-03-26 10:59 jbi12673.zip
]]></output>
  <error><![CDATA[
]]></error>
</exec:execResponse>

Endpoint

The Exec endpoint can be very simple, waiting for command contained in the in message:

...