我想在 Java 中创建一个连接到需要摘要式身份验证的 Web 服务的客户端。由于对java和java stack不熟悉,所以研究了一下,遇到了jax-ws、axis2、xcf、metro。我了解到 JAX-WS 是一个 API,JDK 中有一个参考实现,但它缺乏摘要授权支持。
我的第一次尝试是使用axis2,因为Eclipse IDE 中内置了对它的支持。以下代码似乎遵循摘要身份验证工作流程,但不知何故它最终仍然未能通过授权。
Service1Stub stub = new Service1Stub();
HttpTransportProperties.Authenticator authenticator = new Authenticator();
List<String> authSchemes = new ArrayList<String>();
authSchemes.add(Authenticator.DIGEST);
authenticator.setAuthSchemes(authSchemes);
authenticator.setUsername("doman user");
authenticator.setPassword("domain password");
authenticator.setPreemptiveAuthentication(true);
Options options = stub._getServiceClient().getOptions();
options.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENTICATE, authenticator);
options.setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, org.apache.axis2.Constants.VALUE_FALSE);
GetData getData = new GetData();
getData.setValue(25);
GetDataResponse data = stub.getData(getData);
System.out.println(data.getGetDataResult());
我的第二次尝试是使用 Metro 框架,但我得到了一些与 JAXB 版本相关的错误。
java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI needs 2.2 API.
我必须使用 JDK 1.6.0_03,所以我猜这是因为 JDK 版本不匹配而发生的,但我也不想使用建议的“认可目录机制”,因为它可能会在部署过程中造成很多麻烦。
我完全迷失了,我正在寻找最简单、最快和最新的方式来使用需要 Java 中的摘要式身份验证的 Web 服务?最好尽可能少的依赖。