相关疑难解决方法(0)

具有JAXB Random ClassCastException的Netbeans ..无法强制转换为com.sun.xml.bind.v2.runtime.reflect.Accessor

我从SOAP服务下载了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();
}
Run Code Online (Sandbox Code Playgroud)

但是我继续得到随机发生的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)
Run Code Online (Sandbox Code Playgroud)

我已经尝试过其他在线建议,例如恢复旧的jaxb版本并在maven编译器配置中使用已签名的文件夹,但它仍然会发生

关于什么可能导致它和可能的解决方案的任何想法? …

java netbeans jaxb jaxb2 netbeans-7

21
推荐指数
2
解决办法
1万
查看次数

来自Webservice的JAXB类编组错误

我有一些wsimport生成的JAXB类

wsimport -d src/main/java -keep -extension
  -p my.package
  http://www.OpenLigaDB.de/Webservices/Sportsdata.asmx?WSDL
Run Code Online (Sandbox Code Playgroud)

我将演示这个类的问题(我自己只添加了@XmlRootElement):

package my.package;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Sport", propOrder = {"sportsID","sportsName"})
@XmlRootElement(name = "sport")   //Added by myself
public class Sport
{
    protected int sportsID;
    protected String sportsName;

    public int getSportsID() {return sportsID;}
    public void setSportsID(int value) {this.sportsID = value;}

    public String getSportsName() {return sportsName;}
    public void setSportsName(String value) {this.sportsName = value;}
}
Run Code Online (Sandbox Code Playgroud)

直接实例化和编组工作正常(例1)

Sport sport = new Sport();
sport.setSportsID(1);
sport.setSportsName("test");

JAXBContext jc …
Run Code Online (Sandbox Code Playgroud)

java jax-ws jaxb

7
推荐指数
1
解决办法
1万
查看次数

com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize 的用法和性能

我们遇到了 JaxB 类加载问题,如Jaxb classCastException所突出显示的那样。

为了解决这个问题,我添加了com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true,这实际上解决了问题。

然而,我读到这将禁用 Jaxb 直接与字节码交互并通过 Java Reflection API 的能力,因此在通过“ JAXBContext.newInstance ”初始化新的 Jaxb 上下文时可能会对性能产生轻微影响。

为了测试性能,我添加了一个简单的方法,该方法在 for 循环中调用 JAXBContext.newInstance 约 500 次。我用 flag=true 和 =false 运行了这个。

在最坏的情况下,我发现每次调用的平均性能影响仅为 3.5 毫秒左右。

有没有人遇到过类似的问题并尝试过上述修复?你的发现是什么?我找不到有关com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize的太多信息。您能否分享有关其行为和影响的更多信息?

java xml compilation jaxb compiler-optimization

7
推荐指数
1
解决办法
7129
查看次数