无法在wso2应用程序管理器中发布XACML策略并抛出NoSuchMethodError异常

时间:2014-09-15 11:15:15

标签: wso2 wso2is wso2-am

我按照以下链接提供的步骤在wso2应用程序管理器中创建策略并发布

http://wso2.com/library/articles/2014/02/use-of-wso2-api-manager-to-validate-fine-grained-policy-decisions-using-xacml/

创建XACML策略尝试将其发布到PDP后,出现以下错误

[2014-09-15 15:52:53,007] ERROR - ApplicationDispatcher Servlet.service() for servlet bridgeservlet threw exception
java.lang.NoSuchMethodError: org.wso2.carbon.identity.entitlement.stub.EntitlementPolicyAdminServiceStub.publishPolicies([Ljava
g;Ljava/lang/String;ZI)V
        at org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient.publish(EntitlementPolicyAdminSer
        at org.apache.jsp.entitlement.publish_002dfinish_jsp._jspService(org.apache.jsp.entitlement.publish_002dfinish_jsp:133)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:403)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
        at org.wso2.carbon.ui.JspServlet.service(JspServlet.java:155)
        at org.wso2.carbon.ui.TilesJspServlet.service(TilesJspServlet.java:80)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)

我想将XACML策略集成到WSO2 APIM中。以下是我想在wso2 api管理器中发布的XACML策略。

<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="TestPolicy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable" Version="1.0">
 <Target>
  <AnyOf>
     <AllOf>
        <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
           <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">foo</AttributeValue>
           <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
        </Match>
     </AllOf>
  </AnyOf>
</Target>
<Rule Effect="Permit" RuleId="Rule-1">
  <Target>
     <AnyOf>
        <AllOf>
           <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
              <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">GET</AttributeValue>
              <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
           </Match>
        </AllOf>
     </AnyOf>
  </Target>
  <Condition>
     <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:any-of">
        <Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal"/>
        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">test</AttributeValue>
        <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
     </Apply>
  </Condition>
</Rule>
<Rule Effect="Deny" RuleId="Deny-Rule"/>
</Policy>        

2 个答案:

答案 0 :(得分:0)

这不是XACML策略的错误。根据错误,它清楚地说明了这一点 java.lang.NoSuchMethodError: org.wso2.carbon.identity.entitlement.stub.EntitlementPolicyAdminServiceStub.publishPolicies([Ljavag;Ljava/lang/String;ZI)V

因此,您调用的Web服务API存在问题。这意味着很可能Web服务API中存在API更改,而某些组件仍在调用旧API。由于您已将XACML功能安装到API管理器中,因此您可能已安装了一些旧版本的XACML功能。但是请您检查系统中是否有以下jar文件的两个版本。

  1. 您可以转到<APIM_HOME>/repository/components/plugin目录并搜索姓名。
  2. org.wso2.carbon.identity.entitlement.stub

    1. 如果有两个jar文件,请删除一个jar文件(比如旧版本)

    2. 请删除bundle.info文件中该jar文件的OSGI条目,该文件位于<APIM_HOME>repository/components/default/configuration/org.eclipse.equinox.simpleconfigurator目录

    3. 重新启动服务器并尝试操作。

    4. 如果不起作用,请删除其他jar文件并添加较旧的jar文件,并记住在步骤3中提到的上述文件中添加新删除的条目

    5. 这不是解决此问题的正确方法。我想,最好的办法是,您可以通过为您正在使用的APIM版本找到正确的P2 repo来重新安装XACML功能。您可以从here

      找到它

答案 1 :(得分:0)

这是因为您安装了XACML和XACML介体的错误功能版本。请使用管理控制台再次卸载这些功能,然后重新安装正确的版本。

实施例: 如果您使用的是WSO2 APIM 1.7

  • XACML mediator 4.2.2
  • XACML 4.2.1

是您应该选择的正确版本。您可以使用this table找到它。

参考:https://wso2.org/jira/browse/APIMANAGER-3106