我们项目里面用到了webservice服务,用axis2做的,比如两个系统在使用webservice通信的时候,需要在soap里面添加一个soap头,里面有username和password,用于安全校验。不过最近项目开发遇到一个难题,就是webservice服务端总是报用户名密码错,不过最后还是解决出来了,在这里与大家分享一下经验,这是小生第一次发文章,请不要喷水, :oops: 谢谢...
我们写程序的时候一般都是使用Eclipse编程,使用的tomcat服务,但是我们的项目是发布在weblogic上面的,问题就出现在这里,weblogic有自己的特性,我们在tomcat里面添加soap头的代码如下:
这上面这个soap头从tomcat里面发出去过后,发过去的XML里面的username和password的namespace都存在,但是部署在weblogic上面后,再发送xml给服务端的时候,username里面的namespace存在,但是password里面就没有namespace了,服务器端获取不到password,一顿报用户名或密码错误 :evil: 。后来我们使用各种添加soap头的方式,各种不好使 :cry: ,直到我们使用了一种最不像成功的方式——添加stringheader。代码如下:
开始我们把这个soap头的xml打印出来看了下,感觉与之前的格式差别很大,没对这种方式报多大的信心,结果还真是只有这一种方式好使,哎。不知道有没有精通webservice通信的老师,来给小生解解迷惑呀 :idea: ,刚入道不久,还请各位海涵......
我们写程序的时候一般都是使用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,一顿报用户名或密码错误 :evil: 。后来我们使用各种添加soap头的方式,各种不好使 :cry: ,直到我们使用了一种最不像成功的方式——添加stringheader。代码如下:
QName headerUn= new QName("namespace","username","");
QName hreadrps= new QName("namespace","password","");
serviceClient.addStringHeader(headerUn, userName);
serviceClient.addStringHeader(hreadrps, password);
开始我们把这个soap头的xml打印出来看了下,感觉与之前的格式差别很大,没对这种方式报多大的信心,结果还真是只有这一种方式好使,哎。不知道有没有精通webservice通信的老师,来给小生解解迷惑呀 :idea: ,刚入道不久,还请各位海涵......