You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ws.apache.org by sa...@apache.org on 2005/12/12 17:09:51 UTC
svn commit: r356270 - in /webservices/commons/trunk/policy:
interop/ibm/src/org/apache/ws/policy/interop/ src/org/apache/ws/policy/
src/org/apache/ws/policy/util/
Author: sanka
Date: Mon Dec 12 08:09:15 2005
New Revision: 356270
URL: http://svn.apache.org/viewcvs?rev=356270&view=rev
Log:
Fixed: normalize(..) causes an infinte recurrsion which result in stack overflow error
Modified:
webservices/commons/trunk/policy/interop/ibm/src/org/apache/ws/policy/interop/SimplePolicyService.java
webservices/commons/trunk/policy/src/org/apache/ws/policy/AndCompositeAssertion.java
webservices/commons/trunk/policy/src/org/apache/ws/policy/CompositeAssertion.java
webservices/commons/trunk/policy/src/org/apache/ws/policy/Policy.java
webservices/commons/trunk/policy/src/org/apache/ws/policy/PrimitiveAssertion.java
webservices/commons/trunk/policy/src/org/apache/ws/policy/XorCompositeAssertion.java
webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyUtil.java
webservices/commons/trunk/policy/src/org/apache/ws/policy/util/StAXPolicyWriter.java
Modified: webservices/commons/trunk/policy/interop/ibm/src/org/apache/ws/policy/interop/SimplePolicyService.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/interop/ibm/src/org/apache/ws/policy/interop/SimplePolicyService.java?rev=356270&r1=356269&r2=356270&view=diff
==============================================================================
--- webservices/commons/trunk/policy/interop/ibm/src/org/apache/ws/policy/interop/SimplePolicyService.java (original)
+++ webservices/commons/trunk/policy/interop/ibm/src/org/apache/ws/policy/interop/SimplePolicyService.java Mon Dec 12 08:09:15 2005
@@ -33,7 +33,7 @@
import org.apache.axis2.om.OMXMLParserWrapper;
import org.apache.axis2.om.impl.llom.factory.OMXMLBuilderFactory;
import org.apache.axis2.soap.SOAPBody;
-import org.apache.ws.policy.model.Policy;
+import org.apache.ws.policy.Policy;
import org.apache.ws.policy.util.PolicyFactory;
import org.apache.ws.policy.util.PolicyReader;
import org.apache.ws.policy.util.PolicyWriter;
@@ -104,7 +104,7 @@
}
private PolicyWriter getWriter() {
- return PolicyFactory.getPolicyWriter();
+ return PolicyFactory.getPolicyWriter(PolicyFactory.StAX_POLICY_WRITER);
}
private OMElement getWholeElement(OMElement element) {
Modified: webservices/commons/trunk/policy/src/org/apache/ws/policy/AndCompositeAssertion.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/org/apache/ws/policy/AndCompositeAssertion.java?rev=356270&r1=356269&r2=356270&view=diff
==============================================================================
--- webservices/commons/trunk/policy/src/org/apache/ws/policy/AndCompositeAssertion.java (original)
+++ webservices/commons/trunk/policy/src/org/apache/ws/policy/AndCompositeAssertion.java Mon Dec 12 08:09:15 2005
@@ -232,6 +232,8 @@
public Assertion normalize(PolicyRegistry reg) {
log.debug("Enter: AndCompositeAssertion::normalize");
+ if (isNormalized()) { return this; }
+
AndCompositeAssertion AND = new AndCompositeAssertion();
XorCompositeAssertion XOR = new XorCompositeAssertion();
Modified: webservices/commons/trunk/policy/src/org/apache/ws/policy/CompositeAssertion.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/org/apache/ws/policy/CompositeAssertion.java?rev=356270&r1=356269&r2=356270&view=diff
==============================================================================
--- webservices/commons/trunk/policy/src/org/apache/ws/policy/CompositeAssertion.java (original)
+++ webservices/commons/trunk/policy/src/org/apache/ws/policy/CompositeAssertion.java Mon Dec 12 08:09:15 2005
@@ -103,7 +103,7 @@
public Assertion normalize() {
return normalize(null);
}
-
+
public Assertion intersect(Assertion assertion)
throws UnsupportedOperationException {
return intersect(assertion, null);
Modified: webservices/commons/trunk/policy/src/org/apache/ws/policy/Policy.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/org/apache/ws/policy/Policy.java?rev=356270&r1=356269&r2=356270&view=diff
==============================================================================
--- webservices/commons/trunk/policy/src/org/apache/ws/policy/Policy.java (original)
+++ webservices/commons/trunk/policy/src/org/apache/ws/policy/Policy.java Mon Dec 12 08:09:15 2005
@@ -81,6 +81,8 @@
public Assertion normalize(PolicyRegistry reg) {
log.debug("Enter: Policy::normalize");
+
+ if (isNormalized()) { return this;}
String xmlBase = getBase();
String id = getId();
@@ -103,9 +105,9 @@
if (term instanceof Policy) {
Assertion wrapper = new AndCompositeAssertion();
((AndCompositeAssertion) wrapper).addTerms(((Policy) term).getTerms());
- term = wrapper.normalize(reg);
- continue;
+ term = wrapper.normalize(reg);
}
+
if (term instanceof XorCompositeAssertion) {
if (((XorCompositeAssertion) term).isEmpty()) {
XorCompositeAssertion emptyXor = new XorCompositeAssertion();
Modified: webservices/commons/trunk/policy/src/org/apache/ws/policy/PrimitiveAssertion.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/org/apache/ws/policy/PrimitiveAssertion.java?rev=356270&r1=356269&r2=356270&view=diff
==============================================================================
--- webservices/commons/trunk/policy/src/org/apache/ws/policy/PrimitiveAssertion.java (original)
+++ webservices/commons/trunk/policy/src/org/apache/ws/policy/PrimitiveAssertion.java Mon Dec 12 08:09:15 2005
@@ -162,116 +162,162 @@
public Assertion normalize(PolicyRegistry reg) {
log.debug("Enter: PrimitveAssertion:normalize");
+ if (isNormalized()) { return this; }
+
if (isOptional()) {
- System.out.println("PA is optional");
- XorCompositeAssertion xorCompositeAssertion = new XorCompositeAssertion();
- AndCompositeAssertion andCompositeAssertion = new AndCompositeAssertion();
+ XorCompositeAssertion XOR = new XorCompositeAssertion();
+ AndCompositeAssertion AND = new AndCompositeAssertion();
- PrimitiveAssertion assertion = getSelfWithoutTerms();
- assertion.removeAttribute(new QName(PolicyConstants.WS_POLICY_NAMESPACE_URI, "Optional"));
- assertion.setOptional(false);
- assertion.setTerms(getTerms());
+ PrimitiveAssertion PRIM = getSelfWithoutTerms();
+ PRIM.removeAttribute(new QName(PolicyConstants.WS_POLICY_NAMESPACE_URI, "Optional"));
+ PRIM.setOptional(false);
+ PRIM.setTerms(getTerms());
- andCompositeAssertion.addTerm(assertion);
- xorCompositeAssertion.addTerm(andCompositeAssertion);
- xorCompositeAssertion.addTerm(new AndCompositeAssertion());
+ AND.addTerm(PRIM);
+ XOR.addTerm(AND);
+ XOR.addTerm(new AndCompositeAssertion());
- return xorCompositeAssertion.normalize(reg);
+ return XOR.normalize(reg);
}
if (getTerms().isEmpty()) {
- PrimitiveAssertion primitiveAssertion = getSelfWithoutTerms();
- primitiveAssertion.setNormalized(true);
- return primitiveAssertion;
+ PrimitiveAssertion PRIM = getSelfWithoutTerms();
+ PRIM.setNormalized(true);
+ return PRIM;
}
ArrayList policyTerms = new ArrayList();
- ArrayList childNonPolicyTerms = new ArrayList();
+ ArrayList nonPolicyTerms = new ArrayList();
Iterator iterator = getTerms().iterator();
while (iterator.hasNext()) {
Assertion term = (Assertion) iterator.next();
- if (!(term.isNormalized())) {
- term = term.normalize();
- }
+// if (!(term.isNormalized())) {
+// term = term.normalize();
+// }
if (term instanceof Policy) {
policyTerms.add(term);
} else if (term instanceof PrimitiveAssertion) {
- childNonPolicyTerms.add(term);
+ nonPolicyTerms.add(term);
} else {
+ throw new RuntimeException();
//TODO should I throw an exception ..
}
}
if (policyTerms.isEmpty()) {
- PrimitiveAssertion primitiveAssertion = getSelfWithoutTerms();
- primitiveAssertion.setTerms(getTerms());
- primitiveAssertion.setNormalized(true);
- return primitiveAssertion;
+ PrimitiveAssertion PRIM = getSelfWithoutTerms();
+ PRIM.setTerms(getTerms());
+ PRIM.setNormalized(true);
+ return PRIM;
}
Policy policyTerm = PolicyUtil.getSinglePolicy(policyTerms, reg);
CompositeAssertion xorTerm = (XorCompositeAssertion)
policyTerm.getTerms().get(0);
- Iterator iterator2 = xorTerm.getTerms().iterator();
- // AndCompositeAssertion andTerm = (AndCompositeAssertion) iterator2.next();
-
- if (!(iterator2.hasNext())) { //policy with no alternatives
- // two scenarios ..
-
- /* no leaves */
- if (childNonPolicyTerms.isEmpty()) {
- PrimitiveAssertion primTerm = getSelfWithoutTerms();
- primTerm.addTerm(policyTerm);
- return primTerm;
- }
-
- /* (2) some leaves*/
- ArrayList allTerms = new ArrayList();
- allTerms.addAll(childNonPolicyTerms);
- allTerms.addAll(((AndCompositeAssertion) iterator2.next()).getTerms());
- PrimitiveAssertion primTerm = getSelfWithoutTerms();
- primTerm.addTerm(getSinglePolicy(allTerms));
- return primTerm;
- }
-
- /* Policy with many terms */
- Policy endPolicyTerm = new Policy();
- XorCompositeAssertion endXorTerm = new XorCompositeAssertion();
- endPolicyTerm.addTerm(endXorTerm);
-
- ArrayList endAndTerms = new ArrayList();
- AndCompositeAssertion anEndAndTerm = new AndCompositeAssertion();
- PrimitiveAssertion self;
-
- ArrayList termsForAnEndAnd = new ArrayList();
- self = getSelfWithoutTerms();
-
- termsForAnEndAnd.addAll(childNonPolicyTerms);
- termsForAnEndAnd.addAll(((AndCompositeAssertion) iterator2.next()).getTerms());
- self.addTerm(PolicyUtil.getPolicy(termsForAnEndAnd));
- anEndAndTerm.addTerm(self);
- endAndTerms.add(anEndAndTerm);
-
+ List ANDs = xorTerm.getTerms();
+
+ if (ANDs.size() == 0) {
+ return new XorCompositeAssertion();
+ }
+
+ if (ANDs.size() == 1) {
+ ((AndCompositeAssertion) ANDs.get(0)).addTerms(nonPolicyTerms);
+ PrimitiveAssertion PRIM = getSelfWithoutTerms();
+ PRIM.addTerm(policyTerm);
+ return PRIM;
+ }
+
+
+ Policy nPOLICY = new Policy();
+ XorCompositeAssertion nXOR = new XorCompositeAssertion();
+ nPOLICY.addTerm(nXOR);
+
+ PrimitiveAssertion nPRIM;
+ Iterator iterator2 = ANDs.iterator();
+
+ ArrayList list;
+
while (iterator2.hasNext()) {
- anEndAndTerm = new AndCompositeAssertion();
- self = getSelfWithoutTerms();
-
- termsForAnEndAnd.clear();
- termsForAnEndAnd.addAll(childNonPolicyTerms);
- termsForAnEndAnd.addAll(((AndCompositeAssertion) iterator2.next()).getTerms());
- self.addTerm(PolicyUtil.getPolicy(termsForAnEndAnd));
+ nPRIM = getSelfWithoutTerms();
+
+ list = new ArrayList();
+ list.addAll(((AndCompositeAssertion) iterator2.next()).getTerms());
- anEndAndTerm.addTerm(self);
- endAndTerms.add(anEndAndTerm);
+ if (!nonPolicyTerms.isEmpty()) {
+ list.addAll(nonPolicyTerms);
+ }
+ nPRIM.addTerm(getSinglePolicy(list));
+ AndCompositeAssertion AND = new AndCompositeAssertion();
+ AND.addTerm(nPRIM);
+ nXOR.addTerm(AND);
}
- endXorTerm.addTerms(endAndTerms);
- return endPolicyTerm;
+ nPOLICY.setNormalized(true);
+ return nPOLICY;
+
+
+
+ // AndCompositeAssertion andTerm = (AndCompositeAssertion) iterator2.next();
+
+// if (!(iterator2.hasNext())) { //policy with no alternatives
+// // two scenarios ..
+//
+// /* no leaves */
+// if (nonPolicyTerms.isEmpty()) {
+// PrimitiveAssertion primTerm = getSelfWithoutTerms();
+// primTerm.addTerm(policyTerm);
+// primTerm.setNormalized(true);
+// return primTerm;
+// }
+//
+// /* (2) some leaves*/
+// ArrayList allTerms = new ArrayList();
+// allTerms.addAll(nonPolicyTerms);
+// allTerms.addAll(((AndCompositeAssertion) iterator2.next()).getTerms());
+// PrimitiveAssertion primTerm = getSelfWithoutTerms();
+// primTerm.addTerm(getSinglePolicy(allTerms));
+// primTerm.setNormalized(true);
+// return primTerm;
+// }
+//
+// /* Policy with many terms */
+// Policy endPolicyTerm = new Policy();
+// XorCompositeAssertion endXorTerm = new XorCompositeAssertion();
+// endPolicyTerm.addTerm(endXorTerm);
+//
+// ArrayList endAndTerms = new ArrayList();
+// AndCompositeAssertion anEndAndTerm = new AndCompositeAssertion();
+// PrimitiveAssertion self;
+//
+// ArrayList termsForAnEndAnd = new ArrayList();
+// self = getSelfWithoutTerms();
+//
+// termsForAnEndAnd.addAll(nonPolicyTerms);
+// termsForAnEndAnd.addAll(((AndCompositeAssertion) iterator2.next()).getTerms());
+// self.addTerm(PolicyUtil.getPolicy(termsForAnEndAnd));
+// anEndAndTerm.addTerm(self);
+// endAndTerms.add(anEndAndTerm);
+//
+// while (iterator2.hasNext()) {
+// anEndAndTerm = new AndCompositeAssertion();
+// self = getSelfWithoutTerms();
+//
+// termsForAnEndAnd.clear();
+// termsForAnEndAnd.addAll(nonPolicyTerms);
+// termsForAnEndAnd.addAll(((AndCompositeAssertion) iterator2.next()).getTerms());
+// self.addTerm(PolicyUtil.getPolicy(termsForAnEndAnd));
+//
+// anEndAndTerm.addTerm(self);
+// endAndTerms.add(anEndAndTerm);
+// }
+// endXorTerm.addTerms(endAndTerms);
+// endXorTerm.setNormalized(true);
+// return endPolicyTerm;
}
private PrimitiveAssertion getSelfWithoutTerms() {
Modified: webservices/commons/trunk/policy/src/org/apache/ws/policy/XorCompositeAssertion.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/org/apache/ws/policy/XorCompositeAssertion.java?rev=356270&r1=356269&r2=356270&view=diff
==============================================================================
--- webservices/commons/trunk/policy/src/org/apache/ws/policy/XorCompositeAssertion.java (original)
+++ webservices/commons/trunk/policy/src/org/apache/ws/policy/XorCompositeAssertion.java Mon Dec 12 08:09:15 2005
@@ -48,6 +48,8 @@
public Assertion normalize(PolicyRegistry reg) {
log.debug("Enter: XorCompositeAssertion::normalize");
+ if (isNormalized()) { return this;}
+
XorCompositeAssertion XOR = new XorCompositeAssertion();
if (isEmpty()) {
Modified: webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyUtil.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyUtil.java?rev=356270&r1=356269&r2=356270&view=diff
==============================================================================
--- webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyUtil.java (original)
+++ webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyUtil.java Mon Dec 12 08:09:15 2005
@@ -94,6 +94,9 @@
? policyTerm2 : (Policy) policyTerm.merge(policyTerm2, reg);
}
+ if (!policyTerm.isNormalized()) {
+ policyTerm = (Policy) policyTerm.normalize();
+ }
return policyTerm;
}
Modified: webservices/commons/trunk/policy/src/org/apache/ws/policy/util/StAXPolicyWriter.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/org/apache/ws/policy/util/StAXPolicyWriter.java?rev=356270&r1=356269&r2=356270&view=diff
==============================================================================
--- webservices/commons/trunk/policy/src/org/apache/ws/policy/util/StAXPolicyWriter.java (original)
+++ webservices/commons/trunk/policy/src/org/apache/ws/policy/util/StAXPolicyWriter.java Mon Dec 12 08:09:15 2005
@@ -61,7 +61,8 @@
private void writePolicy(Policy policy, XMLStreamWriter writer)
throws XMLStreamException {
writer.writeStartElement(PolicyConstants.WS_POLICY_PREFIX,
- PolicyConstants.WS_POLICY);
+ PolicyConstants.WS_POLICY,
+ PolicyConstants.WS_POLICY_NAMESPACE_URI);
writer.writeNamespace(PolicyConstants.WS_POLICY_PREFIX,
PolicyConstants.WS_POLICY_NAMESPACE_URI);
@@ -132,7 +133,8 @@
String prefix = qname.getPrefix();
if (prefix != null) {
- writer.writeStartElement(qname.getPrefix(), qname.getLocalPart());
+ writer.writeStartElement(qname.getPrefix(), qname.getLocalPart(),
+ qname.getNamespaceURI());
writer.writeNamespace(qname.getPrefix(), qname.getNamespaceURI());
} else {