- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想用 Java 创建一个连接到需要摘要式身份验证的 Web 服务的客户端。由于我不熟悉 java 和 java 堆栈,我进行了研究并遇到了 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, 但这个 RI 需要 2.2 API。
我必须使用 JDK 1.6.0_03,所以我猜这是由于 JDK 版本不匹配而发生的,但我也不想使用建议的“认可目录机制”,因为它可能会在部署期间造成很多麻烦。
我完全迷路了,我正在寻找最简单、最快速和最新的方式来使用需要在 Java 中进行摘要式身份验证的 Web 服务?最好尽可能少的依赖。
最佳答案
Java 类加载一团糟,抱歉。根本原因是没有像 .NET 世界中那样的强名称,因此运行时链接器会采用类路径中最先出现的任何匹配项,而不管它是否是编译代码所针对的库版本。 OSGi 系统解决了这个问题,但它从未获得主流采用。
您引用的错误信息:
java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI needs 2.2 API.
非常有用和具体,大多数情况下,您只会盯着 NoSuchMethodError
看或类似的东西。随着时间的推移,您会学会将这些识别为库版本不匹配。在这种情况下,库作者编写了代码来识别常见的错误情况并打印更好的错误消息(保佑他们)。
咆哮结束,这里有一些信息,我希望能帮助你走上正轨:
lib\endorsed
的文件夹您可以在其中添加需要由根加载程序加载的 JAR 文件,甚至绕过 rt.jar
中的内容.综上所述,如果手动添加JAXB库的2.2版本到%JAVA_HOME%\lib\endorsed
,那么它应该覆盖包含的 2.1 版本,并且您的 Web 服务客户端将部署。在将 JDK 更新到包含 JAXB 2.2 的 7.x 版本之前,这将必须在将运行 Web 服务客户端的每个系统上发生。如果同一 JVM 正在运行其他基于 JAXB 的应用程序,这些应用程序可能会或可能不会因此中断。
是的,这很痛苦。您可以调查的一个切线是故意使用为 JAXB 2.1 构建的旧版本的 Metro。只要您一定要在 1.6.0_03
上部署,这很可能是更好的选择,尽管失去了 Metro 最近的一些改进。
更新:这是一个blog post关于这个话题。它包含一些指向更多信息的链接。
关于java - 使用来自 Java 的摘要身份验证的 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14896324/
我正在使用SQL Server 2008 R2,并且想创建一个触发器。 对于每个添加(仅添加),将像这样更新一列: ABC-CurrentYear-AutoIncrementCode 例子: ABC-
是否可以在显示最终一致性的数据存储中创建/存储用户帐户? 似乎不可能在没有一堆架构复杂性的情况下管理帐户创建,以避免可能发生具有相同 UID(例如电子邮件地址)的两个帐户的情况? 最终一致性存储的用户
您好, 我有一个带有 Identity 的 .NetCore MVC APP并使用 this指导我能够创建自定义用户验证器。 public class UserDomainValidator : IU
这与以下问题相同:HiLo or identity? 我们以本站的数据库为例。 假设该站点具有以下表格: 帖子。 投票。 注释。 使用它的最佳策略是什么: 身份 - 这是更常见的。 或者 HiLo -
我想将 Blazor Server 与 ASP.NET Identity 一起使用。但我需要使用 PostgreSQL 作为用户/角色存储,因为它在 AWS 中。 它不使用 EF,这是我需要的。 我创
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我使用 ASP.NET 身份和 ClaimsIdentity 来验证我的用户。当用户通过身份验证时,属性 User.Identity 包含一个 ClaimsIdentity 实例。 但是,在登录请求期
所以我在两台机器上都安装了 CYGWIN。 如果我这样做,它会起作用: ssh -i desktop_rsa root@remoteserver 这需要我输入密码 ssh root@remoteser
我尝试在 mac osx 上的终端中通过 telnet 连接到 TOR 并请求新身份,但它不起作用,我总是收到此错误消息: Trying 127.0.0.1... telnet: connect to
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我正在开发一项服务,客户可以在其中注册他们的 webhook URL,我将发送有关已注册 URL 的更新。为了安全起见,我想让客户端(接收方)识别是我(服务器)向他们发送请求。 Facebook和 G
在 Haskell 中,有没有办法测试两个 IORef 是否相同?我正在寻找这样的东西: IORef a -> IORef a -> IO Bool 例如,如果您想可视化由 IORef 组成的图形,这
我是 .NET、MVC 和身份框架的新手。我注意到身份框架允许通过注释保护单个 Controller 操作。 [Authorize] public ActionResult Edit(int? Id)
我有一列具有身份的列,其计数为19546542,我想在删除所有数据后将其重置。我需要类似ms sql中的'dbcc checkident'这样的内容,但在Oracle中 最佳答案 在Oracle 12
这是我用来创建 session 以发送电子邮件的代码: props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enabl
我想了解 [AllowAnonymous] 标签的工作原理。 我有以下方法 [HttpGet] public ActionResult Add() { return View(); } 当我没
在使用沙盒测试环境时,PayPal 身份 token 对某些人显示而不对其他人显示的原因是否有任何原因。 我在英国使用 API,终生无法生成或找到 token 。 我已经遵循协议(protocol)并
我对非常简单的事情有一些疑问:IDENTITY。我尝试在 phpMyAdmin 中创建表: CREATE TABLE IF NOT EXISTS typEventu ( typEventu
习语 #1 和 #5 是 FinnAPL Idiom Library两者具有相同的名称:“Progressive index of (without replacement)”: ((⍴X)⍴⍋⍋X⍳
当我第一次在 TFS 中设置时,我的公司拼错了我的用户名。此后他们将其更改为正确的拼写,但该更改显然未反射(reflect)在 TFS 中。当我尝试 checkin 更改时,出现此错误: 有没有一种方
我是一名优秀的程序员,十分优秀!