我在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>
但我觉得它很好用。
所以我的问题:如何避免它?谁能帮我?感谢
答案 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>