[jboss-svn-commits] JBL Code SVN: r29348 - in labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta: tests/src/org/jboss/soa/esb/listeners/config/mappers and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Sep 15 07:05:31 EDT 2009
Author: kevin.conner at jboss.com
Date: 2009-09-15 07:05:30 -0400 (Tue, 15 Sep 2009)
New Revision: 29348
Added:
labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/jbossesb_config_escaping.xml
Modified:
labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers/FtpListenerMapper.java
labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/FtpListenerMapperUnitTest.java
Log:
Fix FTP URL escaping: JBESB-2828
Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers/FtpListenerMapper.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers/FtpListenerMapper.java 2009-09-15 08:46:31 UTC (rev 29347)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers/FtpListenerMapper.java 2009-09-15 11:05:30 UTC (rev 29348)
@@ -20,6 +20,9 @@
package org.jboss.soa.esb.listeners.config.mappers;
+import java.net.URI;
+import java.net.URISyntaxException;
+
import org.jboss.soa.esb.ConfigurationException;
import org.jboss.soa.esb.addressing.eprs.FTPEpr;
import org.jboss.soa.esb.addressing.eprs.FTPSEpr;
@@ -112,16 +115,56 @@
*/
private static final String FTP_SEPARATOR = "/";
- private static void mapFtpEprProperties(Element toElement, FtpProvider provider, FtpMessageFilter messageFilter)
+ private static void mapFtpEprProperties(Element toElement, FtpProvider provider, FtpMessageFilter messageFilter)
+ throws ConfigurationException
{
String inputDir = messageFilter.getDirectory();
if ( ! inputDir.startsWith( FTP_SEPARATOR ) )
inputDir = FTP_SEPARATOR + inputDir;
final String filterPassword = messageFilter.getPassword() ;
- final String urlPassword = (filterPassword == null ? "" : ":" + filterPassword) ;
- toElement.setAttribute(ListenerTagNames.URL_TAG, messageFilter.getProtocol() + "://" + messageFilter.getUsername()
- + urlPassword + "@" + provider.getHostname() + inputDir );
+ final String username = encodeUsername(messageFilter.getUsername()) ;
+ final String userInfo = (filterPassword == null ? username : username + ":" + filterPassword) ;
+ final String origHostname = provider.getHostname() ;
+ final int colonLocation = origHostname.indexOf(':') ;
+ final String hostname ;
+ final int port ;
+ if (colonLocation > -1)
+ {
+ hostname = origHostname.substring(0, colonLocation) ;
+ final int portLocation = colonLocation+1 ;
+ if (portLocation < origHostname.length())
+ {
+ try
+ {
+ port = Integer.parseInt(origHostname.substring(portLocation)) ;
+ }
+ catch (final NumberFormatException nfe)
+ {
+ throw new ConfigurationException("Failed to parse port value") ;
+ }
+ }
+ else
+ {
+ port = -1 ;
+ }
+ }
+ else
+ {
+ hostname = origHostname ;
+ port = -1 ;
+ }
+ final URI uri ;
+ try
+ {
+ uri = new URI(messageFilter.getProtocol().toString(),
+ userInfo, hostname, port, inputDir, null, null) ;
+ }
+ catch (final URISyntaxException urise)
+ {
+ throw new ConfigurationException("Unexpected exception creating FTP URI, " + urise.getMessage()) ;
+ }
+ toElement.setAttribute(ListenerTagNames.URL_TAG, uri.toASCIIString());
toElement.setAttribute(FTPEpr.INPUT_SUFFIX_TAG, messageFilter.getInputSuffix());
toElement.setAttribute(FTPEpr.WORK_SUFFIX_TAG, messageFilter.getWorkSuffix());
toElement.setAttribute(FTPEpr.POST_DEL_TAG, String.valueOf(messageFilter.getPostDelete()));
@@ -144,4 +187,30 @@
toElement.setAttribute(FTPSEpr.CERTIFICATE_NAME_TAG, messageFilter.getCertificateName());
}
}
+
+ private static String encodeUsername(final String username)
+ {
+ if (username != null)
+ {
+ int colonPosn = username.indexOf(':') ;
+ if (colonPosn > -1)
+ {
+ int currentIndex = 0 ;
+ final StringBuilder sb = new StringBuilder() ;
+ while(colonPosn > 0)
+ {
+ sb.append(username.substring(currentIndex, colonPosn)) ;
+ sb.append("%3A") ;
+ currentIndex = colonPosn+1 ;
+ colonPosn = username.indexOf(':', currentIndex) ;
+ }
+ if (currentIndex < username.length())
+ {
+ sb.append(username.substring(currentIndex)) ;
+ }
+ return sb.toString() ;
+ }
+ }
+ return username ;
+ }
}
Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/FtpListenerMapperUnitTest.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/FtpListenerMapperUnitTest.java 2009-09-15 08:46:31 UTC (rev 29347)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/FtpListenerMapperUnitTest.java 2009-09-15 11:05:30 UTC (rev 29348)
@@ -28,11 +28,14 @@
import java.io.IOException;
import java.io.InputStream;
+import java.net.URI;
import java.util.List;
import org.apache.log4j.Logger;
import org.jboss.soa.esb.ConfigurationException;
import org.jboss.soa.esb.dom.YADOMUtil;
+import org.jboss.soa.esb.listeners.ListenerTagNames;
+import org.jboss.soa.esb.listeners.config.GatewayGenerator;
import org.jboss.soa.esb.listeners.config.Generator;
import org.jboss.soa.esb.listeners.config.xbeanmodel.FtpListenerDocument;
import org.jboss.soa.esb.listeners.config.xbeanmodel.Listener;
@@ -44,6 +47,7 @@
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
/**
* Tests the class FtpListenerMapper
@@ -57,6 +61,7 @@
private Logger log = Logger.getLogger(FtpListenerMapperUnitTest.class);
private static final String ESB_CONFIG_READ_ONLY = "jbossesb_config_readonly.xml";
+ private static final String ESB_CONFIG_ESCAPING = "jbossesb_config_escaping.xml";
private static final String GATEWAY_CLASS_ATTRIBUTE = "gatewayClass";
@@ -85,6 +90,29 @@
assertEquals( ReadOnlyRemoteGatewayListener.class.getName(), gatewayClass.getNodeValue() );
}
+ @Test
+ public void testEscaping() throws Exception
+ {
+ final InputStream is = getClass().getResourceAsStream(ESB_CONFIG_ESCAPING) ;
+ final XMLBeansModel model = Generator.parseConfig(is) ;
+ final GatewayGenerator gatewayGenerator = new GatewayGenerator(model);
+ final Document gatewayConfig = gatewayGenerator.generate();
+ final Element root = gatewayConfig.getDocumentElement() ;
+ final NodeList listenerList = root.getElementsByTagName("listener") ;
+ assertEquals("Listener count", 1, listenerList.getLength()) ;
+ final Node listener = listenerList.item(0) ;
+ final NamedNodeMap attributes = listener.getAttributes() ;
+ final Node urlNode = attributes.getNamedItem(ListenerTagNames.URL_TAG) ;
+ assertNotNull("URL node", urlNode) ;
+ final String urlValue = urlNode.getNodeValue() ;
+ assertNotNull("URL value", urlValue) ;
+ final URI uri = new URI(urlValue) ;
+ assertEquals("host", "localhost", uri.getHost()) ;
+ assertEquals("port", 21, uri.getPort()) ;
+ assertEquals("path", "/directory/####", uri.getPath()) ;
+ assertEquals("userInfo", "user%3A##user:password:##password", uri.getUserInfo()) ;
+ }
+
private XMLBeansModel getXmlBeanModel( String fileName ) throws ConfigurationException, IOException
{
InputStream inputStream = getClass().getResourceAsStream( ESB_CONFIG_READ_ONLY );
Added: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/jbossesb_config_escaping.xml
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/jbossesb_config_escaping.xml (rev 0)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/jbossesb_config_escaping.xml 2009-09-15 11:05:30 UTC (rev 29348)
@@ -0,0 +1,18 @@
+<?xml version = "1.0" encoding = "UTF-8"?>
+<jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd">
+ <providers>
+ <ftp-provider name="FTP" hostname="localhost:21">
+ <ftp-bus busid="FTPbus">
+ <ftp-message-filter directory="/directory/####" username="user:##user" password="password:##password"/>
+ </ftp-bus>
+ </ftp-provider>
+ </providers>
+
+ <services>
+ <service category="Test" name="FTPTest" description="FTP escaping Test">
+ <listeners>
+ <ftp-listener name="FtpMapperListener" busidref="FTPbus" is-gateway="true"/>
+ </listeners>
+ </service>
+ </services>
+</jbossesb>
Property changes on: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/jbossesb_config_escaping.xml
___________________________________________________________________
Name: svn:mime-type
+ text/xml
Name: svn:keywords
+ Rev Date
Name: svn:eol-style
+ native
More information about the jboss-svn-commits
mailing list