簡體   English   中英

無法在Axis2客戶端項目中加載Rampart模塊

[英]Cannot load Rampart module within Axis2 client project

雖然我的項目是Java Web應用程序,但我僅將Web服務用作客戶端。

我使用Apache Axis2成功創建了存根,並使用SoapUI對其進行了測試。 現在是實現安全性的時候了。 這是我必須集成的服務之一。 它附帶了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服務存根。 如果我讓Spring正常實例化它們,它們將按預期工作。 但是,當我使用BeanPostProcessor接合城牆模塊時,它將失敗

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中,在addressing后添加了<module ref="rampart" />

我使用以下代碼啟用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(); 我只是得到一張空的地圖!

因此,根本不會加載任何模塊。

然后我試圖模塊/目錄移動到另一個地方,我的硬盤上,並通過系統屬性鏈接它axis2.repo但即使如果我willignly開了一個不好的Axis2路徑將不加載,它只是不會加載rampart-1.6.2.mar文件,地圖仍然為空。

我快瘋了。 我不知道如何正確地將Rampart加載到我的設置中。 我什至不知道Spring IoC是否可用於注入適當的配置和/或讓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文件的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM