<?xml version="1.0"?>
<!--
  Copyright 2002,2004 The Apache Software Foundation.
  
  Licensed 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.
-->

<!-- defines a new taglib of babelfish soap services -->

<j:jelly xmlns:j="jelly:core" xmlns:x="jelly:xml" xmlns:define="jelly:define" xmlns:http="notImplementedYet">
  <define:taglib uri="babelfish">  

    <!-- defines the <translate> tag                                            -->
    <!-- notice how the 'from' and 'to' attributes are available as variables   -->
    <!-- and the body of the <translate> tag is invoked via <define:invokeBody> -->
    <define:tag name="translate">
      <http:post url="http://services.xmethods.net:80/perl/soaplite.cgi">
       <http:header name="SOAPAction" value="urn:xmethodsBabelFish#BabelFish"/>
       <http:header name="Content-Type" value="text/xml"/>
       <http:body>
        <env:Envelope 
          xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
          env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
          <env:Body>
            <m:BabelFish xmlns:m="urn:xmethodsBabelFish">
              <translationmode>${from}_${to}</translationmode>      
              <sourcedata>
                <define:invokeBody/>
              </sourcedata>    
            </m:BabelFish>
          </env:Body>
        </env:Envelope>
       </http:body>
      </http:post>
    </define:tag>
    
  </define:taglib>    
</j:jelly>

