001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */
019: package org.apache.axis2.util;
020:
021: import org.apache.neethi.Assertion;
022: import org.apache.neethi.Constants;
023: import org.apache.neethi.Policy;
024:
025: import javax.xml.namespace.QName;
026: import javax.xml.stream.XMLOutputFactory;
027: import javax.xml.stream.XMLStreamWriter;
028: import java.io.OutputStream;
029: import java.util.ArrayList;
030: import java.util.Iterator;
031: import java.util.List;
032:
033: public class ExternalPolicySerializer {
034:
035: private List assertions2Filter = new ArrayList();
036:
037: public void addAssertionToFilter(QName name) {
038: assertions2Filter.add(name);
039: }
040:
041: public void setAssertionsToFilter(List assertions2Filter) {
042: this .assertions2Filter = assertions2Filter;
043: }
044:
045: public List getAssertionsToFilter() {
046: return assertions2Filter;
047: }
048:
049: public void serialize(Policy policy, OutputStream os) {
050:
051: try {
052: XMLStreamWriter writer = XMLOutputFactory.newInstance()
053: .createXMLStreamWriter(os);
054: policy = (Policy) policy.normalize(false);
055:
056: String prefix = writer.getPrefix(Constants.ATTR_WSP);
057: String wsuPrefix = writer.getPrefix(Constants.URI_WSU_NS);
058:
059: if (prefix == null) {
060: prefix = Constants.ATTR_WSP;
061: writer.setPrefix(prefix, Constants.URI_POLICY_NS);
062: }
063:
064: if (wsuPrefix == null) {
065: // TODO move this 'wsu' value to Neethi2 constants
066: wsuPrefix = "wsu";
067: writer.setPrefix(wsuPrefix, Constants.URI_WSU_NS);
068: }
069:
070: // write <wsp:Policy tag
071:
072: writer.writeStartElement(prefix, Constants.ELEM_POLICY,
073: Constants.URI_POLICY_NS);
074: // write xmlns:wsp=".."
075: writer.writeNamespace(prefix, Constants.URI_POLICY_NS);
076:
077: String name = policy.getName();
078: if (name != null) {
079: // write Name=".."
080: writer.writeAttribute(Constants.ATTR_NAME, name);
081: }
082:
083: String id = policy.getId();
084: if (id != null) {
085: // write wsu:Id=".."
086: writer.writeAttribute(Constants.ATTR_ID, id);
087: }
088:
089: writer.writeStartElement(Constants.ATTR_WSP,
090: Constants.ELEM_EXACTLYONE, Constants.URI_POLICY_NS);
091: // write <wsp:ExactlyOne>
092:
093: List assertionList;
094:
095: for (Iterator iterator = policy.getAlternatives(); iterator
096: .hasNext();) {
097:
098: assertionList = (List) iterator.next();
099:
100: // write <wsp:All>
101: writer.writeStartElement(Constants.ATTR_WSP,
102: Constants.ELEM_ALL, Constants.URI_POLICY_NS);
103:
104: Assertion assertion;
105:
106: for (Iterator assertions = assertionList.iterator(); assertions
107: .hasNext();) {
108: assertion = (Assertion) assertions.next();
109: if (assertions2Filter.contains(assertion.getName())) {
110: // since this is an assertion to filter, we will not serialize this
111: continue;
112: }
113: assertion.serialize(writer);
114: }
115:
116: // write </wsp:All>
117: writer.writeEndElement();
118: }
119:
120: // write </wsp:ExactlyOne>
121: writer.writeEndElement();
122: // write </wsp:Policy>
123: writer.writeEndElement();
124:
125: writer.flush();
126:
127: } catch (Exception ex) {
128:
129: throw new RuntimeException(ex);
130:
131: }
132: }
133: }
|