纯java jdk 开发soap webservice客户端及BaiscAuth用户名密码回填使用BindingProvider
最近开发一个soap webservice 客户端代码
使用jdk1.8自带工具命令 wsimport
cmd命令行> wsimport -keep (持久化) -p(package) com.test.webservice.case1 -s (src目录) ./src -verbose (命令行打印细节)http://basicusername:password@test.webservice地址.cn:8080/test?wsdl (soap地址)
然后会生成代码到指定目录:
然后就是测试,测试时发现basicauth的账号密码在url里拼接会报401错误。估计是url各种转换不支持在url里。
最后根据网上查找的资料:
第一种方法:设置全局缺省账号密码。这种可以倒是可以,但是该url的鉴权变成全局的通用账号密码,有点范围扩大。 继续找资料找到第二种方法:
Authenticator myAuth = new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication( "someuser", "somepassword".toCharArray()); } @Override protected URL getRequestingURL() { return super.getRequestingURL(); } @Override protected RequestorType getRequestorType() { return super.getRequestorType(); } }; Authenticator.setDefault(myAuth);
第二种方法:强制转换(BindingProvider ),然后设置参数。生成的代码是注解形式的,估计再jdk源码里,
最终的注解代理生成的实现类实现了该接口。所以才能使用吧?囧~
TestService factory = new TestService(url);
Service2750 soap = factory.getHTTPPort();
BindingProvider bp = (BindingProvider) soap;
BindingProvider bp = (BindingProvider) soap;
bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY,"someuser");
bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "somepassword");
soap.callSometh();
博客地址: https://www.cnblogs.com/java2sap/
世界丰富多彩,知识天花乱坠。
---如果有帮到你,点个赞吧~
世界丰富多彩,知识天花乱坠。
---如果有帮到你,点个赞吧~