我已经从SOAP服务下载了Soap消息,并试图通过返回下载的消息来模拟Soap服务。以下代码显示了我如何将Soap消息解组到所需的Response中
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();
}
但是我一直得到这个ClassCastExeption,它是随机发生的。经过多次测试迭代后,它开始发生。有时清理并修复它,但有时不起作用。
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编译器配置中使用认可的文件夹,但是仍然会发生
有什么想法可能导致它以及可能的解决方案?
感谢你
用以下代码解决
@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
问题内容: 为什么写: 问题答案: 实现的对象是。 您要在其中覆盖的方法应将对象作为参数,而将其强制转换为。您的实现应描述如何与另一个进行比较。 要真正进行排序,您可能还需要制作工具,然后将实际逻辑复制粘贴到其中。
问题内容: 我当前正在使用条件来检索用户的详细信息,但是当尝试用合适的用户查询详细信息对象时,我得到了ClassCastException。 我的标准代码; 我也尝试使用; 两者都给我ClassCastException。我知道我可以通过让用户实现Serializable来轻松解决它,但是还有其他解决方案吗? 问题答案: 唯一的其他解决方案是实现Externalizable。
我已经从SOAP服务下载了Soap消息,并试图通过返回下载的消息来模拟Soap服务 然而,我不断得到这个随机发生的ClassCastExection。在多次测试迭代之后,它开始发生。有时清理和构建可以修复它,但有时不起作用。 我曾尝试过其他在线建议,比如恢复到旧的jaxb版本,并在maven编译器配置中使用认可的文件夹,但这种情况仍然存在 对可能的原因和可能的解决方案有什么想法吗? 谢谢你了
问题内容: 我有一个SOAP Web服务,正在尝试在应用程序内部调用。我正在使用cxf-codegen-plugin(3.1.10)从WSDL生成源。 使用生成的客户端,如果我在应用程序内调用Web服务,则效果很好。但是,我还针对导致问题的应用程序中的同一软件包使用了另一个JAXB实例。 例如,以下代码很好用: 但是,在此之前初始化一个新的JAXB实例会导致调用失败: 使用以下堆栈跟踪: 我试着接
问题内容: 我已经编写了一个通用类,下面是该类的构造函数。我想像这样写 由于我不知道运行时的泛型类型,因此它将引发异常。 有什么办法解决这些问题?E的声明是 这就是我要打电话的方式 更新 家伙,谢谢您的帮助。我在搞泛型,所以问题就被创建了。这是所有导致问题的代码- 更新2 :似乎除了传递下面的答案中提到的类类型外,我们无法做到这一点。 问题答案: 这是重现异常所需的最最少的代码。 Java泛型使用
问题内容: 在我的应用程序中,我为gcm ccs(xmpp)运行这些代码,并且代码显示以下错误执行时发生错误 这是代码: 问题答案: 您如何申报?我想它是简单的,如果是这样,请将其更改为: 此异常的原因与以下代码中发生的原因类似: Java中的VarArgs是作为数组实现的,因此,当您将sendTask声明为as时,编译器将使用with进行调用,但是当您将then 声明为then 时,则将使用wi