我正在构建一个 Java + Spring Web 客户端,该客户端接收 XML 并将其解码为自动生成的类,基于我正在联系的服务提供的模式。
自动生成的代码包含一个返回 Element
对象的 getter。为了处理这个对象,我将它转换为 ElementNSImpl
。
public Element getThing() {
return thing;
}
ElementNSImpl element = (ElementNSImpl) obj.getThing();
element.doSomething();
但是,对于
ElementNSImpl
类,我有两个可用的资源:com.sun.org.apache.xerces.internal.dom.ElementNSImpl
和
org.apache.xerces.dom.ElementNSImpl
我也有两个环境(测试和生产)。
测试机运行 CentOS Linux 7 和 OpenJDK 1.8.0_161。
生产机器运行 SUSE Linux Enterprise Server 11 SP4 和 Oracle JDK。
我遇到的问题是,当我在测试环境中运行代码时,出现以下异常:
com.sun.org.apache.xerces.internal.dom.ElementNSImpl cannot be cast to org.apache.xerces.dom.ElementNSImpl
因此,我修改了我的类(class)以导入
com.sun.org.apache.xerces.internal.dom.ElementNSImpl
而不是 org.apache.xerces.dom.ElementNSImpl
,瞧,它开始工作了!然后我将相同的 JAR 上传到生产环境,出现以下异常:
org.apache.xerces.dom.ElementNSImpl cannot be cast to com.sun.org.apache.xerces.internal.dom.ElementNSImpl
似乎每个程序都以不同的方式解码 XML,甚至认为两个代码完全相同。
我还必须通知正在联系的测试和生产服务器都是 与 不同。他们应该是相同的并且行为方式相同(根据他们的支持团队)。只有不同的数据库。
这个问题可能与我的申请有关吗?或者它可能与我从服务器获取的文件有关?它可能是 OpenJDK 的东西吗?
最佳答案
正如@lexicore 指出的那样,我不需要 ElementNSImpl
。只需将目标对象更改为 Element
并删除类型转换即可解决问题。
编辑:我仍然想了解那里发生了什么。
关于java - 在不同环境中转换 ElementNSImpl 的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49263195/