【发布时间】:2011-12-01 13:40:17
【问题描述】:
我正在尝试使用 REPL 来测试我的 java 代码。我已经设置了我的类路径并启动了 REPL,我可以在 REPL 中访问我的应用程序类。
我启动了一个调用 web 服务的方法,它抛出了 java.lang.ClassCastException。我编写了一个 java 程序,它与在 REPL 中输入的一系列命令执行相同的操作,并使用相同的类路径运行它,它运行没有问题并给出结果。
关于为什么它不在 scala 下运行的任何线索? scala 中的强制转换规则是否严格?如果我使用的是我无法控制的 API,我怎么能告诉 Scala 表现得像 java,这样我就可以测试我的方法,这些方法会进行很多 API 调用和别人写的代码。
java.lang.ClassCastException: weblogic.webservice.encoding.ImageCodec cannot be cast to weblogic.xml.schema.binding.Serializer
at weblogic.xml.schema.binding.internal.XSDTypeMapping.addOptionalEntries(XSDTypeMapping.java:762)
at weblogic.xml.schema.binding.internal.XSDTypeMapping.createOptionalMapping(XSDTypeMapping.java:665)
at weblogic.xml.schema.binding.internal.XSDTypeMapping.createPrimaryMapping(XSDTypeMapping.java:655)
at weblogic.xml.schema.binding.internal.XSDTypeMapping.createInstance(XSDTypeMapping.java:138)
at weblogic.xml.schema.binding.internal.XSDTypeMapping.<clinit>(XSDTypeMapping.java:118)
at weblogic.xml.schema.binding.internal.TypeMappingFactoryBase.createDefaultMapping(TypeMappingFactoryBase.java:18)
at weblogic.webservice.core.encoding.DefaultRegistry.<init>(DefaultRegistry.java:110)
at weblogic.webservice.core.encoding.DefaultRegistry.<init>(DefaultRegistry.java:37)
at weblogic.webservice.core.rpc.ServiceImpl.<init>(ServiceImpl.java:91)
由于很多人都要求源代码来回答这个问题,这里是我在 scala REPL 中输入的 sn-p。它进行受版权保护且无法在此处共享的 API 调用,我可以在不违反规范的情况下回答问题以提供有关此问题的更多信息。
val clientManager=new ClientManager()
val client=clientManager.getClient(<clientId>)
/*client location is stored in another system which exposes its data as a webservice.
We use weblogic tools to compile the WSDL to create client (Web service client, not to
be confused with the client object which represent a customer) to access the system
hosting the data*/
val res=client.getLocation //exception is thrown at this line where a web-service call is made
我做了一些不同的事情,这次我得到了一个完全不同的例外
而不是使用val res=client.getLocation 我使用client.getLocation 而不将其分配给变量,这次抛出的异常是
java.lang.NoClassDefFoundError: Could not initialize class weblogic.xml.schema.binding.internal.XSDTypeMapping
at weblogic.xml.schema.binding.internal.TypeMappingFactoryBase.createDefaultMapping(TypeMappingFactoryBase.java:18)
at weblogic.webservice.core.encoding.DefaultRegistry.<init>(DefaultRegistry.java:110)
at weblogic.webservice.core.encoding.DefaultRegistry.<init>(DefaultRegistry.java:37)
at weblogic.webservice.core.rpc.ServiceImpl.<init>(ServiceImpl.java:91)
我使用 -nobootcp 选项运行解释,它运行时没有抛出任何上述异常,但在这两种情况下我得到的结果都是 null
任何人使用 Scala REPL 测试从 weblogic 10.3 生成的存根编写的客户端并成功使用它?
【问题讨论】:
-
为什么这被否决了?我没有找到任何有效的 cmets 或拒绝投票的理由。我已经验证我正确设置了类路径和所有设置,我不确定为什么我只在 Scala REPL 中得到这个异常。我是 scala 的新手,只是尝试使用它。任何 cmets 或回复都会有所帮助,请提供一些提示,说明您认为此问题不正确或无效的原因
-
包含一些代码....仅堆栈跟踪是不够的
-
嗨,我无法包含剩余的代码,因为它们受版权保护,并且它们是我们客户特定的 API。我想堆栈跟踪中有足够的信息。我们正在尝试将 weblogic.webservice.encoding.ImageCodec 转换为不允许的 weblogic.xml.schema.binding.Serializer。但是,当从具有相同类路径的 java main 方法调用时,相同的 API 调用不会产生此类强制转换异常。包 weblogic.* 是 weblogic API 的一部分,我们已将它们包含在类路径中。
-
进行强制转换的是 JVM。我最好的猜测是 Java 正在使用一些自定义类加载器。
-
我没有在 java 中使用任何自定义类加载器。我刚刚编写了一个 main 方法,其中包含我在 Scala REPL 中输入并执行它的相同命令集。无论如何,我会检查类加载,看看是否有问题。