现在有一个webservice接口,但是访问的时候需要输入账号和密码。我想用axis2或者CXF来生成客户端的代码,但是生成的时候,总是报401:未授权,我想多半是生成的时候没有输入账号和密码。不知道怎么加上账号和密码。
解决方案 »
- 将数据库含有样式的字符串,按字符串的样式导出到pdf
- Spring + Hibernate 整合,前辈们救救小弟 我不会吝啬分的
- 我还要安装tomcat吗?新手提问!
- 会话BEAN调用实体BEAN的方法时候,为什么会有错?请教!!!
- struts简单问题,我再问!!
- 我的是JDK1.4.1+Tomcat5,谁给我说说怎么调试一个我下载的jsp网站啊?
- 如何编译ejb-jar.xml怎样打包成jar?
- AXIS中部署了一个服务,列表中所有显示的服务都消失了, 为什么?
- 一个Tomact 4.1.21的问题。
- 关于package包的问题,请高手指教
- javascript中获取文件MD5码
- 我是一个从.Net转Java方向的码农
I'm sorry,公司不能上qq的,限制几个可以上的外网,csdn就是其中一个。
我们这边的登录名和登录密码是在请求的Header域加的:
<SOAP-ENV:Header><m:Security xmlns:m="http://....">
<m:UsernameToken>
<m:Username>liming</m:Username>
<m:Password>123456</m:Password>
</m:UsernameToken>
</m:Security></SOAP-ENV:Header>
处理:
Message msg = mc.getRequestMessage();//mc为MessageContex
SOAPHeader header = (SOAPHeader) msg.getSOAPHeader();
List<?> list = header.getChildren();
MessageElement token = (MessageElement) list.get(0);
list = token.getChildren();
MessageElement authenNode = (MessageElement) list.get(0);
list = authenNode.getChildren();
MessageElement nameNode = (MessageElement) list.get(0);
String userName = nameNode.getValue();
MessageElement pwdNode = (MessageElement) list.get(1);
String password = pwdNode.getValue();
...
知道怎么解析,怎么封装也就简单了。也有的是放在一条指令的Body区的,处理方式不一样。在Header域还是在Body域中,处理方式不一样的。建议和厂商要一些可执行的请求报文样例,然后对比下你发的请求与他们提供的有啥区别,看看是不是存在什么登录名和登录密码项。
他们的例子是用.net做的,.net函数库里有一个方法直接设置用户名和密码的,所有可以直接访问。
或者说,你们发送的服务器地址错了?
http://IP:port/MyWebApp/services/XXXService?wsdl
上面是我们发送的地址。这个Url如果在浏览器输入的话,会显示一个指令接口的页面。
好吧,可能我这边使用SOAP的方式比较单一(用户提供wsdl文件,我们使用axis1.4生成代码,做服务端逻辑),听听彩虹六号的吧,看样子你俩用的类似。wsdl2java生成的代码,包含服务端(ImsServiceSoapBindingImpl.java)和客户端代码(ImsServiceSoapBindingStub.java),lz别用错代码哦。另外,工程中的jar包还是必不可少的(我们这边用的是axis-1.4.jar和axis.jar)。
好吧,可能我这边使用SOAP的方式比较单一(用户提供wsdl文件,我们使用axis1.4生成代码,做服务端逻辑),听听彩虹六号的吧,看样子你俩用的类似。wsdl2java生成的代码,包含服务端(ImsServiceSoapBindingImpl.java)和客户端代码(ImsServiceSoapBindingStub.java),lz别用错代码哦。另外,工程中的jar包还是必不可少的(我们这边用的是axis-1.4.jar和axis.jar)。
恩,这个我知道,axis2生成的代码要jar包支持,CXF的可以不用。现在最主要的问题就是生成的代码连不上服务器接口,应该就是代码里面没有加上账号和密码,所以连接未授权。
Service service = new Service();
Call _call = (Call) service.createCall();
_call.setUsername(USERNAME);
_call.setPassword(USERPASS);
我们这边是用axis2,没有生成客户端,直接调接口连接。
我们这边是用axis2,没有生成客户端,直接调接口连接。
可以加个QQ详谈一下吗?
要是解决了,也发出来给大家分享下哈~
OK了 搞定了我用axis2生成的客户端代码中加入了以下代码:
/******************************加入账号密码验证start***************************************/
HttpTransportProperties.Authenticator basicauth = new HttpTransportProperties.Authenticator();
basicauth.setUsername("username");
basicauth.setPassword("password");
_serviceClient.getOptions().setProperty(HTTPConstants.AUTHENTICATE, basicauth);
/********************************加入账号密码验证end*************************************/
要是解决了,也发出来给大家分享下哈~
OK了 搞定了我用axis2生成的客户端代码中加入了以下代码:
/******************************加入账号密码验证start***************************************/
HttpTransportProperties.Authenticator basicauth = new HttpTransportProperties.Authenticator();
basicauth.setUsername("username");
basicauth.setPassword("password");
_serviceClient.getOptions().setProperty(HTTPConstants.AUTHENTICATE, basicauth);
/********************************加入账号密码验证end*************************************/
厉害啊!看你们的代码,注释很详细,不错不错!