`
solemichael
  • 浏览: 2968 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

weblogic上部署的webservice通信添加soap头总结

阅读更多
   我们项目里面用到了webservice服务,用axis2做的,比如两个系统在使用webservice通信的时候,需要在soap里面添加一个soap头,里面有username和password,用于安全校验。不过最近项目开发遇到一个难题,就是webservice服务端总是报用户名密码错,不过最后还是解决出来了,在这里与大家分享一下经验,这是小生第一次发文章,请不要喷水, 谢谢...
    我们写程序的时候一般都是使用Eclipse编程,使用的tomcat服务,但是我们的项目是发布在weblogic上面的,问题就出现在这里,weblogic有自己的特性,我们在tomcat里面添加soap头的代码如下:
RPCServiceClient serviceClient = new RPCServiceClient();
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("namespace", "");
SOAPFactory sfac = OMAbstractFactory.getSOAP12Factory();
SOAPHeaderBlock omUserName = sfac.createSOAPHeaderBlock("username", omNs) ;
omUserName.setText(userName);
SOAPHeaderBlock omPassword = sfac.createSOAPHeaderBlock("password", omNs) ;
omPassword.setText(password);
serviceClient.addHeader(omUserName);
serviceClient.addHeader(omPassword);

这上面这个soap头从tomcat里面发出去过后,发过去的XML里面的username和password的namespace都存在,但是部署在weblogic上面后,再发送xml给服务端的时候,username里面的namespace存在,但是password里面就没有namespace了,服务器端获取不到password,一顿报用户名或密码错误 。后来我们使用各种添加soap头的方式,各种不好使 ,直到我们使用了一种最不像成功的方式——添加stringheader。代码如下:
QName headerUn= new QName("namespace","username","");
QName hreadrps= new QName("namespace","password","");
serviceClient.addStringHeader(headerUn, userName);
serviceClient.addStringHeader(hreadrps, password);

开始我们把这个soap头的xml打印出来看了下,感觉与之前的格式差别很大,没对这种方式报多大的信心,结果还真是只有这一种方式好使,哎。不知道有没有精通webservice通信的老师,来给小生解解迷惑呀 ,刚入道不久,还请各位海涵......
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics