CXF 获取SoapHeader问题

离合不骚 发布于 2012/07/12 17:28
阅读 4K+
收藏 8

请教大家一个关于CXF获取SoapHeader的问题:

       产品中需要实现电信的ISAG服务端,因为CXF和Spring的集成比较方便所以产品中的WebService一直都使用CXF,目前遇到一个问题,就是如何获取SoapHeader,网上找了一下都是通过拦截器方式获取和解析的,但是这样的话该怎么把SoapHeader中的数据传递到到后面的方法中去呢。求解决方案。

加载中
0
离合不骚

翻了半天的强终于找到了。分享下,以后的同学就不用fang墙了

先在接口实现类中注入

@Resource
private WebServiceContext context;

使用下面代码即可获取

Map<String, Object> headers = context.getMessageContext();
List<Header> headerList = (List<Header>)headers.get(Header.HEADER_LIST);
for (Header header : headerList) {
 Node root = (Node) header.getObject();
System.out.println("soap header name:" + root.getNodeName() + " text:" + root.getTextContent());
			if("RequestSOAPHeader".equals(root.getNodeName())){
NodeList list = root.getChildNodes();
int size = list.getLength();
for(int i=0;i<size;i++){
Node node = list.item(i);
System.out.println("soap header name:" + node.getNodeName() + " text:" + node.getTextContent());
}
}
}

0
Emirate.Yang
Emirate.Yang

谢谢你的解决方案。

你知道为什么从inInterceptor中取不到header信息呢?

0
R
Randy.Su

引用来自“Emirate.Yang”的答案

谢谢你的解决方案。

你知道为什么从inInterceptor中取不到header信息呢?

貌似只能取整个报文的信息,再取header的节点。

还有,楼主的方法,我现在取到的header里头内容是空的,名字可以取到,就是没内容,奇怪了?!

0
y
yonglongwang
3Q ~ 正好 解决问题
0
zhuaone
zhuaone

引用来自“Txijin”的评论

翻了半天的强终于找到了。分享下,以后的同学就不用fang墙了

先在接口实现类中注入

@Resource
private WebServiceContext context;

使用下面代码即可获取

Map<String, Object> headers = context.getMessageContext();
List<Header> headerList = (List<Header>)headers.get(Header.HEADER_LIST);
for (Header header : headerList) {
 Node root = (Node) header.getObject();
System.out.println("soap header name:" + root.getNodeName() + " text:" + root.getTextContent());
			if("RequestSOAPHeader".equals(root.getNodeName())){
NodeList list = root.getChildNodes();
int size = list.getLength();
for(int i=0;i<size;i++){
Node node = list.item(i);
System.out.println("soap header name:" + node.getNodeName() + " text:" + node.getTextContent());
}
}
}

你好,我用了这个代码,为什么取到的 headerList 是个空列表呢?是否还有哪里需要设置的吗?

z
zhangyanbin46
你好,我也碰到 这个问题,最后是怎么解决的?知道的话,麻烦告诉下,谢谢
返回顶部
顶部