当前位置: 首页 > 知识库问答 >
问题:

带有JAXB Random ClassCastException的Netbeans。。无法转换为com。太阳xml。绑定v2。运行时。反映存取器

黄凌龙
2023-03-14

我已经从SOAP服务下载了Soap消息,并试图通过返回下载的消息来模拟Soap服务

    public static DataClientType unmarshallFile(String fileName) throws Exception {
    XMLInputFactory xif = XMLInputFactory.newFactory();
    XMLStreamReader xsr = xif.createXMLStreamReader(ClientSampleSoapResponseData.class.getResourceAsStream(fileName));
    xsr.nextTag(); // Advance to Envelope tag
    xsr.nextTag(); // Advance to Header
    xsr.nextTag(); // Advance to Body tag
    xsr.nextTag(); // Advance to getClientByAccountResponse
    xsr.nextTag(); // Advance to content of getClientByAccountResponse

    JAXBContext jc = JAXBContext.newInstance(GetClientByAccountResponse.class);
    Unmarshaller unmarshaller = jc.createUnmarshaller();
    JAXBElement<GetClientByAccountResponse> je = unmarshaller.unmarshal(xsr, GetClientByAccountResponse.class);

    return je.getValue().getClientDataContract();
}

然而,我不断得到这个随机发生的ClassCastExection。在多次测试迭代之后,它开始发生。有时清理和构建可以修复它,但有时不起作用。

java.lang.ClassCastException: com.x.X.X.X.GetClientByAccountResponse$JaxbAccessorF_clientDataContract cannot be cast to com.sun.xml.bind.v2.runtime.reflect.Accessor
at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.instanciate(OptimizedAccessorFactory.java:188)
at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:180)
at com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Accessor.java:256)
at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:90)

我曾尝试过其他在线建议,比如恢复到旧的jaxb版本,并在maven编译器配置中使用认可的文件夹,但这种情况仍然存在

对可能的原因和可能的解决方案有什么想法吗?

谢谢你了

共有3个答案

仉刚洁
2023-03-14

我在一个应用程序中遇到了同样的问题。在我的例子中,该项目使用的是一个与Java 1.5兼容的库,而主项目与版本1.6兼容。当我将两者都改为使用1.6时,问题就消失了。我希望这将能够帮助一些人,因为这个问题可能非常令人沮丧,难以追踪。

松铭
2023-03-14

我在尝试将JAXB升级到比JDK更新的版本时遇到了同样的错误。Java在运行时遇到两个或多个JAXB实例,无法决定使用哪个版本。

在我的例子中,问题是我的应用程序使用了网络服务,而且我还没有外部化JAX-WS。应用程序开始使用com.sun.xml.bind.v2.runtime类,但是当它开始使用WSDL文件时,内部JAX-WS试图调用com.sun.xml.internal.bind.v2.runtime类。当我下载并安装JAX-WS时,错误消失了,我能够继续升级。

桑璞
2023-03-14

用以下代码解决

@BeforeClass
public static  void init(){ 
    System.setProperty( "com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize", "true");
}

@AfterClass
public static void revert(){ 
    System.getProperties().remove("com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize");
}    

参数也可以在JVM上使用

-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true
 类似资料:
  • 我们遇到了一个JaxB类加载问题,正如JaxB classCastException所强调的那样。 为了解决这个问题,我添加了com。太阳xml。绑定v2。字节码。班级裁缝。noOptimize=true,这实际上解决了这个问题。 然而,我了解到,这将禁用Jaxb直接与字节码交互并通过Java反射API的能力,因此在通过“JAXBContext.newInstance”初始化新的Jaxb上下文时,

  • 我正试图将类从版本更新到更新的版本,以便与兼容,因为以下消息: JAVAlang.LinkageError:您正在尝试运行JAXB 2.0运行时(从jar:file:/opt/tomcat/appName/WEB-INF/lib/JAXB-runtime-2.3.1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class),但在类路径的前面有旧

  • 你可能认为下面的问题很简单,但我不知道我做错了什么。我觉得我添加了必需的依赖项。我没有吗? 谁能告诉我这里出了什么问题吗? 书JAVA ReadXMLFileJaxb.java 我的书。xml 波姆。xml

  • 问题内容: 我已经从SOAP服务下载了Soap消息,并试图通过返回下载的消息来模拟Soap服务。以下代码显示了我如何将Soap消息解组到所需的Response中 但是我一直得到这个ClassCastExeption,它是随机发生的。经过多次测试迭代后,它开始发生。有时清理并修复它,但有时不起作用。 我已经尝试了其他在线建议,例如恢复到旧的jaxb版本以及在maven编译器配置中使用认可的文件夹,但

  • 我正在将Spring Boot应用程序转换为Quarkus,作为概念证明。当我构建Quarkus应用程序并用Java运行它时,它运行良好,但当我尝试将其作为本机应用程序运行时,我在内部sun类(com.sun.xml.internal.ws.spi.ProviderImpl)上得到一个ClassNotFoundException,因为它在Java中运行,我希望本机应用程序也能工作。 我正在使用:

  • 我正在用python研究基本微积分和阶乘。试图从牛顿级数生成PI,但我不能超过171次迭代,因为这个错误:overflowerrror:int太大,无法转换为float。代码如下: 我导入了这个:从数学导入阶乘,gamma/从数学导入sqrt