org.apache.cxf.binding.soap.SoapHeader无法强制转换为org.apache.cxf.binding.soap.SoapHeader

时间:2014-03-25 12:32:28

标签: java maven jboss soapheader

我在JBOSS EAP 6.2上安装了一个WebService。当我想要获取SOAP标头时出现问题。

代码,引发异常的地方:

 ArrayList<SoapHeader> hl = (ArrayList<SoapHeader>) wsctx.getMessageContext().get("org.apache.cxf.headers.Header.list");
    String username = "";
    String password = "";

    for (int i = 0; i < hl.size(); i++) { //for(SoapHeader header : hl) gives this same exception
        SoapHeader header = hl.get(i);
        //here is fetching data from this header. Not important to this case.
    }

我知道它并不是很漂亮,但我真的很有兴趣在这种方法中获取标题和异常:

hl.get(i)

异常信息是:

 org.apache.cxf.binding.soap.SoapHeader cannot be cast to org.apache.cxf.binding.soap.SoapHeader

起初我在Maven的POM文件中考虑了错误的版本,所以:

    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-bindings-soap</artifactId>
        <version>2.4.2</version>
    </dependency>

但我觉得它很好用。

所以我的问题:如何避免它?谁能帮我?感谢

2 个答案:

答案 0 :(得分:2)

可能存在间接依赖。您的一个模块或库也可能具有依赖关系org.apache.cxf

尝试确定是否有多个版本。最简单的方法是检查所有目标目录并找到所有的罐子。然后比较版本并排除不正确的版本

  <exclusions>
    <exclusion>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-bindings-soap</artifactId>
      <version>2.4.2</version>
    </exclusion>
  </exclusions>

JBoss也可能以某种方式拥有库。

答案 1 :(得分:0)

找到解决方案,只需添加其他库,而不是通常的apache-cxf绑定:

    <dependency>
        <groupId>org.jboss</groupId>
        <artifactId>jboss-jaxws</artifactId>
        <version>2.0.1.SP2</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.ws.cxf</groupId>
        <artifactId>jbossws-cxf-server</artifactId>
        <version>4.2.0.Alpha1</version>
        <scope>provided</scope>
    </dependency>