gpt4 book ai didi

java - 无法在 Axis2 客户端项目中加载 Rampart 模块

转载 作者:行者123 更新时间:2023-11-30 11:21:11 25 4
gpt4 key购买 nike

虽然我的项目是一个 Java 网络应用程序,但我仅将网络服务用作客户端。

我使用 Apache Axis2 成功创建了 stub ,并使用 SoapUI 测试了它们。现在是实现安全性的时候了。 This is我必须整合的服务之一。它附带一个 WS-Security 策略,因此我必须正确传输我的凭据。

我想将 Apache Rampart 集成到我的项目中。我发现下载所需的 JAR 和 MAR 文件有很多困难,但我做到了。

现在我有以下项目结构:

webapp
-- WEB-INF
-- classes
-- conf
-- axis2.xml
-- modules
-- several -mar files
-- rampart-1.6.2.mar
-- modules.list
-- spring
-- various context files
-- web.xml

我使用 Spring 来初始化所有 bean,包括 Web 服务 stub 。如果我让 Spring 正常实例化它们,它们将按预期工作。但是当我使用 BeanPostProcessor接合 rampart 模块将失败

Caused by: org.apache.axis2.AxisFault: Unable to engage module : rampart
at org.apache.axis2.client.ServiceClient.engageModule(ServiceClient.java:363)
at it.csttech.edwin.security.SecurityHandler.engage(SecurityHandler.java:52)

在我的 axis2.xml 中,我添加了 <module ref="rampart" />addressing 之后

我使用以下代码启用 Rampart:

    RampartConfig rc = new RampartConfig();
rc.setUser(user);
Policy policy = PolicyEngine.getPolicy(new StAXOMBuilder(policyStream).getDocumentElement()); //XML policy file in classpath
policy.addAssertion(rc);
serviceClient.engageModule("rampart"); //this fails
Options options = serviceClient.getOptions();
options.setProperty(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); //This will provide password
options.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy); //This will provide policy

我发现如果我这样做 Map<String, AxisModule> modules = serviceClient.getAxisConfiguration().getModules();我刚得到一张空 map !!!!!!

所以根本没有加载任何模块。

然后我尝试将 modules/目录移动到我硬盘上的另一个位置,并通过系统属性 axis2.repo 链接它但即使 Axis2 不会加载,如果我故意设置错误的路径,它也不会加载 rampart-1.6.2.mar文件和 map 仍然是空的。

我快疯了。我不知道如何将 Rampart 正确加载到我的设置中。我什至不知道 Spring IoC 是否可用于注入(inject)正确的配置和/或让 Rampart 参与所有服务。

最佳答案

您可以尝试创建 ConfigurationContext 并使用它获取 ServiceClient。

// create configuration context
ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(RESOURCES_DIR, null);

// create service client
ServiceClient serClient = new ServiceClient(ctx, null);

// engage modules
serClient.engageModule("rampart");

“RESOURCES_DIR”应指向您的 .mar 文件的位置。

关于java - 无法在 Axis2 客户端项目中加载 Rampart 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22359274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com