Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有JAXB Random ClassCastException..的Netbeans无法强制转换为com.sun.xml.bind.v2.runtime.reflect.Accessor_Java_Netbeans_Jaxb_Netbeans 7_Jaxb2 - Fatal编程技术网

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

Java 带有JAXB Random ClassCastException..的Netbeans无法强制转换为com.sun.xml.bind.v2.runtime.reflect.Accessor,java,netbeans,jaxb,netbeans-7,jaxb2,Java,Netbeans,Jaxb,Netbeans 7,Jaxb2,我已经从Soap服务下载了Soap消息,并试图通过返回下载的消息来模拟Soap服务。下面的代码显示了如何将Soap消息解组为所需的响应 public static DataClientType unmarshallFile(String fileName) throws Exception { XMLInputFactory xif = XMLInputFactory.newFactory(); XMLStreamReader xsr = xif.createXMLStr

我已经从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();
}
publicstaticdataclienttype解组文件(字符串文件名)引发异常{
XMLInputFactory xif=XMLInputFactory.newFactory();
XMLStreamReader xsr=xif.createXMLStreamReader(clientSampleSoapResponsTa.class.getResourceAsStream(文件名));
xsr.nextTag();//前进到信封标记
xsr.nextTag();//前进到页眉
xsr.nextTag();//前进到Body标记
xsr.nextTag();//前进到getClientByAccountResponse
xsr.nextTag();//前进到getClientByAccountResponse的内容
JAXBContext jc=JAXBContext.newInstance(GetClientByAccountResponse.class);
Unmarshaller Unmarshaller=jc.createUnmarshaller();
JAXBElement je=unmarshaller.unmarshal(xsr,GetClientByAccountResponse.class);
返回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)
java.lang.ClassCastException:com.x.x.x.GetClientByAccountResponse$JaxbAccessorF_clientDataContract无法强制转换为com.sun.xml.bind.v2.runtime.reflect.Accessor
位于com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.Instanceate(OptimizedAccessorFactory.java:188)
位于com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:180)
位于com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Accessor.java:256)
位于com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty。(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

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

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


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

在运行时通过父pom中的依赖关系管理器包含jaxbiimpl jar将解决此问题。此解决方案特定于maven项目。

在Intellij中接受的解决方案对我有效,但在从命令行运行maven时,我遇到了相同的错误。将此添加到
maven surefire插件的配置中
也解决了该问题:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <systemPropertyVariables>
                    <com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize>true</com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize>
                </systemPropertyVariables>
            </configuration>
        </plugin>

org.apache.maven.plugins
maven surefire插件
真的

我从build.sbt中删除了对单独的jaxb impl jar的依赖。现在可以了。

我也有类似的问题,但我没有/没有依赖性(-version mismatch)-问题

在我的例子中,一个类缺少一个,添加这个注释解决了我的问题。根据您的情况,解决方案是:

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

@XmlAccessorType(XmlAccessType.FIELD) // check, if @XmlAccessorType is missing
public class GetClientByAccountResponse {
  ..

在我的例子中,问题是我的应用程序使用了web服务和spring数据。我排除了工件
org.glassfish.jaxb
,它包含
com.sun.xml.bind.v2.runtime.reflect.Accessor
类和我的
pom.xml
中的其他类:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.glassfish.jaxb</groupId>
      <artifactId>jaxb-runtime</artifactId>
    </exclusion>
  </exclusions>
</dependency>

org.springframework.boot
spring引导启动器数据jpa
org.glassfish.jaxb
jaxb运行时

这是我的工作

@TheDownVoter如果你要在投票人的问题上四处走动,至少提供一个理由或建议!记住,我们并不像你想象的那么聪明。哇!你在这个解决方案上帮了我很多忙!你检查过为什么这个优化会引起这么多麻烦吗?没有。问题解决后继续,但我怀疑这与jdk版本有关。ruslan5t,是的,这是一个只隐藏真实问题的解决方法。有人能分享一下为什么这个答案被否决吗?并不是说我知道、理解或相信它是正确的,只是我看不出它的表面为什么是错误的。这对我从命令行运行maven有效,但对Jenkins无效。你知道问题出在哪里吗?对不起,我不知道。你能分享更多关于如何安装JAX-WS的详细信息吗?这和将jax-ws-lib放在类路径上一样简单吗?@asgs差不多。我相信JAX-WS附带了16个JAR,其中2-4个与JAX-B相关。我将所有JAR添加到我的运行时类路径中,错误得到了解决。无可否认,这件事已经过去四年了,我记不清确切的细节了。我几乎只记得我最初的问题是外部JAX-B称为内部JAX-WS,然后称为内部JAX-B。这是一个耦合问题。如果您使用的是Maven,那么添加jaxws rt(运行时jar)对我有帮助。注意:我添加它只是为了我的测试范围