Java - UnresolvedAddressException из-за отсутствия информации о часовом поясе? - PullRequest
1 голос
/ 16 февраля 2010

Я ищу несколько дней для решения UnresolvedAddressException, которое я не могу найти! Кажется, это довольно сложная проблема, так как я даже не мог найти другую информацию в сети! Я работаю с OSGi Framework на JamVM. Я получаю это исключение при использовании Date.toString o SimpleDateFormat для объекта Calendar. Я не могу понять, почему пакет пытается подключиться после функции getZoneStrings. Кажется, он не может найти язык, но я не уверен, что это проблема. Я попытался добавить файл / etc / timezone (который отсутствовал), но это не решило проблему. Вот полная трассировка стека исключения:

adsdebian:/usr/local/bundle# org.osgi.framework.BundleException: Activator start error in bundle zApp_RoadPricing [24].
at org.apache.felix.framework.Felix.startBundle(Felix .java:1506)
at org.apache.felix.framework.BundleImpl.start(Bundle Impl.java:774)
at org.apache.felix.shell.impl.StartCommandImpl.execu te(StartCommandImpl.java:105)
at org.apache.felix.shell.impl.Activator$ShellService Impl.executeCommand(Activator.java:291)
at org.apache.felix.shell.remote.Shell.run(Shell.java :109)
at java.lang.Thread.run(Thread.java:743)
Caused by: java.nio.channels.UnresolvedAddressException
at gnu.java.nio.SocketChannelImpl.connect(SocketChann elImpl.java:160)
at gnu.java.net.PlainSocketImpl.connect(PlainSocketIm pl.java:281)
at java.net.Socket.connect(Socket.java:454)
at java.net.Socket.connect(Socket.java:414)
at gnu.java.net.protocol.http.HTTPConnection.getSocke t(HTTPConnection.java:719)
at gnu.java.net.protocol.http.HTTPConnection.getOutpu tStream(HTTPConnection.java:800)
at gnu.java.net.protocol.http.Request.dispatch(Reques t.java:291)
at gnu.java.net.protocol.http.HTTPURLConnection.conne ct(HTTPURLConnection.java:219)
at gnu.java.net.protocol.http.HTTPURLConnection.getHe aderField(HTTPURLConnection.java:582)
at java.net.URLConnection.getHeaderFieldInt(URLConnec tion.java:426)
at java.net.URLConnection.getContentLength(URLConnect ion.java:302)
at gnu.java.net.loader.RemoteURLLoader.getResource(Re moteURLLoader.java:79)
at java.net.URLClassLoader.findResources(URLClassLoad er.java:720)
at java.lang.ClassLoader.getResources(ClassLoader.jav a:640)
at gnu.classpath.ServiceFactory.lookupProviders(Servi ceFactory.java:286)
at java.util.ServiceLoader$1.hasNext(ServiceLoader.ja va:163)
at java.text.DateFormatSymbols.getZoneStrings(DateFor matSymbols.java:123)
at java.text.DateFormatSymbols.<init>(DateFormatSymbo ls.java:192)
at java.text.SimpleDateFormat.<init>(SimpleDateFormat .java:448)
at java.text.SimpleDateFormat.<init>(SimpleDateFormat .java:430)
at crf.opengate.app.roadpricing.RoadPricing.<init>(Ro adPricing.java:109)
at java.lang.reflect.Constructor.constructNative(Nati ve Method)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:328)
at java.lang.Class.newInstance(Class.java:1154)
at org.apache.felix.framework.Felix.createBundleActiv ator(Felix.java:3341)
at org.apache.felix.framework.Felix.startBundle(Felix .java:1453)
...5 more

Кто-нибудь может мне помочь, пожалуйста? Спасибо, Andrea Добавить в репутацию andre26

Ответы [ 3 ]

3 голосов
/ 16 февраля 2010

Найдена эта ссылка , в которой говорится о похожей проблеме, которая была решена путем перехода на версию Felix 2.0.2. Может быть, вы могли бы попробовать это?

1 голос
/ 16 февраля 2010

Спасибо, JRL, решение, опубликованное в предложенной мной ссылке, решило проблему!Я не мог ожидать такой ошибки в felix даже потому, что думал, что уже использовал классы Date и Calendar на той же платформе и в тех же условиях!

Просто подведите итог решения:

  • загрузите более новую версию felix (по крайней мере с 2.0.2) - с http://felix.apache.org/site/downloads.cgi получите .jar с именем Main (то есть комплект для платформы OSGi)
  • сохраните его вbin / каталог, в котором находится ваш текущий felix.jar
  • переименуйте felix.jar в felix.jar_old (после завершения работы OSGi FX, если он работает!)
  • переименуйте более новую версию felix (ex. org.apache.felix.main-2.0.3.jar) as felix.jar
  • перезапустите среду OSGi с вашим приложением

Надеюсь, это поможет кому-то еще!
Пока,
Андреа
(Извините за второе имя пользователя ... Я зарегистрировался довольно давно, но забыл об идентификации Google! :-))

1 голос
/ 16 февраля 2010

Трудно быть окончательным, не глядя на исходный код JamVM, но трассировка стека говорит мне, что внутри getZoneStrings есть попытка загрузить класс или другой файл через загрузчик классов (отсюда и вызов ClassLoader и URLClassLoader тремя слоями вниз по стек).

Эта попытка загрузки классов не находит адрес URL, который находится в пути к классам. Это может быть связано с тем, что позже у вас возникла проблема в вашем пути к классам, и поскольку он не нашел файл, в который вы помещаете ваши классы, он посмотрел в следующем месте, у которого было исключение UnresolvedAddressException (кстати, это выглядит странно нарушение спецификации, загрузчик классов должен выбросить проверенное исключение. Здесь кажется, что GNU classpath пропускает исключение времени выполнения, которое вместо этого должно быть преобразовано в исключение, указывающее, что класс не может быть найден), или это может быть просто это то, что он делает, когда не может найти ресурс.

Что касается того, какой класс не найден, то, похоже, это один из настроенных ServiceProviders, возможно, в GNU Classpath:

at gnu.classpath.ServiceFactory.lookupProviders(Servi ceFactory.java:286)

Выше изложено суть проблемы. Он ищет провайдера и попытался получить ресурс из пути к классам, который, вероятно, не существует.

Невозможно сказать, что именно он ищет, не изучив исходный код. К счастью, вы, кажется, используете все материалы с открытым исходным кодом, так что их должно быть довольно легко найти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...