thread protocol net for java uri malformedurlexception

thread - java net malformedurlexception no protocol ${ client url



java.net.MalformedURLException: no hay protocolo en URL basado en una cadena modificada con URLEncoder (3)

Así que intenté usar esta cadena en una URL: -

http://site-test.collercapital.com/Meetings/IC/DownloadDocument?meetingId=c21c905c-8359-4bd6-b864-844709e05754&itemId=a4b724d1-282e-4b36-9d16-d619a807ba67&file=//s604132shvw140/Test-Documents/c21c905c-8359-4bd6-b864-844709e05754_attachments/7e89c3cb-ce53-4a04-a9ee-1a584e157987/myDoc.pdf

En este código: -

String fileToDownloadLocation = //The above string URL fileToDownload = new URL(fileToDownloadLocation); HttpGet httpget = new HttpGet(fileToDownload.toURI());

Pero en este punto me sale el error:

java.net.URISyntaxException: Illegal character in query at index 169:Blahblahblah

Me di cuenta de que con un poco de googlear, esto se debía a los caracteres en la URL (adivinando el &), por lo que luego agregué algo de código para que ahora parezca:

String fileToDownloadLocation = //The above string fileToDownloadLocation = URLEncoder.encode(fileToDownloadLocation, "UTF-8"); URL fileToDownload = new URL(fileToDownloadLocation); HttpGet httpget = new HttpGet(fileToDownload.toURI());

Sin embargo, cuando intento ejecutar esto, aparece un error cuando intento crear la URL, luego el error dice:

java.net.MalformedURLException: no protocol: http%3A%2F%2Fsite-test.collercapital.com%2FMeetings%2FIC%2FDownloadDocument%3FmeetingId%3Dc21c905c-8359-4bd6-b864-844709e05754%26itemId%3Da4b724d1-282e-4b36-9d16-d619a807ba67%26file%3D%5C%5Cs604132shvw140%5CTest-Documents%5Cc21c905c-8359-4bd6-b864-844709e05754_attachments%5C7e89c3cb-ce53-4a04-a9ee-1a584e157987%myDoc.pdf

Parece que no puedo hacer la codificación hasta que haya creado la URL, de lo contrario, reemplaza las barras y cosas que no debería, pero no puedo ver cómo puedo crear la URL con la cadena y luego formatearla. Es adecuado para su uso. No estoy muy familiarizado con todo esto y esperaba que alguien pudiera señalarme lo que me falta para obtener la cadena A en una URL con el formato adecuado para luego usarla con los caracteres correctos reemplazados.

Cualquier sugerencia muy apreciada!


Debe codificar los valores de su parámetro antes de concatenarlos a URL.
La barra invertida / es un carácter especial que debe ser escapado como %5C

Ejemplo de escape:

String paramValue = "param//with//backslash"; String yourURLStr = "http://host.com?param=" + java.net.URLEncoder.encode(paramValue, "UTF-8"); java.net.URL url = new java.net.URL(yourURLStr);

El resultado es http://host.com?param=param%5Cwith%5Cbackslash que tiene el formato correcto de la cadena url.


Desea utilizar plantillas URI . Mire detenidamente el URLEncoder.encode() README de este proyecto: URLEncoder.encode() NO funciona para los URI.

Permítanos llevar su URL original:

http://site-test.as.collercapital.com/Meetings/IC/DownloadDocument?meetingId=Pay.png.asp.as.png.asp.cgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggb -4bd6-b864-844709e05754_attachments / 7e89c3cb-ce53-4a04-a9ee-1a584e157987 / myDoc.pdf

y conviértalo en una plantilla de URI con dos variables (en varias líneas para mayor claridad):

http://site-test.collercapital.com/Meetings/IC/DownloadDocument ?meetingId={meetingID}&itemId={itemID}&file={file}

Ahora construyamos un mapa de variables con estas tres variables usando la biblioteca mencionada en el enlace:

final VariableMap = VariableMap.newBuilder() .addScalarValue("meetingID", "c21c905c-8359-4bd6-b864-844709e05754") .addScalarValue("itemID", "a4b724d1-282e-4b36-9d16-d619a807ba67e") .addScalarValue("file", "////s604132shvw140//Test-Documents" + "//c21c905c-8359-4bd6-b864-844709e05754_attachments" + "//7e89c3cb-ce53-4a04-a9ee-1a584e157987//myDoc.pdf") .build(); final URITemplate template = new URITemplate("http://site-test.collercapital.com/Meetings/IC/DownloadDocument" + "meetingId={meetingID}&itemId={itemID}&file={file}"); // Generate URL as a String final String theURL = template.expand(vars);

¡Esto está GARANTIZADO de devolver una URL completamente funcional!


Tengo el mismo problema, leí la url con un archivo de propiedades:

String configFile = System.getenv("system.Environment"); if (configFile == null || "".equalsIgnoreCase(configFile.trim())) { configFile = "dev.properties"; } // Load properties Properties properties = new Properties(); properties.load(getClass().getResourceAsStream("/" + configFile)); //read url from file apiUrl = properties.getProperty("url").trim(); URL url = new URL(apiUrl); //throw exception here URLConnection conn = url.openConnection();

dev.properties

url = "https://myDevServer.com/dev/api/gate"

debería ser

dev.properties

url = https://myDevServer.com/dev/api/gate

sin "" y mi problema está resuelto.

Según la documentation oracle.

  • Se lanza para indicar que se ha producido una URL con formato incorrecto. No se pudo encontrar un protocolo legal en una cadena de especificación o la cadena no se pudo analizar.

Así que significa que no se analiza dentro de la cadena.