Java - 由于缺少时区信息而导致UnresolvedAddressException?

时间:2010-02-16 14:15:19

标签: java timezone

我正在寻找解决UnresolvedAddressException的几天我无法理解! 这似乎是一个非常具有挑战性的问题,因为我甚至无法在网上找到其他信息! 我在JamVM上使用OSGi框架。 我在Calendar对象上使用Date.toString或SimpleDateFormat时遇到此异常。我无法理解为什么bundle在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

有人可以帮助我吗? 谢谢, 安德里亚 添加到andre26的声望

3 个答案:

答案 0 :(得分:3)

找到this link,其中讨论了通过切换到Felix 2.0.2版解决的类似问题。也许你可以尝试一下?

答案 1 :(得分:1)

如果不查看JamVM源代码很难确定,但堆栈跟踪告诉我在getZoneStrings内部尝试通过类加载器加载类或其他文件(因此调用ClassLoader和URLClassLoader三层向下栈)。

这种类加载尝试没有找到地址路径中的URL。这可能是因为你以后在类路径中遇到问题,因为它没有找到你放置类的文件,它会在下一个地方查找,它有一个UnresolvedAddressException(顺便说一句,这似乎是一个奇怪的违反规范,类加载器应该抛出它的检查异常。这里似乎GNU类路径让漏出的运行时异常应转换成异常,表明无法找到类),或者它可能就是那个是它无法找到资源时的作用。

至于找不到哪个类,它似乎是配置的ServiceProviders之一,可能是在GNU Classpath中:

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

以上是问题的核心。它正在查找提供程序,并尝试从类路径中获取可能不存在的资源。

如果不检查源代码,就不可能说出它究竟在寻找什么。幸运的是,您似乎正在使用所有开源资源,所以它应该很容易找到。

答案 2 :(得分:1)

谢谢JRL,你建议我在链接中发布的解决方案解决了这个问题! 我不能指望这样的felix错误,因为我以为我已经在相同的平台和相同的条件下使用了日期和日历类!

总结解决方案:

  • 下载更新版本的felix(至少从2.0.2开始) - 从http://felix.apache.org/site/downloads.cgi获取名为Main的.jar(即OSGi框架的包)
  • 将其保存在当前felix.jar所在的bin /目录中
  • 将felix.jar重命名为felix.jar_old(关闭OSGi FX后如果正在运行!)
  • 将较新版本的felix(例如org.apache.felix.main-2.0.3.jar)重命名为felix.jar
  • 使用您的应用重新启动OSGi框架

希望这有助于其他人!
再见,
安德烈
(对不起第二个用户名...我很久以前注册但我忘记了谷歌识别!:-))