我按照以下链接提供的步骤在wso2应用程序管理器中创建策略并发布
创建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>
答案 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文件的两个版本。
<APIM_HOME>/repository/components/plugin
目录并搜索姓名。 org.wso2.carbon.identity.entitlement.stub
如果有两个jar文件,请删除一个jar文件(比如旧版本)
请删除bundle.info
文件中该jar文件的OSGI条目,该文件位于<APIM_HOME>repository/components/default/configuration/org.eclipse.equinox.simpleconfigurator
目录
重新启动服务器并尝试操作。
如果不起作用,请删除其他jar文件并添加较旧的jar文件,并记住在步骤3中提到的上述文件中添加新删除的条目
这不是解决此问题的正确方法。我想,最好的办法是,您可以通过为您正在使用的APIM版本找到正确的P2 repo来重新安装XACML功能。您可以从here
找到它答案 1 :(得分:0)
这是因为您安装了XACML和XACML介体的错误功能版本。请使用管理控制台再次卸载这些功能,然后重新安装正确的版本。
实施例: 如果您使用的是WSO2 APIM 1.7
是您应该选择的正确版本。您可以使用this table找到它。