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/08 12:25:51 UTC
svn commit: r355072 - in
/webservices/commons/trunk/policy/src/org/apache/ws/policy/util:
PolicyAttachmentUtil.java PolicyReader.java PolicyWriter.java
Author: sanka
Date: Thu Dec 8 03:25:42 2005
New Revision: 355072
URL: http://svn.apache.org/viewcvs?rev=355072&view=rev
Log:
some refactring and few add-ons to several utility classes
Modified:
webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyAttachmentUtil.java
webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyReader.java
webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyWriter.java
Modified: webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyAttachmentUtil.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyAttachmentUtil.java?rev=355072&r1=355071&r2=355072&view=diff
==============================================================================
--- webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyAttachmentUtil.java (original)
+++ webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyAttachmentUtil.java Thu Dec 8 03:25:42 2005
@@ -45,7 +45,9 @@
import org.apache.wsdl.WSDLInterface;
import org.apache.wsdl.WSDLOperation;
import org.apache.wsdl.WSDLService;
+import org.apache.wsdl.WSDLTypes;
import org.apache.wsdl.extensions.DefaultExtensibilityElement;
+import org.apache.wsdl.extensions.Schema;
import org.w3c.dom.Element;
import com.ibm.wsdl.util.xml.DOM2Writer;
@@ -55,56 +57,66 @@
* 2004).
*
* @author Sanka Samaranayake <ss...@gmail.com>
- *
+ *
*/
public class PolicyAttachmentUtil {
-
+
private WSDLDescription wsdlDescription = null;
+
//private HashMap loadedPolicies = new HashMap();
private PolicyRegistry reg = new PolicyRegistry();
-
+
+ private SchemaRegistry schemaRegistry = new SchemaRegistry();
+
public PolicyAttachmentUtil() {
}
public PolicyAttachmentUtil(WSDLDescription wsdlDescription) {
this.wsdlDescription = wsdlDescription;
+
populatePolicyRegistry();
+ populateSchemaRegistry();
+
}
-
+
public PolicyAttachmentUtil(InputStream wsdlInputStream) {
try {
- WSDLVersionWrapper build = WOMBuilderFactory.
- getBuilder(WSDLConstants.WSDL_1_1).build(wsdlInputStream);
+ WSDLVersionWrapper build = WOMBuilderFactory.getBuilder(
+ WSDLConstants.WSDL_1_1).build(wsdlInputStream);
wsdlDescription = build.getDescription();
- populatePolicyRegistry();
+ populatePolicyRegistry();
+ populateSchemaRegistry();
+
} catch (WSDLException e) {
- throw new IllegalArgumentException("error : "+ e.getMessage());
+ throw new IllegalArgumentException("error : " + e.getMessage());
}
}
-
+
public void setWSDLDescription(WSDLDescription wsdlDescription) {
this.wsdlDescription = wsdlDescription;
reg = new PolicyRegistry();
+
populatePolicyRegistry();
+ populateSchemaRegistry();
}
-
+
public WSDLDescription getWSDLDescription() {
try {
return getDescription();
-
+
} catch (IllegalStateException ex) {
return null;
}
}
-
+
private WSDLDescription getDescription() {
if (wsdlDescription != null) {
return wsdlDescription;
}
throw new IllegalStateException("ERROR: A WSDLDescription is not set");
}
-
+
/**
* Retruns the Effective policy for a service.
*
@@ -114,7 +126,7 @@
public Policy getPolicyForService(QName serviceName) {
return getServicePolicy(serviceName);
}
-
+
/**
* Returns the Effective policy for an Endpoint.
*
@@ -124,9 +136,9 @@
public Policy getPolicyForEndPoint(QName epName) {
Policy servicePolicy = null;
Policy endPointPolicy = null;
-
+
Iterator iterator = wsdlDescription.getServices().values().iterator();
-
+
while (iterator.hasNext()) {
WSDLService service = (WSDLService) iterator.next();
if (service.getEndpoints().containsKey(epName)) {
@@ -134,17 +146,16 @@
break;
}
}
-
+
endPointPolicy = getEndPointPolicy(epName);
-
- return (servicePolicy != null)
- ? (Policy) servicePolicy.merge(endPointPolicy)
- : endPointPolicy;
+
+ return (servicePolicy != null) ? (Policy) servicePolicy
+ .merge(endPointPolicy) : endPointPolicy;
}
-
+
/**
* Returns the Effective policy for an Operation.
- *
+ *
* @param endPoint
* @param operation
* @return
@@ -152,41 +163,41 @@
public Policy getPolicyForOperation(QName endPoint, QName operation) {
Policy endPointPolicy = getPolicyForEndPoint(endPoint);
Policy operationPolicy = getOperationPolicy(endPoint, operation);
-
+
//
if (operationPolicy == null) {
return endPointPolicy;
-
+
} else if (endPointPolicy == null) {
return operationPolicy;
-
+
} else {
return (Policy) endPointPolicy.merge(operationPolicy);
}
}
-
+
/**
* Returns the effective policy of an Input Message.
*
* @param endPoint
* @param operation
* @return
- */
+ */
public Policy getPolicyForInputMessage(QName endPoint, QName operation) {
Policy operationPolicy = getPolicyForOperation(endPoint, operation);
- Policy inputMsgPolicy = getInputMeassagePolicy(endPoint, operation);
-
+ Policy inputMsgPolicy = getInputMeassagePolicy(endPoint, operation);
+
if (operationPolicy == null) {
return inputMsgPolicy;
-
+
} else if (inputMsgPolicy == null) {
return operationPolicy;
-
+
} else {
- return (Policy) operationPolicy.merge(inputMsgPolicy);
+ return (Policy) operationPolicy.merge(inputMsgPolicy);
}
}
-
+
/**
* Returns the effective policy of an Output Message.
*
@@ -196,14 +207,14 @@
*/
public Policy getPolicyForOutputMessage(QName endPoint, QName operation) {
Policy operationPolicy = getPolicyForOperation(endPoint, operation);
- Policy outputMsgPolicy = getOutputMeassagePolicy(endPoint, operation);
-
+ Policy outputMsgPolicy = getOutputMeassagePolicy(endPoint, operation);
+
if (operationPolicy == null) {
return outputMsgPolicy;
-
+
} else if (outputMsgPolicy == null) {
return operationPolicy;
-
+
} else {
return (Policy) operationPolicy.merge(outputMsgPolicy);
}
@@ -214,144 +225,149 @@
* @param qname
* @return
*/
- public Policy getServicePolicy(QName qname)
- throws IllegalArgumentException {
-
+ public Policy getServicePolicy(QName qname) throws IllegalArgumentException {
+
WSDLService service = getDescription().getService(qname);
-
+
if (service == null) {
- throw new IllegalArgumentException("no such service:" + qname );
+ throw new IllegalArgumentException("no such service:" + qname);
}
-
+
Policy policy = getPolicyFromComponent(service);
return (policy == null) ? null : (Policy) policy.normalize();
}
-
+
public Policy getEndPointPolicy(QName qname) {
WSDLEndpoint endpoint = getEndpoint(qname);
if (endpoint == null) {
throw new IllegalArgumentException("no such portType:" + qname);
}
-
+
ArrayList policies = new ArrayList();
-
+
// wsdl:port
Assertion epPolicy = getPolicyFromComponent(endpoint);
if (epPolicy != null) {
- policies.add(getPolicyFromComponent(endpoint));
- }
+ policies.add(getPolicyFromComponent(endpoint));
+ }
//wsdl:binding
WSDLBinding wsdlBinding = endpoint.getBinding();
Assertion wsdlBindingPolicy = getPolicyFromComponent(wsdlBinding);
if (wsdlBindingPolicy != null) {
- policies.add(getPolicyFromComponent(wsdlBinding));
+ policies.add(getPolicyFromComponent(wsdlBinding));
}
-
+
//wsdl:portType
WSDLInterface wsdlInterface = wsdlBinding.getBoundInterface();
Assertion portTypePolicy = getPolicyFromComponent(wsdlInterface);
if (portTypePolicy != null) {
policies.add(getPolicyFromComponent(wsdlInterface));
}
-
- return getSinglePolicy(policies);
+
+ return getSinglePolicy(policies);
}
public Policy getOperationPolicy(QName eqame, QName oqname) {
- WSDLEndpoint endPoint = getEndpoint(eqame);
+ WSDLEndpoint endPoint = getEndpoint(eqame);
ArrayList list = new ArrayList();
-
+
//wsdl:binding/wsdl:operation
WSDLBinding binding = endPoint.getBinding();
- WSDLBindingOperation bindingOperation
- = (WSDLBindingOperation) binding.getBindingOperations().get(oqname);
-
+ WSDLBindingOperation bindingOperation = (WSDLBindingOperation) binding
+ .getBindingOperations().get(oqname);
+
Assertion bindingPolicy = getPolicyFromComponent(bindingOperation);
if (bindingPolicy != null) {
list.add(bindingPolicy);
}
-
+
// wsdl:portType/wsdl:operation
WSDLOperation wsdlOperation = bindingOperation.getOperation();
Assertion interfacePolicy = getPolicyFromComponent(wsdlOperation);
-
+
if (interfacePolicy != null) {
list.add(interfacePolicy);
-
+
}
return getSinglePolicy(list);
}
-
+
public Policy getInputMeassagePolicy(QName eqname, QName oqname) {
List policies = new ArrayList();
WSDLEndpoint endPoint = getEndpoint(eqname);
-
- // wsdl:binding/wsdl:operation/wsdl:input
- WSDLBindingOperation wsdlBindingOperation
- = endPoint.getBinding().getBindingOperation(oqname);
- WSDLBindingMessageReference bindingInput
- = wsdlBindingOperation.getInput();
-
- //List extensibilityAttributes = bindingInput.getExtensibilityAttributes();
- Policy bindingInputPolicy
- = getSinglePolicy(getPoliciesAsExtensibleElements(bindingInput));
+
+ // wsdl:binding/wsdl:operation/wsdl:input
+ WSDLBindingOperation wsdlBindingOperation = endPoint.getBinding()
+ .getBindingOperation(oqname);
+ WSDLBindingMessageReference bindingInput = wsdlBindingOperation
+ .getInput();
+
+ //List extensibilityAttributes =
+ // bindingInput.getExtensibilityAttributes();
+ Policy bindingInputPolicy = getSinglePolicy(getPoliciesAsExtensibleElements(bindingInput));
if (bindingInputPolicy != null) {
- policies.add(bindingInputPolicy);
- }
-
- // wsdl:portType/wsdl:operation/wsdl:input
+ policies.add(bindingInputPolicy);
+ }
+
+ // wsdl:portType/wsdl:operation/wsdl:input
WSDLOperation wsdlOperation = wsdlBindingOperation.getOperation();
MessageReference operationInput = wsdlOperation.getInputMessage();
- Policy operationInputPolicy
- = getSinglePolicy(getPoliciesAsExtensibilityAttribute(operationInput));
+ Policy operationInputPolicy = getSinglePolicy(getPoliciesAsExtensibilityAttribute(operationInput));
if (operationInputPolicy != null) {
policies.add(operationInputPolicy);
}
-
+
// wsdl:Message
// TODO
-
+
return getSinglePolicy(policies);
}
public Policy getOutputMeassagePolicy(QName endPointName, QName opName) {
List policies = new ArrayList();
WSDLEndpoint endPoint = getEndpoint(endPointName);
-
+
// wsdl:binding/wsdl:operation/wsdl:output
- WSDLBindingOperation wsdlBindingOperation
- = endPoint.getBinding().getBindingOperation(opName);
- WSDLBindingMessageReference bindingOutput
- = wsdlBindingOperation.getOutput();
- Policy bindingOutputPolicy
- = getSinglePolicy(getPoliciesAsExtensibleElements(bindingOutput));
+ WSDLBindingOperation wsdlBindingOperation = endPoint.getBinding()
+ .getBindingOperation(opName);
+ WSDLBindingMessageReference bindingOutput = wsdlBindingOperation
+ .getOutput();
+ Policy bindingOutputPolicy = getSinglePolicy(getPoliciesAsExtensibleElements(bindingOutput));
if (bindingOutputPolicy != null) {
- policies.add(getPolicyFromComponent(bindingOutput));
+ policies.add(getPolicyFromComponent(bindingOutput));
}
-
+
// wsdl:portType/wsdl:operation/wsdl:output
WSDLOperation wsdlOperation = wsdlBindingOperation.getOperation();
MessageReference operationOutput = wsdlOperation.getOutputMessage();
- Policy operationOutputPolicy
- = getSinglePolicy(getPoliciesAsExtensibilityAttribute(operationOutput));
+ Policy operationOutputPolicy = getSinglePolicy(getPoliciesAsExtensibilityAttribute(operationOutput));
if (operationOutputPolicy != null) {
policies.add(operationOutputPolicy);
}
-
+
// wsdl:Message
// TODO
-
+
return getSinglePolicy(policies);
}
- public Policy getFaultMeassagePolicy(QName endPointName, QName opName, QName fault) {
- throw new UnsupportedOperationException();
+ public Policy getFaultMeassagePolicy(QName endPointName, QName opName,
+ QName fault) {
+ throw new UnsupportedOperationException();
+ }
+
+ public PolicyRegistry getPolicyRegistry() {
+ return reg;
+ }
+
+ public Element getSchemaElement(String uri) {
+ return schemaRegistry.lookup(uri);
}
private Policy getSinglePolicy(List policies) {
Policy result = null;
-
+
if (!policies.isEmpty()) {
Iterator iter = policies.iterator();
result = (Policy) iter.next();
@@ -362,7 +378,7 @@
}
return result;
}
-
+
private WSDLEndpoint getEndpoint(QName epName) {
Iterator iterator = wsdlDescription.getServices().values().iterator();
while (iterator.hasNext()) {
@@ -373,85 +389,91 @@
}
return null;
}
-
+
private Policy getPolicyFromComponent(Component component) {
- List list = new ArrayList();
- List policiesAsAttributes = getPoliciesAsExtensibilityAttribute(component),
- policiesAsElements = getPoliciesAsExtensibleElements(component);
-
+ List list = new ArrayList();
+ List policiesAsAttributes = getPoliciesAsExtensibilityAttribute(component), policiesAsElements = getPoliciesAsExtensibleElements(component);
+
list.addAll(policiesAsAttributes);
list.addAll(policiesAsElements);
-
- return getSinglePolicy(list);
+
+ return getSinglePolicy(list);
}
private List getPoliciesAsExtensibilityAttribute(Component component) {
Iterator iterator;
List policyURIStrings = new ArrayList();
- List policies = new ArrayList();
+ List policies = new ArrayList();
iterator = component.getExtensibilityAttributes().iterator();
-
+
while (iterator.hasNext()) {
- WSDLExtensibilityAttribute exAttribute
- = (WSDLExtensibilityAttribute) iterator.next();
+ WSDLExtensibilityAttribute exAttribute = (WSDLExtensibilityAttribute) iterator
+ .next();
QName qname = exAttribute.getKey();
-
- if (qname.getNamespaceURI().equals(PolicyConstants.WS_POLICY_NAMESPACE_URI) &&
- qname.getLocalPart().equals("PolicyURIs")) {
+
+ if (qname.getNamespaceURI().equals(
+ PolicyConstants.WS_POLICY_NAMESPACE_URI)
+ && qname.getLocalPart().equals("PolicyURIs")) {
String value = exAttribute.getValue().toString();
String[] uriStrings = value.split(" ");
-
+
for (int i = 0; i < uriStrings.length; i++) {
policyURIStrings.add(uriStrings[i].trim());
- }
+ }
}
}
-
+
if (!policyURIStrings.isEmpty()) {
iterator = policyURIStrings.iterator();
-
+
do {
String policyURIString = (String) iterator.next();
Policy policy = getPolicyFromURI(policyURIString);
- policies.add(policy);
+ policies.add(policy);
} while (iterator.hasNext());
- }
+ }
return policies;
}
-
+
private List getPoliciesAsExtensibleElements(Component component) {
ArrayList policies = new ArrayList();
Iterator iterator = component.getExtensibilityElements().iterator();
-
+
while (iterator.hasNext()) {
Object extensibilityElement = iterator.next();
if (extensibilityElement instanceof DefaultExtensibilityElement) {
- DefaultExtensibilityElement defaultExtensibilityElement
- = (DefaultExtensibilityElement) extensibilityElement;
+ DefaultExtensibilityElement defaultExtensibilityElement = (DefaultExtensibilityElement) extensibilityElement;
Element element = defaultExtensibilityElement.getElement();
-
- if (element.getNamespaceURI().equals(PolicyConstants.WS_POLICY_NAMESPACE_URI)
+
+ if (element.getNamespaceURI().equals(
+ PolicyConstants.WS_POLICY_NAMESPACE_URI)
&& element.getLocalName().equals("PolicyReference")) {
policies.add(getPolicyFromPolicyRef(element));
-
- } else if (element.getNamespaceURI().equals(PolicyConstants.WS_POLICY_NAMESPACE_URI)
+
+ } else if (element.getNamespaceURI().equals(
+ PolicyConstants.WS_POLICY_NAMESPACE_URI)
&& element.getLocalName().equals("Policy")) {
policies.add(getPolicyFromElement(element));
}
}
-// WSDLExtensibilityElement exElement = (WSDLExtensibilityElement) iterator.next();
-// Element element = (Element) exElement.getElement();
-// if (element.getNamespaceURI().equals(WSPConstants.WS_POLICY_NAMESPACE_URI) && element.getLocalName().equals("PolicyReference")) {
-// policyList.add(getPolicyAsPolicyRef(element));
-//
-// } else if (element.getNamespaceURI().equals(WSPConstants.WS_POLICY_NAMESPACE_URI) && element.getLocalName().equals("Policy")) {
-// policyList.add(getPolicyAsElement(element));
-// }
-
+ // WSDLExtensibilityElement exElement = (WSDLExtensibilityElement)
+ // iterator.next();
+ // Element element = (Element) exElement.getElement();
+ // if
+ // (element.getNamespaceURI().equals(WSPConstants.WS_POLICY_NAMESPACE_URI)
+ // && element.getLocalName().equals("PolicyReference")) {
+ // policyList.add(getPolicyAsPolicyRef(element));
+ //
+ // } else if
+ // (element.getNamespaceURI().equals(WSPConstants.WS_POLICY_NAMESPACE_URI)
+ // && element.getLocalName().equals("Policy")) {
+ // policyList.add(getPolicyAsElement(element));
+ // }
+
}
return policies;
}
-
+
private Policy getPolicyFromPolicyRef(Element element) {
String policyURIString = element.getAttribute("URI");
if (policyURIString != null && policyURIString.length() != 0) {
@@ -459,52 +481,67 @@
}
return null;
}
-
+
private Policy getPolicyFromElement(Element element) {
InputStream policyInputStream = createInputStream(element);
PolicyReader reader = PolicyFactory.getInstance().getPolicyReader();
return reader.readPolicy(policyInputStream);
}
-
+
private InputStream createInputStream(Element element) {
- // some improvements ..???
+ // some improvements ..???
StringWriter sw = new StringWriter();
DOM2Writer.serializeAsXML(element, sw);
return new ByteArrayInputStream(sw.toString().getBytes());
}
-
+
private Policy getPolicyFromURI(String policyURIString) {
return reg.lookup(policyURIString);
}
-
+
public String getTargetURI() {
return getDescription().getTargetNameSpace();
}
+ private void populateSchemaRegistry() {
+ WSDLDescription des = getDescription();
+ WSDLTypes types = des.getTypes();
+
+ Iterator iterator = types.getExtensibilityElements().iterator();
+ while (iterator.hasNext()) {
+ Object extElement = iterator.next();
+ if (extElement instanceof Schema) {
+ Element schemaElement = ((Schema) extElement).getElement();
+ schemaRegistry.register(schemaElement
+ .getAttribute("targetNamespace"), schemaElement);
+ }
+ }
+ }
+
private void populatePolicyRegistry() {
Iterator iterator;
WSDLDescription des = getDescription();
List extElements = des.getExtensibilityElements();
registerPoliciesAsElements(extElements);
-
+
iterator = des.getWsdlInterfaces().values().iterator();
while (iterator.hasNext()) {
WSDLInterface interfaze = (WSDLInterface) iterator.next();
registerPoliciesInWSDLInterface(interfaze);
}
-
+
iterator = des.getBindings().values().iterator();
while (iterator.hasNext()) {
WSDLBinding wsdlBinding = (WSDLBinding) iterator.next();
registerPoliciesInWSDLBinding(wsdlBinding);
}
-
+
iterator = des.getServices().values().iterator();
while (iterator.hasNext()) {
- WSDLService service = (WSDLService) iterator.next();
+ WSDLService service = (WSDLService) iterator.next();
registerPoliciesInService(service);
}
-
+
iterator = reg.keys();
while (iterator.hasNext()) {
String uriString = (String) iterator.next();
@@ -513,10 +550,12 @@
try {
URI policyURI = new URI(uriString);
URL policyURL = policyURI.toURL();
- PolicyReader reader = PolicyFactory.getInstance().getPolicyReader();
- Policy newPolicy = reader.readPolicy(policyURL.openStream());
+ PolicyReader reader = PolicyFactory.getInstance()
+ .getPolicyReader();
+ Policy newPolicy = reader
+ .readPolicy(policyURL.openStream());
reg.register(uriString, newPolicy);
-
+
} catch (Exception e) {
e.printStackTrace();
reg.unregister(uriString);
@@ -529,40 +568,46 @@
private void registerPoliciesInService(WSDLService service) {
List extensibilityElements = service.getExtensibilityElements();
registerPoliciesAsElements(extensibilityElements);
-
+
Iterator iterator = service.getEndpoints().values().iterator();
while (iterator.hasNext()) {
WSDLEndpoint wsdlEndpoint = (WSDLEndpoint) iterator.next();
extensibilityElements = wsdlEndpoint.getExtensibilityElements();
- registerPoliciesAsElements(extensibilityElements);
- }
+ registerPoliciesAsElements(extensibilityElements);
+ }
}
-
+
private void registerPoliciesInWSDLBinding(WSDLBinding wsdlBinding) {
List extensibilityElements = wsdlBinding.getExtensibilityElements();
registerPoliciesAsElements(extensibilityElements);
-
- Iterator iterator = wsdlBinding.getBindingOperations().values().iterator();
+
+ Iterator iterator = wsdlBinding.getBindingOperations().values()
+ .iterator();
while (iterator.hasNext()) {
- WSDLBindingOperation wsdlBindingOperation = (WSDLBindingOperation) iterator.next();
+ WSDLBindingOperation wsdlBindingOperation = (WSDLBindingOperation) iterator
+ .next();
registerPoliciesInBindOperation(wsdlBindingOperation);
- }
+ }
}
-
- private void registerPoliciesInBindOperation(WSDLBindingOperation wsdlBindingOperation) {
- List extensibilityElements = wsdlBindingOperation.getExtensibilityElements();
+
+ private void registerPoliciesInBindOperation(
+ WSDLBindingOperation wsdlBindingOperation) {
+ List extensibilityElements = wsdlBindingOperation
+ .getExtensibilityElements();
registerPoliciesAsElements(extensibilityElements);
-
+
if (wsdlBindingOperation.getInput() != null) {
- extensibilityElements = wsdlBindingOperation.getInput().getExtensibilityElements();
+ extensibilityElements = wsdlBindingOperation.getInput()
+ .getExtensibilityElements();
registerPoliciesAsElements(extensibilityElements);
}
if (wsdlBindingOperation.getOutput() != null) {
- extensibilityElements = wsdlBindingOperation.getOutput().getExtensibilityElements();
+ extensibilityElements = wsdlBindingOperation.getOutput()
+ .getExtensibilityElements();
registerPoliciesAsElements(extensibilityElements);
}
}
-
+
private void registerPoliciesInWSDLInterface(WSDLInterface wsdlInterface) {
registerPoliciesInElement(wsdlInterface);
Iterator iterator = wsdlInterface.getOperations().values().iterator();
@@ -571,63 +616,64 @@
registerPoliciesInWSDLOperation(wsdlOperation);
}
}
-
- private void registerPoliciesInWSDLOperation(WSDLOperation wsdlOperation){
+
+ private void registerPoliciesInWSDLOperation(WSDLOperation wsdlOperation) {
List extensibilityElements = wsdlOperation.getExtensibilityElements();
registerPoliciesAsElements(extensibilityElements);
-
+
if (wsdlOperation.getInputMessage() != null) {
registerPoliciesInElement(wsdlOperation.getInputMessage());
}
if (wsdlOperation.getOutputMessage() != null) {
- registerPoliciesInElement(wsdlOperation.getOutputMessage());
+ registerPoliciesInElement(wsdlOperation.getOutputMessage());
}
}
-
+
private void registerPoliciesInElement(Component component) {
registerPoliciesAsAttribute(component.getExtensibilityAttributes());
registerPoliciesAsElements(component.getExtensibilityElements());
}
-
+
private void registerPoliciesAsElements(List elements) {
Iterator iterator = elements.iterator();
while (iterator.hasNext()) {
Object extensibilityElement = iterator.next();
-
+
if (extensibilityElement instanceof DefaultExtensibilityElement) {
- DefaultExtensibilityElement defaultExtensibilityElement
- = (DefaultExtensibilityElement) extensibilityElement;
+ DefaultExtensibilityElement defaultExtensibilityElement = (DefaultExtensibilityElement) extensibilityElement;
Element element = defaultExtensibilityElement.getElement();
-
- if (element.getNamespaceURI().equals(PolicyConstants.WS_POLICY_NAMESPACE_URI)
+
+ if (element.getNamespaceURI().equals(
+ PolicyConstants.WS_POLICY_NAMESPACE_URI)
&& element.getLocalName().equals("PolicyReference")) {
String uriString = element.getAttribute("URI");
-
+
if (reg.lookup(uriString) == null) {
- reg.register(uriString, null);
+ reg.register(uriString, null);
}
- }
-
- String policyID
- = element.getAttributeNS(PolicyConstants.WSU_NAMESPACE_URI, "Id");
-
+ }
+
+ String policyID = element.getAttributeNS(
+ PolicyConstants.WSU_NAMESPACE_URI, "Id");
+
if (policyID.length() != 0) {
registerPolicyElement(element);
}
}
- }
+ }
}
-
+
private void registerPoliciesAsAttribute(List elements) {
Iterator iterator = elements.iterator();
-
+
while (iterator.hasNext()) {
- WSDLExtensibilityAttribute wsdlExtensibilityAttribute
- = (WSDLExtensibilityAttribute) iterator.next();
+ WSDLExtensibilityAttribute wsdlExtensibilityAttribute = (WSDLExtensibilityAttribute) iterator
+ .next();
QName qname = wsdlExtensibilityAttribute.getKey();
-
- if (qname.getNamespaceURI().equals(PolicyConstants.WS_POLICY_NAMESPACE_URI) &&
- qname.getLocalPart().equals("PolicyURIs")) {
+
+ if (qname.getNamespaceURI().equals(
+ PolicyConstants.WS_POLICY_NAMESPACE_URI)
+ && qname.getLocalPart().equals("PolicyURIs")) {
String value = wsdlExtensibilityAttribute.getValue().toString();
String[] policyURIs = value.split(" ");
for (int i = 0; i < policyURIs.length; i++) {
@@ -636,11 +682,11 @@
if (reg.lookup(policyURI) == null) {
reg.register(policyURI, null);
}
- }
+ }
}
}
}
-
+
private void registerPolicyElement(Element element) {
InputStream elementInputStream = createInputStream(element);
PolicyReader reader = PolicyFactory.getInstance().getPolicyReader();
Modified: webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyReader.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyReader.java?rev=355072&r1=355071&r2=355072&view=diff
==============================================================================
--- webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyReader.java (original)
+++ webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyReader.java Thu Dec 8 03:25:42 2005
@@ -16,7 +16,6 @@
package org.apache.ws.policy.util;
-
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Hashtable;
@@ -44,129 +43,150 @@
* @author Sanka Samaranayake (sanka@apache.org)
*/
public class PolicyReader {
- PolicyReader() {
- }
+ PolicyReader() {
+ }
+
+ public Policy readPolicy(InputStream in) {
+ try {
+ XMLStreamReader reader = XMLInputFactory.newInstance()
+ .createXMLStreamReader(in);
+ OMXMLParserWrapper builder = OMXMLBuilderFactory
+ .createStAXOMBuilder(OMAbstractFactory.getOMFactory(),
+ reader);
+
+ OMElement element = builder.getDocumentElement();
+ return readPolicy(element);
+
+ } catch (XMLStreamException ex) {
+ throw new RuntimeException("error : " + ex.getMessage());
+ }
+ }
+
+ private Assertion readAssertion(OMElement element) {
+ String namespace = element.getNamespace().getName();
+ String localName = element.getLocalName();
+
+ if (!(namespace.equals(PolicyConstants.WS_POLICY_NAMESPACE_URI))) {
+ return readPrimitiveAssertion(element);
+ }
+
+ if (localName.equals(PolicyConstants.WS_POLICY)) {
+ return readPolicy(element);
+
+ } else if (localName.equals(PolicyConstants.AND_COMPOSITE_ASSERTION)) {
+ return readAndComposite(element);
+
+ } else if (localName.equals(PolicyConstants.XOR_COMPOSITE_ASSERTION)) {
+ return readXorComposite(element);
+
+ } else if (localName.equals(PolicyConstants.WS_POLICY_REFERENCE)) {
+ return readPolicyReference(element);
+
+ } else {
+ throw new RuntimeException("unknown element ..");
+ }
+ }
+
+ private Policy readPolicy(OMElement element) {
+ Policy policy = new Policy();
+
+ OMAttribute attri;
+ attri = element.getAttribute(new QName(
+ PolicyConstants.WSU_NAMESPACE_URI, "Id"));
+ if (attri != null) {
+ policy.setId(attri.getAttributeValue());
+ }
+
+ attri = element.getAttribute(new QName("base", "", "xml"));
+ if (attri != null) {
+ policy.setBase(attri.getAttributeValue());
+ }
+
+ policy.addTerms(readTerms(element));
+ return policy;
+ }
+
+ private AndCompositeAssertion readAndComposite(OMElement element) {
+ AndCompositeAssertion andCompositeAssertion = new AndCompositeAssertion();
+ andCompositeAssertion.addTerms(readTerms(element));
+ return andCompositeAssertion;
+ }
+
+ private XorCompositeAssertion readXorComposite(OMElement element) {
+ XorCompositeAssertion xorCompositeAssertion = new XorCompositeAssertion();
+ xorCompositeAssertion.addTerms(readTerms(element));
+ return xorCompositeAssertion;
+ }
- public Policy readPolicy(InputStream in) {
- try {
- XMLStreamReader reader = XMLInputFactory.newInstance()
- .createXMLStreamReader(in);
- OMXMLParserWrapper builder = OMXMLBuilderFactory
- .createStAXOMBuilder(OMAbstractFactory.getOMFactory(),
- reader);
-
- OMElement element = builder.getDocumentElement();
- return readPolicy(element);
-
- } catch (XMLStreamException ex) {
- throw new RuntimeException("error : " + ex.getMessage());
- }
- }
-
- private Assertion readAssertion(OMElement element) {
- String namespace = element.getNamespace().getName();
- String localName = element.getLocalName();
-
- if (!(namespace.equals(PolicyConstants.WS_POLICY_NAMESPACE_URI))) {
- return readPrimitiveAssertion(element);
- }
-
- if (localName.equals(PolicyConstants.WS_POLICY)) {
- return readPolicy(element);
-
- } else if (localName.equals(PolicyConstants.AND_COMPOSITE_ASSERTION)) {
- return readAndComposite(element);
-
- } else if (localName.equals(PolicyConstants.XOR_COMPOSITE_ASSERTION)) {
- return readXorComposite(element);
-
- } else if (localName.equals(PolicyConstants.WS_POLICY_REFERENCE)) {
- return readPolicyReference(element);
-
- } else {
- throw new RuntimeException("unknown element ..");
- }
- }
-
- private Policy readPolicy(OMElement element) {
- Policy policy = new Policy();
- policy.addTerms(readTerms(element));
- return policy;
- }
-
- private AndCompositeAssertion readAndComposite(OMElement element) {
- AndCompositeAssertion andCompositeAssertion = new AndCompositeAssertion();
- andCompositeAssertion.addTerms(readTerms(element));
- return andCompositeAssertion;
- }
-
- private XorCompositeAssertion readXorComposite(OMElement element) {
- XorCompositeAssertion xorCompositeAssertion = new XorCompositeAssertion();
- xorCompositeAssertion.addTerms(readTerms(element));
- return xorCompositeAssertion;
- }
-
- private PolicyReference readPolicyReference(OMElement element) {
- OMAttribute attribute = element.getAttribute(new QName("URI"));
- return new PolicyReference(attribute.getAttributeValue());
- }
-
- private PrimitiveAssertion readPrimitiveAssertion(OMElement element) {
+ private PolicyReference readPolicyReference(OMElement element) {
+ OMAttribute attribute = element.getAttribute(new QName("URI"));
+ return new PolicyReference(attribute.getAttributeValue());
+ }
+
+ private PrimitiveAssertion readPrimitiveAssertion(OMElement element) {
QName qname = element.getQName();
PrimitiveAssertion result = new PrimitiveAssertion(qname);
-
+
result.setAttributes(getAttributes(element));
-
+
+ String isOptional = result.getAttribute(new QName(
+ PolicyConstants.WS_POLICY_NAMESPACE_URI, "Optional"));
+ if (isOptional != null && Boolean.getBoolean(isOptional)) {
+ result.setOptional(true);
+ }
+
// setting the text value ..
String strValue = element.getText();
-
+
if (strValue != null && strValue.length() != 0) {
- result.setStrValue(strValue);
+ result.setStrValue(strValue);
}
-
+
//CHECK ME
Iterator childElements = element.getChildElements();
-
+
while (childElements.hasNext()) {
OMElement childElement = (OMElement) childElements.next();
-
- if (childElement.getNamespace().getName().equals(PolicyConstants.WS_POLICY_NAMESPACE_URI)
- && childElement.getLocalName().equals(PolicyConstants.WS_POLICY)) {
+
+ if (childElement.getNamespace().getName().equals(
+ PolicyConstants.WS_POLICY_NAMESPACE_URI)
+ && childElement.getLocalName().equals(
+ PolicyConstants.WS_POLICY)) {
Policy policy = readPolicy(childElement);
result.addTerm(policy);
-
+
} else {
PrimitiveAssertion pa = readPrimitiveAssertion(childElement);
- result.addTerm(pa);
+ result.addTerm(pa);
+ }
+ }
+ return result;
+ }
+
+ private ArrayList readTerms(OMElement element) {
+ ArrayList terms = new ArrayList();
+ Iterator childElements = element.getChildren();
+
+ while (childElements.hasNext()) {
+ Object obj = childElements.next();
+
+ if (obj instanceof OMElement) {
+ OMElement e = (OMElement) obj;
+ terms.add(readAssertion(e));
}
- }
- return result;
+ }
+ return terms;
}
-
- private ArrayList readTerms(OMElement element) {
- ArrayList terms = new ArrayList();
- Iterator childElements = element.getChildren();
-
- while (childElements.hasNext()) {
- Object obj = childElements.next();
-
- if (obj instanceof OMElement) {
- OMElement e = (OMElement) obj;
- terms.add(readAssertion(e));
- }
- }
- return terms;
- }
-
- private Hashtable getAttributes(OMElement element) {
- Hashtable attributes = new Hashtable();
- Iterator iterator = element.getAllAttributes();
-
- while (iterator.hasNext()) {
- OMAttribute attribute = (OMAttribute) iterator.next();
- attributes.put(attribute.getQName(), attribute.getAttributeValue());
- }
- return attributes;
- }
+ private Hashtable getAttributes(OMElement element) {
+ Hashtable attributes = new Hashtable();
+ Iterator iterator = element.getAllAttributes();
+
+ while (iterator.hasNext()) {
+ OMAttribute attribute = (OMAttribute) iterator.next();
+ attributes.put(attribute.getQName(), attribute.getAttributeValue());
+ }
+
+ return attributes;
+ }
}
Modified: webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyWriter.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyWriter.java?rev=355072&r1=355071&r2=355072&view=diff
==============================================================================
--- webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyWriter.java (original)
+++ webservices/commons/trunk/policy/src/org/apache/ws/policy/util/PolicyWriter.java Thu Dec 8 03:25:42 2005
@@ -16,7 +16,6 @@
package org.apache.ws.policy.util;
-
import java.io.OutputStream;
import java.util.Hashtable;
import java.util.Iterator;
@@ -39,138 +38,157 @@
* @author Sanka Samaranayake (sanka@apache.org)
*/
public class PolicyWriter {
-
- PolicyWriter() {
- }
-
- public void writePolicy(Policy policy, OutputStream output) {
- XMLStreamWriter writer = null;
- try {
- writer =
- XMLOutputFactory.newInstance().createXMLStreamWriter(output);
- writePolicy(policy, writer);
-
- writer.flush();
-
- } catch (XMLStreamException ex) {
- throw new RuntimeException(ex);
- }
- }
-
- private void writePolicy(Policy policy, XMLStreamWriter writer) throws XMLStreamException {
- writer.writeStartElement(PolicyConstants.WS_POLICY_PREFIX, PolicyConstants.WS_POLICY,
- PolicyConstants.WSU_NAMESPACE_URI);
-
- Iterator iterator = policy.getTerms().iterator();
- while (iterator.hasNext()) {
- Assertion term = (Assertion) iterator.next();
- writeAssertion(term, writer);
- }
-
- writer.writeEndElement();
- }
-
- private void writeAssertion(Assertion assertion,
- XMLStreamWriter writer) throws XMLStreamException {
- if (assertion instanceof PrimitiveAssertion) {
- writePrimitiveAssertion((PrimitiveAssertion) assertion, writer);
-
- } else if (assertion instanceof AndCompositeAssertion) {
- writeAndCompositeAssertion((AndCompositeAssertion) assertion, writer);
-
- } else if (assertion instanceof XorCompositeAssertion) {
- writeXorCompositeAssertion((XorCompositeAssertion) assertion, writer);
-
- } else if (assertion instanceof PolicyReference) {
- writePolicyReference((PolicyReference) assertion, writer);
-
- } else if (assertion instanceof Policy) {
- writePolicy((Policy) assertion, writer);
- } else {
- throw new RuntimeException("unknown element type");
- }
- }
-
- private void writeAndCompositeAssertion(AndCompositeAssertion assertion,
- XMLStreamWriter writer) throws XMLStreamException {
- writer.writeStartElement(PolicyConstants.WS_POLICY_PREFIX,
- PolicyConstants.AND_COMPOSITE_ASSERTION, PolicyConstants.WS_POLICY_NAMESPACE_URI);
-
- List terms = assertion.getTerms();
- writeTerms(terms, writer);
-
- writer.writeEndElement();
- }
-
- private void writeXorCompositeAssertion(XorCompositeAssertion assertion,
- XMLStreamWriter writer) throws XMLStreamException {
- writer.writeStartElement(PolicyConstants.WS_POLICY_PREFIX,
- PolicyConstants.XOR_COMPOSITE_ASSERTION, PolicyConstants.WS_POLICY_NAMESPACE_URI);
-
- List terms = assertion.getTerms();
- writeTerms(terms, writer);
-
- writer.writeEndElement();
- }
-
- private void writePrimitiveAssertion(PrimitiveAssertion assertion,
- XMLStreamWriter writer) throws XMLStreamException {
- QName qname = assertion.getName();
-
- String prefix = qname.getPrefix();
- if (prefix != null) {
- writer.writeStartElement(qname.getPrefix(), qname.getLocalPart(),
- qname.getNamespaceURI());
-
- } else {
- writer.writeStartElement(qname.getLocalPart(),
- qname.getNamespaceURI());
- }
-
- Hashtable attributes = assertion.getAttributes();
- writeAttributes(attributes, writer);
-
- String text = (String) assertion.getStrValue();
- if (text != null) {
- writer.writeCharacters(text);
- }
-
- List terms = assertion.getTerms();
- writeTerms(terms, writer);
-
- writer.writeEndElement();
- }
-
- private void writePolicyReference(PolicyReference assertion,
- XMLStreamWriter writer) throws XMLStreamException {
- }
-
- private void writeTerms(List terms,
- XMLStreamWriter writer) throws XMLStreamException {
-
- Iterator iterator = terms.iterator();
- while (iterator.hasNext()) {
- Assertion assertion = (Assertion) iterator.next();
- writeAssertion(assertion, writer);
- }
- }
-
- private void writeAttributes(Hashtable attributes, XMLStreamWriter writer)
- throws XMLStreamException {
-
- Iterator iterator = attributes.keySet().iterator();
- while (iterator.hasNext()) {
- QName qname = (QName) iterator.next();
- String value = (String) attributes.get(qname);
-
- String prefix = qname.getPrefix();
- if (prefix != null) {
- writer.writeAttribute(prefix, qname.getNamespaceURI(),
- qname.getLocalPart(), value);
- } else {
- writer.writeAttribute(qname.getNamespaceURI(),
- qname.getLocalPart(), value);
- }
- }
- }
+
+ private int num = 1;
+
+ PolicyWriter() {
+ }
+
+ public void writePolicy(Policy policy, OutputStream output) {
+ XMLStreamWriter writer = null;
+ try {
+ writer = XMLOutputFactory.newInstance().createXMLStreamWriter(
+ output);
+ writePolicy(policy, writer);
+
+ writer.flush();
+
+ } catch (XMLStreamException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ private void writePolicy(Policy policy, XMLStreamWriter writer)
+ throws XMLStreamException {
+ writer.writeStartElement(PolicyConstants.WS_POLICY_PREFIX,
+ PolicyConstants.WS_POLICY);
+ writer.writeNamespace(PolicyConstants.WS_POLICY_PREFIX,
+ PolicyConstants.WS_POLICY_NAMESPACE_URI);
+
+ if (policy.getId() != null) {
+ writer.writeAttribute("wsu", PolicyConstants.WSU_NAMESPACE_URI,
+ "Id", policy.getId());
+ }
+
+ Iterator iterator = policy.getTerms().iterator();
+ while (iterator.hasNext()) {
+ Assertion term = (Assertion) iterator.next();
+ writeAssertion(term, writer);
+ }
+
+ writer.writeEndElement();
+ }
+
+ private void writeAssertion(Assertion assertion, XMLStreamWriter writer)
+ throws XMLStreamException {
+ if (assertion instanceof PrimitiveAssertion) {
+ writePrimitiveAssertion((PrimitiveAssertion) assertion, writer);
+
+ } else if (assertion instanceof AndCompositeAssertion) {
+ writeAndCompositeAssertion((AndCompositeAssertion) assertion,
+ writer);
+
+ } else if (assertion instanceof XorCompositeAssertion) {
+ writeXorCompositeAssertion((XorCompositeAssertion) assertion,
+ writer);
+
+ } else if (assertion instanceof PolicyReference) {
+ writePolicyReference((PolicyReference) assertion, writer);
+
+ } else if (assertion instanceof Policy) {
+ writePolicy((Policy) assertion, writer);
+ } else {
+ throw new RuntimeException("unknown element type");
+ }
+ }
+
+ private void writeAndCompositeAssertion(AndCompositeAssertion assertion,
+ XMLStreamWriter writer) throws XMLStreamException {
+ writer.writeStartElement(PolicyConstants.WS_POLICY_PREFIX,
+ PolicyConstants.AND_COMPOSITE_ASSERTION,
+ PolicyConstants.WS_POLICY_NAMESPACE_URI);
+
+ List terms = assertion.getTerms();
+ writeTerms(terms, writer);
+
+ writer.writeEndElement();
+ }
+
+ private void writeXorCompositeAssertion(XorCompositeAssertion assertion,
+ XMLStreamWriter writer) throws XMLStreamException {
+ writer.writeStartElement(PolicyConstants.WS_POLICY_PREFIX,
+ PolicyConstants.XOR_COMPOSITE_ASSERTION,
+ PolicyConstants.WS_POLICY_NAMESPACE_URI);
+
+ List terms = assertion.getTerms();
+ writeTerms(terms, writer);
+
+ writer.writeEndElement();
+ }
+
+ private void writePrimitiveAssertion(PrimitiveAssertion assertion,
+ XMLStreamWriter writer) throws XMLStreamException {
+ QName qname = assertion.getName();
+
+ String prefix = qname.getPrefix();
+ if (prefix != null) {
+ writer.writeStartElement(qname.getPrefix(), qname.getLocalPart());
+ writer.writeNamespace(qname.getPrefix(), qname.getNamespaceURI());
+
+ } else {
+ writer.writeStartElement(qname.getLocalPart(), qname
+ .getNamespaceURI());
+ writer.writeNamespace(generateNamespace(), qname.getNamespaceURI());
+ }
+
+ Hashtable attributes = assertion.getAttributes();
+ writeAttributes(attributes, writer);
+
+ String text = (String) assertion.getStrValue();
+ if (text != null) {
+ writer.writeCharacters(text);
+ }
+
+ List terms = assertion.getTerms();
+ writeTerms(terms, writer);
+
+ writer.writeEndElement();
+ }
+
+ private void writePolicyReference(PolicyReference assertion,
+ XMLStreamWriter writer) throws XMLStreamException {
+ }
+
+ private void writeTerms(List terms, XMLStreamWriter writer)
+ throws XMLStreamException {
+
+ Iterator iterator = terms.iterator();
+ while (iterator.hasNext()) {
+ Assertion assertion = (Assertion) iterator.next();
+ writeAssertion(assertion, writer);
+ }
+ }
+
+ private void writeAttributes(Hashtable attributes, XMLStreamWriter writer)
+ throws XMLStreamException {
+
+ Iterator iterator = attributes.keySet().iterator();
+ while (iterator.hasNext()) {
+ QName qname = (QName) iterator.next();
+ String value = (String) attributes.get(qname);
+
+ String prefix = qname.getPrefix();
+ if (prefix != null) {
+ writer.writeAttribute(prefix, qname.getNamespaceURI(), qname
+ .getLocalPart(), value);
+ } else {
+ writer.writeAttribute(qname.getNamespaceURI(), qname
+ .getLocalPart(), value);
+ }
+ }
+ }
+
+ private String generateNamespace() {
+ return "ns" + num++;
+ }
}