我试图调用一个SOAPendpoint,它已经从一个Java11/Spring/Gradle的项目中设置了用户名/密码的基本身份验证。我设法使用wsimportJDK8类生成,并找到了几种方法,但都不起作用。
第一种方法是从这里:https://mkyong.com/webservices/jax-ws/application-authentication-with-jax-ws/,但我得到一个java. lang.IllegalArgumentException:*端口引用的方法是从类加载器不可见当我尝试
Service service = Service.create(url, qname);
HelloWorld hello = service.getPort(HelloWorld.class);
我尝试使用Service类和HelloWorld类作为wsimport生成的类或由我编写的类,如下例所示:https://www.baeldung.com/spring-soap-web-service#1-generate-client-code
设置auth标头的第二种方法是
BindingProvider prov = (BindingProvider)tilwsPort;
prov.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "username");
prov.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "pass");
我还尝试通过调用服务生成的方法来获取接口,例如:
HelloWorld hello = service.getHelloWorldPort();
有什么建议是正确的吗?谢谢!
您可以尝试通过HTTP_REQUEST_HEADERS属性设置身份验证,而不是直接在Request estContext中使用用户和密码
Map<String, Object> req_ctx = ((BindingProvider)hello).getRequestContext();
req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL);
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("Username", Collections.singletonList("mkyong"));
headers.put("Password", Collections.singletonList("password"));
req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
我的解决方案很复杂: