Fix #444 for mainline
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/FromStringDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/FromStringDeserializer.java
index 1ba46ac..510805f 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/std/FromStringDeserializer.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/FromStringDeserializer.java
@@ -15,6 +15,7 @@
 import com.fasterxml.jackson.databind.DeserializationContext;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.exc.InvalidFormatException;
 import com.fasterxml.jackson.databind.util.ClassUtil;
 
@@ -116,15 +117,25 @@
                 // 04-Feb-2013, tatu: Usually should become null; but not always
                 return _deserializeFromEmptyString();
             }
+            Exception cause = null;
             try {
                 T result = _deserialize(text, ctxt);
                 if (result != null) {
                     return result;
                 }
             } catch (IllegalArgumentException iae) {
-                // nothing to do here, yet? We'll fail anyway
+                cause = iae;
             }
-            throw ctxt.weirdStringException(text, _valueClass, "not a valid textual representation");
+            String msg = "not a valid textual representation";
+            if (cause != null) {
+                msg += "problem: "+cause.getMessage();
+            }
+            JsonMappingException e = ctxt.weirdStringException(text, _valueClass, msg);
+            if (cause != null) {
+                e.initCause(cause);
+            }
+            throw e;
+            // nothing to do here, yet? We'll fail anyway
         }
         if (jp.getCurrentToken() == JsonToken.VALUE_EMBEDDED_OBJECT) {
             // Trivial cases; null to null, instance of type itself returned as is
@@ -238,8 +249,7 @@
 
                     int i = value.lastIndexOf(']');
                     if (i == -1) {
-                        throw new InvalidFormatException(
-                                "Bracketed IPv6 address must contain closing bracket.",
+                        throw new InvalidFormatException("Bracketed IPv6 address must contain closing bracket",
                                 value, InetSocketAddress.class);
                     }
 
@@ -247,15 +257,14 @@
                     int port = j > -1 ? Integer.parseInt(value.substring(j + 1)) : 0;
                     return new InetSocketAddress(value.substring(0, i + 1), port);
                 } else {
-                    int i = value.indexOf(':');
-                    if (i != -1 && value.indexOf(':', i + 1) == -1) {
+                    int ix = value.indexOf(':');
+                    if (ix >= 0 && value.indexOf(':', ix + 1) < 0) {
                         // host:port
-                        int port = Integer.parseInt(value.substring(i));
-                        return new InetSocketAddress(value.substring(0, i), port);
-                    } else {
-                        // host or unbracketed IPv6, without port number
-                        return new InetSocketAddress(value, 0);
+                        int port = Integer.parseInt(value.substring(ix+1));
+                        return new InetSocketAddress(value.substring(0, ix), port);
                     }
+                    // host or unbracketed IPv6, without port number
+                    return new InetSocketAddress(value, 0);
                 }
             }
             throw new IllegalArgumentException();
diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/TestJdkTypes.java b/src/test/java/com/fasterxml/jackson/databind/deser/TestJdkTypes.java
index 7353a69..ad3305d 100644
--- a/src/test/java/com/fasterxml/jackson/databind/deser/TestJdkTypes.java
+++ b/src/test/java/com/fasterxml/jackson/databind/deser/TestJdkTypes.java
@@ -266,9 +266,14 @@
         assertEquals(443, ip6port.getPort());
 
         // should we try resolving host names? That requires connectivity...
-        final String HOST = "www.ning.com";
+        final String HOST = "www.google.com";
         address = MAPPER.readValue(quote(HOST), InetSocketAddress.class);
         assertEquals(HOST, address.getHostName());
+
+        final String HOST_AND_PORT = HOST+":80";
+        address = MAPPER.readValue(quote(HOST_AND_PORT), InetSocketAddress.class);
+        assertEquals(HOST, address.getHostName());
+        assertEquals(80, address.getPort());
     }
 
     // [JACKSON-597]