2014-01-13 3 views
1

Контекст: Я очень опытный программист, но не очень опытный Java-программист.Java io.FileNotFoundException; подозрительный порт под вопросом

Я унаследовал небольшой кусок кода, который генерирует JNLP для переноса JAR, чтобы собрать некоторую информацию о клиентском компьютере. Это всегда отлично работало в контекстах, где порт не был явно указан в URL-адресе, но не работает в тестовой среде, где я должен явно указать порт.

Соответствующий код Java является:

URL RegURL = new URL(System.getProperty("jnlp.reg")); 
... 

try { 
    //Create connection 
    connection = (HttpURLConnection)RegURL.openConnection(); 
    connection.setRequestMethod("POST"); 
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length)); 
    connection.setRequestProperty("Content-Language", "en-US"); 
    connection.setUseCaches(false); 
    connection.setDoInput(true); 
    connection.setDoOutput(true); 

    //Send request 
    DataOutputStream wr = new DataOutputStream (connection.getOutputStream()); 
    wr.writeBytes (urlParameters); 
    wr.flush(); 
    wr.close(); 

    //Get Response 
    InputStream is = connection.getInputStream(); 
    ... 
} catch (Exception e) { 
    ... 
} finally { 
    ... 
} 

RegURL имеет значение формы "http://arthur.OURCOMPANY.com:81/fb/register.php", и я подтвердил, что это так. Но я получаю сообщение об ошибке на стороне клиента:

java.io.FileNotFoundException: http://arthur.OURCOMPANY.com/fb/register.php 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
    at main.main(main.java:253) 
    ... 

Это означает, что ошибка вызывается линией InputStream is = connection.getInputStream(); Я полагаю, это означает, что где-то по пути номер порта заблудился и он использует URL, который я бы , действительно, будут считаться недействительными. Однако я понятия не имею, почему номер порта будет потерян.

Любые идеи будут приветствоваться.

+1

Дважды проверьте свойство 'jnlp.reg' и что он по-прежнему имеет порт 81 в URL-адресе. –

+0

Ничего себе. Это не. И это было раньше, потому что у меня была отладка и проверили его. Пора разобраться в том, что здесь происходит. –

+0

Ох, я уверен, у меня есть: вызовы происходят в разных контекстах, а вызов, который запрашивает JNLP, будет создан локально, поэтому он не использует явный порт. Когда я тестировал компонент раньше, я вызывал PHP, который напрямую генерирует JNLP (то есть дает явный URL браузера). Я не уверен, как это сделать, потому что обратный вызов из Java почти наверняка должен сделать это с явным портом, но в этом его суть. Если вы хотите, вы можете написать что-то, что я могу принять в качестве ответа. –

ответ

0

Как указано в this answer, возможно, вы захотите установить User-Agent и Accept. Я предполагаю, что если вы используете нестандартный порт, URLConnection не может правильно угадать тип контента, который вы ожидаете получить.

-1

Он не имеет ничего общего с номером порта. Указанный URL не найден на сервере. Статус HTTP 404. Вы не можете получить это из неправильного номера порта: вы получите сообщение ConnectException.

+0

Он не был найден, потому что без номера порта это перешло на другой физический сервер, поэтому да, это было связано с номером порта. –