You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by gi...@apache.org on 2012/05/13 19:27:13 UTC
svn commit: r1337945 [4/5] - in /webservices/wss4j/branches/swssf: ./
cxf-integration/src/main/java/org/swssf/cxfIntegration/interceptor/
cxf-integration/src/test/java/org/swssf/cxfIntegration/test/integration/
cxf-integration/src/test/resources/ cxf-i...
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/ext/XMLSecurityUtils.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/ext/XMLSecurityUtils.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/ext/XMLSecurityUtils.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/ext/XMLSecurityUtils.java Sun May 13 17:27:10 2012
@@ -57,10 +57,6 @@ public class XMLSecurityUtils {
return reference;
}
- public static Attribute getReferenceIDAttribute(StartElement startElement) {
- return startElement.getAttributeByName(XMLSecurityConstants.ATT_NULL_Id);
- }
-
/**
* Returns the XMLEvent type in String form
*
@@ -140,60 +136,68 @@ public class XMLSecurityUtils {
}
@SuppressWarnings("unchecked")
- public static XMLEvent createXMLEventNS(XMLEvent xmlEvent, Deque<List<ComparableNamespace>> nsStack, Deque<List<ComparableAttribute>> attrStack) {
+ public static final XMLEvent createXMLEventNS(final XMLEvent xmlEvent, final Deque<List<ComparableNamespace>> nsStack, final Deque<List<ComparableAttribute>> attrStack) {
if (xmlEvent.isStartElement()) {
- StartElement startElement = xmlEvent.asStartElement();
- QName startElementName = startElement.getName();
+ final StartElement startElement = xmlEvent.asStartElement();
+ final QName startElementName = startElement.getName();
+ final String startElementNamePrefix = startElementName.getPrefix();
- List<String> prefixList = new LinkedList<String>();
- prefixList.add(startElementName.getPrefix());
+ Set<String> prefixSet = new HashSet<String>();
+ prefixSet.add(startElementNamePrefix);
- List<ComparableNamespace> comparableNamespaceList = new LinkedList<ComparableNamespace>();
+ List<ComparableNamespace> comparableNamespaceList = new ArrayList<ComparableNamespace>();
- ComparableNamespace curElementNamespace = new ComparableNamespace(startElementName.getPrefix(), startElementName.getNamespaceURI());
+ ComparableNamespace curElementNamespace = new ComparableNamespace(startElementNamePrefix, startElementName.getNamespaceURI());
comparableNamespaceList.add(curElementNamespace);
@SuppressWarnings("unchecked")
Iterator<Namespace> namespaceIterator = startElement.getNamespaces();
while (namespaceIterator.hasNext()) {
- Namespace namespace = namespaceIterator.next();
- String prefix = namespace.getPrefix();
+ final Namespace namespace = namespaceIterator.next();
+ final String prefix = namespace.getPrefix();
+ final String namespaceURI = namespace.getNamespaceURI();
- if ((prefix == null || prefix.length() == 0) && (namespace.getNamespaceURI() == null || namespace.getNamespaceURI().length() == 0)) {
+ if ((prefix == null || prefix.isEmpty())
+ && (namespaceURI == null || namespaceURI.isEmpty())) {
continue;
}
- if (!prefixList.contains(prefix)) {
- prefixList.add(prefix);
- ComparableNamespace tmpNameSpace = new ComparableNamespace(prefix, namespace.getNamespaceURI());
- comparableNamespaceList.add(tmpNameSpace);
+ if (!prefixSet.contains(prefix)) {
+ prefixSet.add(prefix);
+ comparableNamespaceList.add(new ComparableNamespace(prefix, namespaceURI));
}
}
- List<ComparableAttribute> comparableAttributeList = new LinkedList<ComparableAttribute>();
+ List<ComparableAttribute> comparableAttributeList;
@SuppressWarnings("unchecked")
Iterator<Attribute> attributeIterator = startElement.getAttributes();
+ if (attributeIterator.hasNext()) {
+ comparableAttributeList = new ArrayList<ComparableAttribute>();
+ } else {
+ comparableAttributeList = Collections.emptyList();
+ }
+
while (attributeIterator.hasNext()) {
- Attribute attribute = attributeIterator.next();
- String prefix = attribute.getName().getPrefix();
+ final Attribute attribute = attributeIterator.next();
+ final QName attributeName = attribute.getName();
+ final String prefix = attributeName.getPrefix();
+ final String attributeNameNamespaceURI = attributeName.getNamespaceURI();
- if (prefix != null && prefix.length() == 0 && attribute.getName().getNamespaceURI().length() == 0) {
+ if (prefix != null && prefix.isEmpty() && attributeNameNamespaceURI.isEmpty()) {
continue;
}
if (!"xml".equals(prefix)) {
- if (!"".equals(prefix)) {
- //does an attribute have an namespace?
- if (!prefixList.contains(prefix)) {
- prefixList.add(prefix);
- ComparableNamespace tmpNameSpace = new ComparableNamespace(prefix, attribute.getName().getNamespaceURI());
- comparableNamespaceList.add(tmpNameSpace);
+ if (prefix != null && !prefix.isEmpty()) {
+ if (!prefixSet.contains(prefix)) {
+ prefixSet.add(prefix);
+ comparableNamespaceList.add(new ComparableNamespace(prefix, attributeNameNamespaceURI));
}
continue;
}
}
//add all attrs with xml - prefix (eg. xml:lang) to attr list:
- comparableAttributeList.add(new ComparableAttribute(attribute.getName(), attribute.getValue()));
+ comparableAttributeList.add(new ComparableAttribute(attributeName, attribute.getValue()));
}
nsStack.push(comparableNamespaceList);
@@ -201,10 +205,8 @@ public class XMLSecurityUtils {
return new XMLEventNS(xmlEvent, nsStack.toArray(new List[nsStack.size()]), attrStack.toArray(new List[attrStack.size()]));
} else if (xmlEvent.isEndElement()) {
- XMLEventNS xmlEventNS = new XMLEventNS(xmlEvent, nsStack.toArray(new List[nsStack.size()]), attrStack.toArray(new List[attrStack.size()]));
nsStack.pop();
attrStack.pop();
- return xmlEventNS;
}
return xmlEvent;
}
@@ -212,6 +214,9 @@ public class XMLSecurityUtils {
//todo optimize?
public static Transformer getTransformer(Object methodParameter1, Object methodParameter2, String algorithm) throws XMLSecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Class<Transformer> transformerClass = (Class<Transformer>) TransformerAlgorithmMapper.getTransformerClass(algorithm, null);
+ if (transformerClass == null) {
+ return null;
+ }
Transformer childTransformer;
try {
Constructor<Transformer> constructor = transformerClass.getConstructor(Transformer.class);
@@ -250,13 +255,6 @@ public class XMLSecurityUtils {
}
public static String getQNameAttribute(Map<QName, String> attributes, QName qName) {
- Iterator<Map.Entry<QName, String>> attributeIterator = attributes.entrySet().iterator();
- while (attributeIterator.hasNext()) {
- Map.Entry<QName, String> entry = attributeIterator.next();
- if (entry.getKey().equals(qName)) {
- return entry.getValue();
- }
- }
- return null;
+ return attributes.get(qName);
}
}
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/DocumentContextImpl.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/DocumentContextImpl.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/DocumentContextImpl.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/DocumentContextImpl.java Sun May 13 17:27:10 2012
@@ -32,7 +32,7 @@ import java.util.*;
*/
public class DocumentContextImpl implements DocumentContext, Cloneable {
- private List<QName> path = new LinkedList<QName>();
+ private List<QName> path = new ArrayList<QName>(20);//the default of 10 is not enough
private String encoding;
private Map<Integer, XMLSecurityConstants.ContentType> contentTypeMap = new TreeMap<Integer, XMLSecurityConstants.ContentType>();
private Map<Object, Integer> processorToIndexMap = new HashMap<Object, Integer>();
@@ -62,7 +62,7 @@ public class DocumentContextImpl impleme
}
public List<QName> getParentElementPath(int eventType) {
- List<QName> parentPath = new LinkedList<QName>();
+ List<QName> parentPath = new ArrayList<QName>(this.path.size());
if (this.path.size() >= 1) {
parentPath.addAll(this.path.subList(0, this.path.size() - 1));
}
@@ -103,7 +103,7 @@ public class DocumentContextImpl impleme
@Override
public List<XMLSecurityConstants.ContentType> getProtectionOrder() {
- return new LinkedList<XMLSecurityConstants.ContentType>(contentTypeMap.values());
+ return new ArrayList<XMLSecurityConstants.ContentType>(contentTypeMap.values());
}
public Map<Integer, XMLSecurityConstants.ContentType> getContentTypeMap() {
@@ -117,9 +117,8 @@ public class DocumentContextImpl impleme
@Override
protected DocumentContextImpl clone() throws CloneNotSupportedException {
DocumentContextImpl documentContext = new DocumentContextImpl();
- List<QName> subPath = new LinkedList<QName>();
- subPath.addAll(this.path);
documentContext.setEncoding(this.encoding);
+ List<QName> subPath = new ArrayList<QName>(this.path);
documentContext.setPath(subPath);
documentContext.setContentTypeMap(getContentTypeMap());
return documentContext;
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/InputProcessorChainImpl.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/InputProcessorChainImpl.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/InputProcessorChainImpl.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/InputProcessorChainImpl.java Sun May 13 17:27:10 2012
@@ -37,8 +37,9 @@ import java.util.List;
public class InputProcessorChainImpl implements InputProcessorChain {
protected static final transient Log log = LogFactory.getLog(InputProcessorChainImpl.class);
+ protected static final transient boolean isDebugEnabled = log.isDebugEnabled();
- private List<InputProcessor> inputProcessors = Collections.synchronizedList(new ArrayList<InputProcessor>());
+ private List<InputProcessor> inputProcessors = Collections.synchronizedList(new ArrayList<InputProcessor>(20));//the default of ten entries is not enough
private int startPos = 0;
private int curPos = 0;
@@ -63,20 +64,8 @@ public class InputProcessorChainImpl imp
documentContext = documentContextImpl;
}
- public int getCurPos() {
- return curPos;
- }
-
- public void setCurPos(int curPos) {
- this.curPos = curPos;
- }
-
- public int getPosAndIncrement() {
- return this.curPos++;
- }
-
public void reset() {
- setCurPos(startPos);
+ this.curPos = startPos;
}
public SecurityContext getSecurityContext() {
@@ -167,7 +156,7 @@ public class InputProcessorChainImpl imp
inputProcessors.add(idxToInsert, newInputProcessor);
}
}
- if (log.isDebugEnabled()) {
+ if (isDebugEnabled) {
log.debug("Added " + newInputProcessor.getClass().getName() + " to input chain: ");
for (int i = 0; i < inputProcessors.size(); i++) {
InputProcessor inputProcessor = inputProcessors.get(i);
@@ -177,8 +166,10 @@ public class InputProcessorChainImpl imp
}
public void removeProcessor(InputProcessor inputProcessor) {
- log.debug("Removing processor " + inputProcessor.getClass().getName() + " from input chain");
- if (this.inputProcessors.indexOf(inputProcessor) <= getCurPos()) {
+ if (isDebugEnabled) {
+ log.debug("Removing processor " + inputProcessor.getClass().getName() + " from input chain");
+ }
+ if (this.inputProcessors.indexOf(inputProcessor) <= curPos) {
this.curPos--;
}
this.inputProcessors.remove(inputProcessor);
@@ -189,15 +180,15 @@ public class InputProcessorChainImpl imp
}
public XMLEvent processHeaderEvent() throws XMLStreamException, XMLSecurityException {
- return inputProcessors.get(getPosAndIncrement()).processNextHeaderEvent(this);
+ return inputProcessors.get(this.curPos++).processNextHeaderEvent(this);
}
public XMLEvent processEvent() throws XMLStreamException, XMLSecurityException {
- return inputProcessors.get(getPosAndIncrement()).processNextEvent(this);
+ return inputProcessors.get(this.curPos++).processNextEvent(this);
}
public void doFinal() throws XMLStreamException, XMLSecurityException {
- inputProcessors.get(getPosAndIncrement()).doFinal(this);
+ inputProcessors.get(this.curPos++).doFinal(this);
}
public InputProcessorChain createSubChain(InputProcessor inputProcessor) throws XMLStreamException, XMLSecurityException {
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/OutputProcessorChainImpl.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/OutputProcessorChainImpl.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/OutputProcessorChainImpl.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/OutputProcessorChainImpl.java Sun May 13 17:27:10 2012
@@ -26,7 +26,6 @@ import javax.xml.stream.XMLStreamExcepti
import javax.xml.stream.events.XMLEvent;
import java.util.ArrayDeque;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
/**
@@ -38,13 +37,14 @@ import java.util.List;
public class OutputProcessorChainImpl implements OutputProcessorChain {
protected static final transient Log log = LogFactory.getLog(OutputProcessorChainImpl.class);
+ protected static final transient boolean isDebugEnabled = log.isDebugEnabled();
- private List<OutputProcessor> outputProcessors = Collections.synchronizedList(new ArrayList<OutputProcessor>());
+ private List<OutputProcessor> outputProcessors = new ArrayList<OutputProcessor>(20); //the default of ten entries is not enough
private int startPos = 0;
private int curPos = 0;
- private ArrayDeque<List<ComparableNamespace>> nsStack = new ArrayDeque<List<ComparableNamespace>>(10);
- private ArrayDeque<List<ComparableAttribute>> attrStack = new ArrayDeque<List<ComparableAttribute>>(10);
+ private ArrayDeque<List<ComparableNamespace>> nsStack = new ArrayDeque<List<ComparableNamespace>>();
+ private ArrayDeque<List<ComparableAttribute>> attrStack = new ArrayDeque<List<ComparableAttribute>>();
private SecurityContext securityContext;
private DocumentContextImpl documentContext;
@@ -67,20 +67,8 @@ public class OutputProcessorChainImpl im
documentContext = documentContextImpl;
}
- public int getCurPos() {
- return curPos;
- }
-
- public void setCurPos(int curPos) {
- this.curPos = curPos;
- }
-
- public int getPosAndIncrement() {
- return this.curPos++;
- }
-
public void reset() {
- setCurPos(startPos);
+ this.curPos = startPos;
}
public SecurityContext getSecurityContext() {
@@ -96,11 +84,11 @@ public class OutputProcessorChainImpl im
}
private ArrayDeque<List<ComparableNamespace>> getNsStack() {
- return nsStack.clone();
+ return nsStack;
}
private void setNsStack(ArrayDeque<List<ComparableNamespace>> nsStack) {
- this.nsStack = nsStack;
+ this.nsStack = nsStack.clone();
}
private ArrayDeque<List<ComparableAttribute>> getAttrStack() {
@@ -190,7 +178,7 @@ public class OutputProcessorChainImpl im
if (idxToInsert < this.curPos) {
this.curPos++;
}
- if (log.isDebugEnabled()) {
+ if (isDebugEnabled) {
log.debug("Added " + newOutputProcessor.getClass().getName() + " to output chain: ");
for (int i = 0; i < outputProcessors.size(); i++) {
OutputProcessor outputProcessor = outputProcessors.get(i);
@@ -200,8 +188,10 @@ public class OutputProcessorChainImpl im
}
public void removeProcessor(OutputProcessor outputProcessor) {
- log.debug("Removing processor " + outputProcessor.getClass().getName() + " from output chain");
- if (this.outputProcessors.indexOf(outputProcessor) <= getCurPos()) {
+ if (isDebugEnabled) {
+ log.debug("Removing processor " + outputProcessor.getClass().getName() + " from output chain");
+ }
+ if (this.outputProcessors.indexOf(outputProcessor) <= this.curPos) {
this.curPos--;
}
this.outputProcessors.remove(outputProcessor);
@@ -213,18 +203,19 @@ public class OutputProcessorChainImpl im
public void processEvent(XMLEvent xmlEvent) throws XMLStreamException, XMLSecurityException {
if (this.curPos == this.startPos) {
- xmlEvent = XMLSecurityUtils.createXMLEventNS(xmlEvent, nsStack, attrStack);
if (xmlEvent.isStartElement()) {
+ xmlEvent = XMLSecurityUtils.createXMLEventNS(xmlEvent, nsStack, attrStack);
getDocumentContext().addPathElement(xmlEvent.asStartElement().getName());
} else if (xmlEvent.isEndElement()) {
+ xmlEvent = XMLSecurityUtils.createXMLEventNS(xmlEvent, nsStack, attrStack);
getDocumentContext().removePathElement();
}
}
- outputProcessors.get(getPosAndIncrement()).processNextEvent(xmlEvent, this);
+ outputProcessors.get(this.curPos++).processNextEvent(xmlEvent, this);
}
public void doFinal() throws XMLStreamException, XMLSecurityException {
- outputProcessors.get(getPosAndIncrement()).doFinal(this);
+ outputProcessors.get(this.curPos++).doFinal(this);
}
public OutputProcessorChain createSubChain(OutputProcessor outputProcessor) throws XMLStreamException, XMLSecurityException {
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/SecurityContextImpl.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/SecurityContextImpl.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/SecurityContextImpl.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/SecurityContextImpl.java Sun May 13 17:27:10 2012
@@ -79,6 +79,11 @@ public class SecurityContextImpl impleme
return (List<T>) content.get(key);
}
+ @SuppressWarnings("unchecked")
+ public <T> Set<T> getAsSet(Class key) {
+ return (Set<T>) content.get(key);
+ }
+
public void registerSecurityTokenProvider(String id, SecurityTokenProvider securityTokenProvider) {
if (id == null) {
throw new IllegalArgumentException("Id must not be null");
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityEventReader.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityEventReader.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityEventReader.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityEventReader.java Sun May 13 17:27:10 2012
@@ -33,7 +33,6 @@ import java.util.NoSuchElementException;
public class XMLSecurityEventReader implements XMLEventReader {
private Iterator<XMLEvent> xmlEventIterator;
- private XMLEvent currentXMLEvent;
private XMLEvent nextXMLEvent;
public XMLSecurityEventReader(Deque<XMLEvent> xmlEvents, int fromIndex) {
@@ -47,16 +46,17 @@ public class XMLSecurityEventReader impl
@Override
public XMLEvent nextEvent() throws XMLStreamException {
if (this.nextXMLEvent != null) {
- this.currentXMLEvent = this.nextXMLEvent;
+ final XMLEvent currentXMLEvent = this.nextXMLEvent;
this.nextXMLEvent = null;
- return this.currentXMLEvent;
+ return currentXMLEvent;
}
+ final XMLEvent currentXMLEvent;
try {
- this.currentXMLEvent = xmlEventIterator.next();
+ currentXMLEvent = xmlEventIterator.next();
} catch (NoSuchElementException e) {
throw new XMLStreamException(e);
}
- return this.currentXMLEvent;
+ return currentXMLEvent;
}
@Override
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityEventWriter.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityEventWriter.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityEventWriter.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityEventWriter.java Sun May 13 17:27:10 2012
@@ -67,11 +67,10 @@ public class XMLSecurityEventWriter impl
case XMLStreamConstants.CHARACTERS:
Characters characters = event.asCharacters();
- String text = characters.getData();
if (characters.isCData()) {
- this.xmlStreamWriter.writeCData(text);
+ this.xmlStreamWriter.writeCData(characters.getData());
} else {
- this.xmlStreamWriter.writeCharacters(text);
+ this.xmlStreamWriter.writeCharacters(characters.getData());
}
break;
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityStreamReader.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityStreamReader.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityStreamReader.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityStreamReader.java Sun May 13 17:27:10 2012
@@ -37,9 +37,9 @@ import java.util.Iterator;
*/
public class XMLSecurityStreamReader implements XMLStreamReader {
- private XMLSecurityProperties securityProperties;
private InputProcessorChain inputProcessorChain;
private XMLEvent currentEvent;
+ private boolean skipDocumentEvents = false;
private static final String ERR_STATE_NOT_ELEM = "Current state not START_ELEMENT or END_ELEMENT";
private static final String ERR_STATE_NOT_STELEM = "Current state not START_ELEMENT";
@@ -47,7 +47,7 @@ public class XMLSecurityStreamReader imp
public XMLSecurityStreamReader(InputProcessorChain inputProcessorChain, XMLSecurityProperties securityProperties) {
this.inputProcessorChain = inputProcessorChain;
- this.securityProperties = securityProperties;
+ this.skipDocumentEvents = securityProperties.isSkipDocumentEvents();
}
public Object getProperty(String name) throws IllegalArgumentException {
@@ -58,20 +58,23 @@ public class XMLSecurityStreamReader imp
}
public int next() throws XMLStreamException {
+ int eventType;
try {
inputProcessorChain.reset();
currentEvent = inputProcessorChain.processEvent();
- if ((currentEvent.getEventType() == START_DOCUMENT)
- && securityProperties.isSkipDocumentEvents()) {
+ eventType = currentEvent.getEventType();
+ if (eventType == START_DOCUMENT && this.skipDocumentEvents) {
currentEvent = inputProcessorChain.processEvent();
+ eventType = currentEvent.getEventType();
}
} catch (XMLSecurityException e) {
throw new XMLStreamException(e);
}
- if (currentEvent.isCharacters() && currentEvent.asCharacters().isIgnorableWhiteSpace()) {
+ /*todo why was this needed? Because of the Sun Stax impl?
+ if (currentEvent.isCharacters() && currentEvent.asCharacters().isIgnorableWhiteSpace()) {
return XMLStreamConstants.SPACE;
- }
- return currentEvent.getEventType();
+ }*/
+ return eventType;
}
private XMLEvent getCurrentEvent() {
@@ -186,31 +189,26 @@ public class XMLSecurityStreamReader imp
public String getNamespaceURI(String prefix) {
XMLEvent xmlEvent = getCurrentEvent();
- if (xmlEvent.getEventType() != START_ELEMENT && xmlEvent.getEventType() != END_ELEMENT) {
- throw new IllegalStateException(ERR_STATE_NOT_ELEM);
- }
-
- if (xmlEvent.isStartElement()) {
+ if (xmlEvent.getEventType() == START_ELEMENT) {
return xmlEvent.asStartElement().getNamespaceURI(prefix);
- } else {
+ } else if (xmlEvent.getEventType() == END_ELEMENT) {
//todo somehow...
return null;
+ } else {
+ throw new IllegalStateException(ERR_STATE_NOT_ELEM);
}
}
public boolean isStartElement() {
- XMLEvent xmlEvent = getCurrentEvent();
- return xmlEvent.isStartElement();
+ return getCurrentEvent().isStartElement();
}
public boolean isEndElement() {
- XMLEvent xmlEvent = getCurrentEvent();
- return xmlEvent.isEndElement();
+ return getCurrentEvent().isEndElement();
}
public boolean isCharacters() {
- XMLEvent xmlEvent = getCurrentEvent();
- return xmlEvent.isCharacters();
+ return getCurrentEvent().isCharacters();
}
public boolean isWhiteSpace() {
@@ -374,15 +372,15 @@ public class XMLSecurityStreamReader imp
@SuppressWarnings("unchecked")
public int getNamespaceCount() {
XMLEvent xmlEvent = getCurrentEvent();
- if (xmlEvent.getEventType() != START_ELEMENT && xmlEvent.getEventType() != END_ELEMENT) {
- throw new IllegalStateException(ERR_STATE_NOT_ELEM);
- }
+
int count = 0;
Iterator<Namespace> namespaceIterator;
if (xmlEvent.getEventType() == START_ELEMENT) {
namespaceIterator = xmlEvent.asStartElement().getNamespaces();
- } else {
+ } else if (xmlEvent.getEventType() == END_ELEMENT) {
namespaceIterator = xmlEvent.asEndElement().getNamespaces();
+ } else {
+ throw new IllegalStateException(ERR_STATE_NOT_ELEM);
}
while (namespaceIterator.hasNext()) {
namespaceIterator.next();
@@ -394,15 +392,15 @@ public class XMLSecurityStreamReader imp
@SuppressWarnings("unchecked")
public String getNamespacePrefix(int index) {
XMLEvent xmlEvent = getCurrentEvent();
- if (xmlEvent.getEventType() != START_ELEMENT && xmlEvent.getEventType() != END_ELEMENT) {
- throw new IllegalStateException(ERR_STATE_NOT_ELEM);
- }
+
int count = 0;
Iterator<Namespace> namespaceIterator;
if (xmlEvent.getEventType() == START_ELEMENT) {
namespaceIterator = xmlEvent.asStartElement().getNamespaces();
- } else {
+ } else if (xmlEvent.getEventType() == END_ELEMENT) {
namespaceIterator = xmlEvent.asEndElement().getNamespaces();
+ } else {
+ throw new IllegalStateException(ERR_STATE_NOT_ELEM);
}
while (namespaceIterator.hasNext()) {
Namespace namespace = namespaceIterator.next();
@@ -577,25 +575,25 @@ public class XMLSecurityStreamReader imp
public QName getName() {
XMLEvent xmlEvent = getCurrentEvent();
- if (xmlEvent.getEventType() != START_ELEMENT && xmlEvent.getEventType() != END_ELEMENT) {
- throw new IllegalStateException(ERR_STATE_NOT_ELEM);
- }
- if (xmlEvent.isStartElement()) {
+
+ if (xmlEvent.getEventType() == START_ELEMENT) {
return xmlEvent.asStartElement().getName();
- } else {
+ } else if (xmlEvent.getEventType() == END_ELEMENT) {
return xmlEvent.asEndElement().getName();
+ } else {
+ throw new IllegalStateException(ERR_STATE_NOT_ELEM);
}
}
public String getLocalName() {
XMLEvent xmlEvent = getCurrentEvent();
- if (xmlEvent.getEventType() != START_ELEMENT && xmlEvent.getEventType() != END_ELEMENT) {
- throw new IllegalStateException(ERR_STATE_NOT_ELEM);
- }
- if (xmlEvent.isStartElement()) {
+
+ if (xmlEvent.getEventType() == START_ELEMENT) {
return xmlEvent.asStartElement().getName().getLocalPart();
- } else {
+ } else if (xmlEvent.getEventType() == END_ELEMENT) {
return xmlEvent.asEndElement().getName().getLocalPart();
+ } else {
+ throw new IllegalStateException(ERR_STATE_NOT_ELEM);
}
}
@@ -609,25 +607,25 @@ public class XMLSecurityStreamReader imp
public String getNamespaceURI() {
XMLEvent xmlEvent = getCurrentEvent();
- if (xmlEvent.getEventType() != START_ELEMENT && xmlEvent.getEventType() != END_ELEMENT) {
- throw new IllegalStateException(ERR_STATE_NOT_ELEM);
- }
- if (xmlEvent.isStartElement()) {
+
+ if (xmlEvent.getEventType() == START_ELEMENT) {
return xmlEvent.asStartElement().getName().getNamespaceURI();
- } else {
+ } else if (xmlEvent.getEventType() == END_ELEMENT) {
return xmlEvent.asEndElement().getName().getNamespaceURI();
+ } else {
+ throw new IllegalStateException(ERR_STATE_NOT_ELEM);
}
}
public String getPrefix() {
XMLEvent xmlEvent = getCurrentEvent();
- if (xmlEvent.getEventType() != START_ELEMENT && xmlEvent.getEventType() != END_ELEMENT) {
- throw new IllegalStateException(ERR_STATE_NOT_ELEM);
- }
- if (xmlEvent.isStartElement()) {
+
+ if (xmlEvent.getEventType() == START_ELEMENT) {
return xmlEvent.asStartElement().getName().getPrefix();
- } else {
+ } else if (xmlEvent.getEventType() == END_ELEMENT) {
return xmlEvent.asEndElement().getName().getPrefix();
+ } else {
+ throw new IllegalStateException(ERR_STATE_NOT_ELEM);
}
}
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityStreamWriter.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityStreamWriter.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityStreamWriter.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/XMLSecurityStreamWriter.java Sun May 13 17:27:10 2012
@@ -19,11 +19,15 @@
package org.swssf.xmlsec.impl;
import org.swssf.xmlsec.ext.OutputProcessorChain;
+import org.swssf.xmlsec.ext.XMLSecurityConstants;
import org.swssf.xmlsec.ext.XMLSecurityException;
import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
-import javax.xml.stream.*;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
import javax.xml.stream.events.*;
import java.io.Writer;
import java.util.*;
@@ -36,11 +40,10 @@ import java.util.*;
*/
public class XMLSecurityStreamWriter implements XMLStreamWriter {
- private XMLEventFactory xmlEventFactory = XMLEventFactory.newInstance();
private OutputProcessorChain outputProcessorChain;
private Deque<QName> startElementStack = new ArrayDeque<QName>();
private QName openStartElement = null;
- private List<Attribute> currentAttributes = new LinkedList<Attribute>();
+ private List<Attribute> currentAttributes = new ArrayList<Attribute>();
private Deque<Map<String, Namespace>> nsStack;
private NamespaceContext namespaceContext;
private final NamespaceContext defaultNamespaceContext;
@@ -48,8 +51,8 @@ public class XMLSecurityStreamWriter imp
public XMLSecurityStreamWriter(OutputProcessorChain outputProcessorChain) {
this.outputProcessorChain = outputProcessorChain;
- nsStack = new LinkedList<Map<String, Namespace>>();
- nsStack.push(new LinkedHashMap<String, Namespace>());
+ nsStack = new ArrayDeque<Map<String, Namespace>>();
+ nsStack.push(Collections.<String, Namespace>emptyMap());
defaultNamespaceContext = new NamespaceContext() {
@Override
@@ -57,12 +60,9 @@ public class XMLSecurityStreamWriter imp
Iterator<Map<String, Namespace>> stackIterator = nsStack.iterator();
while (stackIterator.hasNext()) {
Map<String, Namespace> next = stackIterator.next();
- Iterator<Map.Entry<String, Namespace>> mapIterator = next.entrySet().iterator();
- while (mapIterator.hasNext()) {
- Map.Entry<String, Namespace> entry = mapIterator.next();
- if (prefix.equals(entry.getKey())) {
- return entry.getValue().getNamespaceURI();
- }
+ Namespace ns = next.get(prefix);
+ if (ns != null) {
+ return ns.getNamespaceURI();
}
}
if (namespaceContext != null) {
@@ -92,7 +92,7 @@ public class XMLSecurityStreamWriter imp
@Override
public Iterator getPrefixes(String namespaceURI) {
- List<String> prefixList = new ArrayList<String>();
+ List<String> prefixList = new ArrayList<String>(1);
if (namespaceContext != null) {
Iterator<String> iterator = namespaceContext.getPrefixes(namespaceURI);
while (iterator.hasNext()) {
@@ -119,6 +119,16 @@ public class XMLSecurityStreamWriter imp
};
}
+ private void putNamespaceOntoStack(String prefix, Namespace namespace) {
+ Map<String, Namespace> namespaceMap = nsStack.peek();
+ if (Collections.<String, Namespace>emptyMap() == namespaceMap) {
+ nsStack.pop();
+ namespaceMap = new HashMap<String, Namespace>();
+ nsStack.push(namespaceMap);
+ }
+ namespaceMap.put(prefix, namespace);
+ }
+
private void chainProcessEvent(XMLEvent xmlEvent) throws XMLStreamException {
try {
outputProcessorChain.reset();
@@ -141,7 +151,7 @@ public class XMLSecurityStreamWriter imp
private void outputOpenStartElement() throws XMLStreamException {
if (openStartElement != null) {
- chainProcessEvent(xmlEventFactory.createStartElement(openStartElement, currentAttributes.iterator(), nsStack.peek().values().iterator()));
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createStartElement(openStartElement, currentAttributes.iterator(), nsStack.peek().values().iterator()));
currentAttributes.clear();
openStartElement = null;
}
@@ -149,7 +159,7 @@ public class XMLSecurityStreamWriter imp
haveToWriteEndElement = false;
writeEndElement();
}
- nsStack.push(new LinkedHashMap<String, Namespace>());
+ nsStack.push(Collections.<String, Namespace>emptyMap());
}
public void writeStartElement(String localName) throws XMLStreamException {
@@ -194,10 +204,10 @@ public class XMLSecurityStreamWriter imp
public void writeEndElement() throws XMLStreamException {
outputOpenStartElement();
- List<Namespace> namespaceList = new LinkedList<Namespace>();
+ List<Namespace> namespaceList = new ArrayList<Namespace>(1);
QName element = startElementStack.pop();
- namespaceList.add(xmlEventFactory.createNamespace(element.getPrefix(), element.getNamespaceURI()));
- EndElement endElement = xmlEventFactory.createEndElement(element, namespaceList.iterator());
+ namespaceList.add(XMLSecurityConstants.XMLEVENTFACTORY.createNamespace(element.getPrefix(), element.getNamespaceURI()));
+ EndElement endElement = XMLSecurityConstants.XMLEVENTFACTORY.createEndElement(element, namespaceList.iterator());
chainProcessEvent(endElement);
nsStack.pop();
}
@@ -206,9 +216,9 @@ public class XMLSecurityStreamWriter imp
outputOpenStartElement();
Iterator<QName> startElements = startElementStack.iterator();
while (startElements.hasNext()) {
- chainProcessEvent(xmlEventFactory.createEndElement(startElements.next(), null));
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createEndElement(startElements.next(), null));
}
- chainProcessEvent(xmlEventFactory.createEndDocument());
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createEndDocument());
}
public void close() throws XMLStreamException {
@@ -225,53 +235,53 @@ public class XMLSecurityStreamWriter imp
}
public void writeAttribute(String localName, String value) throws XMLStreamException {
- currentAttributes.add(xmlEventFactory.createAttribute(localName, value));
+ currentAttributes.add(XMLSecurityConstants.XMLEVENTFACTORY.createAttribute(localName, value));
}
public void writeAttribute(String prefix, String namespaceURI, String localName, String value) throws XMLStreamException {
- currentAttributes.add(xmlEventFactory.createAttribute(prefix, namespaceURI, localName, value));
+ currentAttributes.add(XMLSecurityConstants.XMLEVENTFACTORY.createAttribute(prefix, namespaceURI, localName, value));
}
public void writeAttribute(String namespaceURI, String localName, String value) throws XMLStreamException {
- currentAttributes.add(xmlEventFactory.createAttribute(getNamespaceContext().getPrefix(namespaceURI), namespaceURI, localName, value));
+ currentAttributes.add(XMLSecurityConstants.XMLEVENTFACTORY.createAttribute(getNamespaceContext().getPrefix(namespaceURI), namespaceURI, localName, value));
}
public void writeNamespace(String prefix, String namespaceURI) throws XMLStreamException {
- nsStack.peek().put(prefix, xmlEventFactory.createNamespace(prefix, namespaceURI));
+ putNamespaceOntoStack(prefix, XMLSecurityConstants.XMLEVENTFACTORY.createNamespace(prefix, namespaceURI));
}
public void writeDefaultNamespace(String namespaceURI) throws XMLStreamException {
- nsStack.peek().put("", xmlEventFactory.createNamespace(namespaceURI));
+ putNamespaceOntoStack("", XMLSecurityConstants.XMLEVENTFACTORY.createNamespace(namespaceURI));
}
public void writeComment(String data) throws XMLStreamException {
outputOpenStartElement();
- chainProcessEvent(xmlEventFactory.createComment(data));
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createComment(data));
}
public void writeProcessingInstruction(String target) throws XMLStreamException {
outputOpenStartElement();
- chainProcessEvent(xmlEventFactory.createProcessingInstruction(target, null));
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createProcessingInstruction(target, null));
}
public void writeProcessingInstruction(String target, String data) throws XMLStreamException {
outputOpenStartElement();
- chainProcessEvent(xmlEventFactory.createProcessingInstruction(target, data));
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createProcessingInstruction(target, data));
}
public void writeCData(String data) throws XMLStreamException {
outputOpenStartElement();
- chainProcessEvent(xmlEventFactory.createCData(data));
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createCData(data));
}
public void writeDTD(String dtd) throws XMLStreamException {
outputOpenStartElement();
- chainProcessEvent(xmlEventFactory.createDTD(dtd));
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createDTD(dtd));
}
public void writeEntityRef(final String name) throws XMLStreamException {
outputOpenStartElement();
- chainProcessEvent(xmlEventFactory.createEntityReference(name, new EntityDeclaration() {
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createEntityReference(name, new EntityDeclaration() {
@Override
public String getPublicId() {
return null;
@@ -384,25 +394,25 @@ public class XMLSecurityStreamWriter imp
}
public void writeStartDocument() throws XMLStreamException {
- chainProcessEvent(xmlEventFactory.createStartDocument());
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createStartDocument());
}
public void writeStartDocument(String version) throws XMLStreamException {
- chainProcessEvent(xmlEventFactory.createStartDocument("utf-8", version));
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createStartDocument("utf-8", version));
}
public void writeStartDocument(String encoding, String version) throws XMLStreamException {
- chainProcessEvent(xmlEventFactory.createStartDocument(encoding, version));
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createStartDocument(encoding, version));
}
public void writeCharacters(String text) throws XMLStreamException {
outputOpenStartElement();
- chainProcessEvent(xmlEventFactory.createCharacters(text));
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createCharacters(text));
}
public void writeCharacters(char[] text, int start, int len) throws XMLStreamException {
outputOpenStartElement();
- chainProcessEvent(xmlEventFactory.createCharacters(new String(text, start, len)));
+ chainProcessEvent(XMLSecurityConstants.XMLEVENTFACTORY.createCharacters(new String(text, start, len)));
}
public String getPrefix(String uri) throws XMLStreamException {
@@ -410,7 +420,7 @@ public class XMLSecurityStreamWriter imp
}
public void setPrefix(String prefix, String uri) throws XMLStreamException {
- nsStack.peek().put(prefix, xmlEventFactory.createNamespace(prefix, uri));
+ putNamespaceOntoStack(prefix, XMLSecurityConstants.XMLEVENTFACTORY.createNamespace(prefix, uri));
if (openStartElement != null) {
if (openStartElement.getNamespaceURI().equals(uri)) {
openStartElement = new QName(openStartElement.getNamespaceURI(), openStartElement.getLocalPart(), prefix);
@@ -419,7 +429,7 @@ public class XMLSecurityStreamWriter imp
}
public void setDefaultNamespace(String uri) throws XMLStreamException {
- nsStack.peek().put("", xmlEventFactory.createNamespace("", uri));
+ putNamespaceOntoStack("", XMLSecurityConstants.XMLEVENTFACTORY.createNamespace("", uri));
}
public void setNamespaceContext(NamespaceContext context) throws XMLStreamException {
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/ECDSAUtils.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/ECDSAUtils.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/ECDSAUtils.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/ECDSAUtils.java Sun May 13 17:27:10 2012
@@ -22,8 +22,8 @@ import java.io.IOException;
import java.math.BigInteger;
import java.security.interfaces.ECPublicKey;
import java.security.spec.*;
+import java.util.ArrayList;
import java.util.Iterator;
-import java.util.LinkedList;
import java.util.List;
/**
@@ -158,7 +158,7 @@ public final class ECDSAUtils {
return asn1Bytes;
}
- private static List<ECCurveDefinition> ecCurveDefinitions = new LinkedList<ECCurveDefinition>();
+ private static List<ECCurveDefinition> ecCurveDefinitions = new ArrayList<ECCurveDefinition>();
static {
ecCurveDefinitions.add(
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/HMACSignatureAlgorithm.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/HMACSignatureAlgorithm.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/HMACSignatureAlgorithm.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/HMACSignatureAlgorithm.java Sun May 13 17:27:10 2012
@@ -31,12 +31,14 @@ import java.security.spec.AlgorithmParam
*/
public class HMACSignatureAlgorithm implements SignatureAlgorithm {
- private AlgorithmType algorithmType;
private Mac mac;
public HMACSignatureAlgorithm(AlgorithmType algorithmType) throws NoSuchProviderException, NoSuchAlgorithmException {
- this.algorithmType = algorithmType;
- mac = Mac.getInstance(algorithmType.getJCEName(), algorithmType.getJCEProvider());
+ if (algorithmType.getJCEProvider() != null) {
+ mac = Mac.getInstance(algorithmType.getJCEName(), algorithmType.getJCEProvider());
+ } else {
+ mac = Mac.getInstance(algorithmType.getJCEName());
+ }
}
public void engineUpdate(byte[] input) throws XMLSecurityException {
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/PKISignatureAlgorithm.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/PKISignatureAlgorithm.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/PKISignatureAlgorithm.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/PKISignatureAlgorithm.java Sun May 13 17:27:10 2012
@@ -31,12 +31,16 @@ import java.security.spec.AlgorithmParam
*/
public class PKISignatureAlgorithm implements SignatureAlgorithm {
- private AlgorithmType algorithmType;
+ private String jceName;
private Signature signature;
public PKISignatureAlgorithm(AlgorithmType algorithmType) throws NoSuchProviderException, NoSuchAlgorithmException {
- this.algorithmType = algorithmType;
- signature = Signature.getInstance(algorithmType.getJCEName(), algorithmType.getJCEProvider());
+ this.jceName = algorithmType.getJCEName();
+ if (algorithmType.getJCEProvider() != null) {
+ signature = Signature.getInstance(this.jceName, algorithmType.getJCEProvider());
+ } else {
+ signature = Signature.getInstance(this.jceName);
+ }
}
public void engineUpdate(byte[] input) throws XMLSecurityException {
@@ -90,9 +94,9 @@ public class PKISignatureAlgorithm imple
public byte[] engineSign() throws XMLSecurityException {
try {
byte[] jcebytes = signature.sign();
- if (algorithmType.getJCEName().contains("ECDSA")) {
+ if (this.jceName.contains("ECDSA")) {
return ECDSAUtils.convertASN1toXMLDSIG(jcebytes);
- } else if (algorithmType.getJCEName().contains("DSA")) {
+ } else if (this.jceName.contains("DSA")) {
return DSAUtils.convertASN1toXMLDSIG(jcebytes);
}
return jcebytes;
@@ -114,9 +118,9 @@ public class PKISignatureAlgorithm imple
public boolean engineVerify(byte[] signature) throws XMLSecurityException {
try {
byte[] jcebytes = signature;
- if (algorithmType.getJCEName().contains("ECDSA")) {
+ if (this.jceName.contains("ECDSA")) {
jcebytes = ECDSAUtils.convertXMLDSIGtoASN1(jcebytes);
- } else if (algorithmType.getJCEName().contains("DSA")) {
+ } else if (this.jceName.contains("DSA")) {
jcebytes = DSAUtils.convertXMLDSIGtoASN1(jcebytes);
}
return this.signature.verify(jcebytes);
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/SignatureAlgorithm.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/SignatureAlgorithm.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/SignatureAlgorithm.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/algorithms/SignatureAlgorithm.java Sun May 13 17:27:10 2012
@@ -30,23 +30,23 @@ import java.security.spec.AlgorithmParam
*/
public interface SignatureAlgorithm {
- public void engineUpdate(byte[] input) throws XMLSecurityException;
+ void engineUpdate(byte[] input) throws XMLSecurityException;
- public void engineUpdate(byte input) throws XMLSecurityException;
+ void engineUpdate(byte input) throws XMLSecurityException;
- public void engineUpdate(byte buf[], int offset, int len) throws XMLSecurityException;
+ void engineUpdate(byte buf[], int offset, int len) throws XMLSecurityException;
- public void engineInitSign(Key signingKey) throws XMLSecurityException;
+ void engineInitSign(Key signingKey) throws XMLSecurityException;
- public void engineInitSign(Key signingKey, SecureRandom secureRandom) throws XMLSecurityException;
+ void engineInitSign(Key signingKey, SecureRandom secureRandom) throws XMLSecurityException;
- public void engineInitSign(Key signingKey, AlgorithmParameterSpec algorithmParameterSpec) throws XMLSecurityException;
+ void engineInitSign(Key signingKey, AlgorithmParameterSpec algorithmParameterSpec) throws XMLSecurityException;
- public byte[] engineSign() throws XMLSecurityException;
+ byte[] engineSign() throws XMLSecurityException;
- public void engineInitVerify(Key verificationKey) throws XMLSecurityException;
+ void engineInitVerify(Key verificationKey) throws XMLSecurityException;
- public boolean engineVerify(byte[] signature) throws XMLSecurityException;
+ boolean engineVerify(byte[] signature) throws XMLSecurityException;
- public void engineSetParameter(AlgorithmParameterSpec params) throws XMLSecurityException;
+ void engineSetParameter(AlgorithmParameterSpec params) throws XMLSecurityException;
}
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/AbstractDecryptInputProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/AbstractDecryptInputProcessor.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/AbstractDecryptInputProcessor.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/AbstractDecryptInputProcessor.java Sun May 13 17:27:10 2012
@@ -19,6 +19,8 @@
package org.swssf.xmlsec.impl.processor.input;
import org.apache.commons.codec.binary.Base64OutputStream;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.swssf.binding.xmldsig.KeyInfoType;
import org.swssf.binding.xmldsig.TransformType;
import org.swssf.binding.xmldsig.TransformsType;
@@ -66,9 +68,11 @@ import java.util.*;
*/
public abstract class AbstractDecryptInputProcessor extends AbstractInputProcessor {
- private ReferenceList referenceList;
+ private static final transient Log logger = LogFactory.getLog(AbstractDecryptInputProcessor.class);
+
private KeyInfoType keyInfoType;
- private List<ReferenceType> processedReferences = new ArrayList<ReferenceType>();
+ private Map<String, ReferenceType> references;
+ private List<ReferenceType> processedReferences;
private final String uuid = IDGenerator.generateID(null);
private final QName wrapperElementName = new QName("http://dummy", "dummy", uuid);
@@ -80,35 +84,36 @@ public abstract class AbstractDecryptInp
XMLSecurityProperties securityProperties) throws XMLSecurityException {
super(securityProperties);
this.keyInfoType = keyInfoType;
- this.referenceList = referenceList;
- if (referenceList != null) {
- List<JAXBElement<ReferenceType>> references = referenceList.getDataReferenceOrKeyReference();
- Iterator<JAXBElement<ReferenceType>> referenceTypeIterator = references.iterator();
- while (referenceTypeIterator.hasNext()) {
- ReferenceType referenceType = referenceTypeIterator.next().getValue();
- if (referenceType.getURI() == null) {
- throw new XMLSecurityException(XMLSecurityException.ErrorCode.FAILED_CHECK);
- }
+ final List<JAXBElement<ReferenceType>> dataReferenceOrKeyReference = referenceList.getDataReferenceOrKeyReference();
+ references = new HashMap<String, ReferenceType>(dataReferenceOrKeyReference.size() + 1); //+1 because the HashMap will resize otherwise
+ processedReferences = new ArrayList<ReferenceType>(dataReferenceOrKeyReference.size());
+
+ Iterator<JAXBElement<ReferenceType>> referenceTypeIterator = dataReferenceOrKeyReference.iterator();
+ while (referenceTypeIterator.hasNext()) {
+ ReferenceType referenceType = referenceTypeIterator.next().getValue();
+ if (referenceType.getURI() == null) {
+ throw new XMLSecurityException(XMLSecurityException.ErrorCode.FAILED_CHECK);
}
+ references.put(XMLSecurityUtils.dropReferenceMarker(referenceType.getURI()), referenceType);
}
}
/*
- <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="EncDataId-1612925417" Type="http://www.w3.org/2001/04/xmlenc#Content">
- <xenc:EncryptionMethod xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
- <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
- <wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
- <wsse:Reference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" URI="#EncKeyId-1483925398" />
- </wsse:SecurityTokenReference>
- </ds:KeyInfo>
- <xenc:CipherData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
- <xenc:CipherValue xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
- ...
- </xenc:CipherValue>
- </xenc:CipherData>
- </xenc:EncryptedData>
- */
+ <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="EncDataId-1612925417" Type="http://www.w3.org/2001/04/xmlenc#Content">
+ <xenc:EncryptionMethod xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
+ <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+ <wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
+ <wsse:Reference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" URI="#EncKeyId-1483925398" />
+ </wsse:SecurityTokenReference>
+ </ds:KeyInfo>
+ <xenc:CipherData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
+ <xenc:CipherValue xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
+ ...
+ </xenc:CipherValue>
+ </xenc:CipherData>
+ </xenc:EncryptedData>
+ */
@Override
public XMLEvent processNextHeaderEvent(InputProcessorChain inputProcessorChain) throws XMLStreamException, XMLSecurityException {
@@ -286,7 +291,7 @@ public abstract class AbstractDecryptInp
writer.write('\"');
//apply all namespaces from current scope to get a valid documentfragment:
- List<ComparableNamespace> comparableNamespacesToApply = new LinkedList<ComparableNamespace>();
+ List<ComparableNamespace> comparableNamespacesToApply = new ArrayList<ComparableNamespace>();
List<ComparableNamespace>[] comparableNamespaceList = startXMLElement.getNamespaceList();
for (int i = 0; i < comparableNamespaceList.length; i++) {
List<ComparableNamespace> comparableNamespaces = comparableNamespaceList[i];
@@ -338,7 +343,11 @@ public abstract class AbstractDecryptInp
Cipher symCipher;
try {
AlgorithmType symEncAlgo = JCEAlgorithmMapper.getAlgorithmMapping(algorithmURI);
- symCipher = Cipher.getInstance(symEncAlgo.getJCEName(), symEncAlgo.getJCEProvider());
+ if (symEncAlgo.getJCEProvider() != null) {
+ symCipher = Cipher.getInstance(symEncAlgo.getJCEName(), symEncAlgo.getJCEProvider());
+ } else {
+ symCipher = Cipher.getInstance(symEncAlgo.getJCEName());
+ }
//we have to defer the initialization of the cipher until we can extract the IV...
} catch (NoSuchAlgorithmException e) {
throw new XMLSecurityException(
@@ -370,8 +379,11 @@ public abstract class AbstractDecryptInp
getSecurityProperties().getCallbackHandler(), inputProcessorChain.getSecurityContext());
}
- private EncryptedDataType parseEncryptedDataStructure(boolean isSecurityHeaderEvent, XMLEvent xmlEvent, InputProcessorChain subInputProcessorChain) throws XMLStreamException, XMLSecurityException {
- Deque<XMLEvent> xmlEvents = new LinkedList<XMLEvent>();
+ private EncryptedDataType parseEncryptedDataStructure(
+ boolean isSecurityHeaderEvent, XMLEvent xmlEvent, InputProcessorChain subInputProcessorChain)
+ throws XMLStreamException, XMLSecurityException {
+
+ Deque<XMLEvent> xmlEvents = new ArrayDeque<XMLEvent>();
xmlEvents.push(xmlEvent);
XMLEvent encryptedDataXMLEvent;
int count = 0;
@@ -419,7 +431,8 @@ public abstract class AbstractDecryptInp
return xmlEvent;
}
- private XMLEvent readAndBufferEncryptedHeader(InputProcessorChain inputProcessorChain, boolean isSecurityHeaderEvent, XMLEvent xmlEvent) throws XMLStreamException, XMLSecurityException {
+ private XMLEvent readAndBufferEncryptedHeader(InputProcessorChain inputProcessorChain, boolean isSecurityHeaderEvent,
+ XMLEvent xmlEvent) throws XMLStreamException, XMLSecurityException {
InputProcessorChain subInputProcessorChain = inputProcessorChain.createSubChain(this);
do {
tmpXmlEventList.push(xmlEvent);
@@ -470,16 +483,8 @@ public abstract class AbstractDecryptInp
Attribute refId = getReferenceIDAttribute(startElement);
if (refId != null) {
- //exists the id in the referenceList?
- List<JAXBElement<ReferenceType>> references = referenceList.getDataReferenceOrKeyReference();
- Iterator<JAXBElement<ReferenceType>> referenceTypeIterator = references.iterator();
- while (referenceTypeIterator.hasNext()) {
- ReferenceType referenceType = referenceTypeIterator.next().getValue();
- if (refId.getValue().equals(XMLSecurityUtils.dropReferenceMarker(referenceType.getURI()))) {
- logger.debug("Found encryption reference: " + refId.getValue() + " on element" + startElement.getName());
- return referenceType;
- }
- }
+ //does the id exist in the referenceList?
+ return this.references.get(refId.getValue());
}
return null;
}
@@ -487,11 +492,10 @@ public abstract class AbstractDecryptInp
@Override
public void doFinal(InputProcessorChain inputProcessorChain) throws XMLStreamException, XMLSecurityException {
//here we check if all references where processed.
- List<JAXBElement<ReferenceType>> references = referenceList.getDataReferenceOrKeyReference();
- Iterator<JAXBElement<ReferenceType>> referenceTypeIterator = references.iterator();
- while (referenceTypeIterator.hasNext()) {
- ReferenceType referenceType = referenceTypeIterator.next().getValue();
- if (!processedReferences.contains(referenceType)) {
+ Iterator<Map.Entry<String, ReferenceType>> refEntryIterator = this.references.entrySet().iterator();
+ while (refEntryIterator.hasNext()) {
+ Map.Entry<String, ReferenceType> referenceTypeEntry = refEntryIterator.next();
+ if (!processedReferences.contains(referenceTypeEntry.getValue())) {
throw new XMLSecurityException(XMLSecurityException.ErrorCode.FAILED_CHECK, "unprocessedEncryptionReferences");
}
}
@@ -505,8 +509,8 @@ public abstract class AbstractDecryptInp
public abstract class AbstractDecryptedEventReaderInputProcessor extends AbstractInputProcessor implements Thread.UncaughtExceptionHandler {
private XMLEventReader xmlEventReader;
- private Deque<List<ComparableNamespace>> nsStack = new ArrayDeque<List<ComparableNamespace>>(10);
- private Deque<List<ComparableAttribute>> attrStack = new ArrayDeque<List<ComparableAttribute>>(10);
+ private Deque<List<ComparableNamespace>> nsStack = new ArrayDeque<List<ComparableNamespace>>();
+ private Deque<List<ComparableAttribute>> attrStack = new ArrayDeque<List<ComparableAttribute>>();
private SecurePart.Modifier encryptionModifier;
private boolean encryptedHeader = false;
private int documentLevel = 0;
@@ -522,7 +526,7 @@ public abstract class AbstractDecryptInp
SecurityToken securityToken
) {
super(securityProperties);
- getAfterProcessors().add(abstractDecryptInputProcessor);
+ addAfterProcessor(abstractDecryptInputProcessor);
this.encryptionModifier = encryptionModifier;
this.rootElementProcessed = encryptionModifier != SecurePart.Modifier.Element;
this.encryptedHeader = encryptedHeader;
@@ -567,10 +571,13 @@ public abstract class AbstractDecryptInp
handleEncryptedElement(inputProcessorChain, xmlEvent, this.securityToken);
rootElementProcessed = true;
}
+ if (!(xmlEvent instanceof XMLEventNS)) {
+ xmlEvent = XMLSecurityUtils.createXMLEventNS(xmlEvent, nsStack, attrStack);
+ }
} else if (xmlEvent.isEndElement()) {
- if (xmlEvent.isEndElement() && xmlEvent.asEndElement().getName().equals(wrapperElementName)) {
+ if (xmlEvent.asEndElement().getName().equals(wrapperElementName)) {
//correct path and skip EndElements:
InputProcessorChain subInputProcessorChain = inputProcessorChain.createSubChain(this);
@@ -614,17 +621,15 @@ public abstract class AbstractDecryptInp
}
documentLevel--;
- }
-
- if (!(xmlEvent instanceof XMLEventNS)) {
- xmlEvent = XMLSecurityUtils.createXMLEventNS(xmlEvent, nsStack, attrStack);
+ nsStack.pop();
+ attrStack.pop();
}
return xmlEvent;
}
protected abstract void handleEncryptedElement(InputProcessorChain inputProcessorChain, XMLEvent xmlEvent, SecurityToken securityToken) throws XMLSecurityException;
- private Throwable thrownException;
+ private volatile Throwable thrownException;
public void uncaughtException(Thread t, Throwable e) {
this.thrownException = e;
@@ -663,8 +668,7 @@ public abstract class AbstractDecryptInp
this.startXMLElement = startXMLElement;
//prepare the piped streams and connect them:
- //5 * 8192 seems to be a fine value
- this.pipedInputStream = new PipedInputStream(40960);
+ this.pipedInputStream = new PipedInputStream(8192);
try {
this.pipedOutputStream = new PipedOutputStream(pipedInputStream);
} catch (IOException e) {
@@ -694,22 +698,23 @@ public abstract class AbstractDecryptInp
//buffering seems not to help
//bufferedOutputStream = new BufferedOutputStream(new Base64OutputStream(ivSplittingOutputStream, false), 8192 * 5);
ReplaceableOuputStream replaceableOuputStream = new ReplaceableOuputStream(ivSplittingOutputStream);
- OutputStream decryptOutputStream = new Base64OutputStream(replaceableOuputStream, false);
+ OutputStream base64OutputStream = new Base64OutputStream(replaceableOuputStream, false);
ivSplittingOutputStream.setParentOutputStream(replaceableOuputStream);
+ OutputStreamWriter outputStreamWriter = new OutputStreamWriter(base64OutputStream, inputProcessorChain.getDocumentContext().getEncoding());
//read the encrypted data from the stream until an end-element occurs and write then
//to the decrypter-stream
- boolean finished = false;
- while (!finished) {
+ exitLoop:
+ while (true) {
XMLEvent xmlEvent = processNextEvent();
switch (xmlEvent.getEventType()) {
case XMLStreamConstants.END_ELEMENT:
- //this must be the CipherValue EndElement.
- finished = true;
- break;
+ //this must be the CipherValue EndElement.
+ break exitLoop;
case XMLStreamConstants.CHARACTERS:
- decryptOutputStream.write(xmlEvent.asCharacters().getData().getBytes(inputProcessorChain.getDocumentContext().getEncoding()));
+ final String data = xmlEvent.asCharacters().getData();
+ outputStreamWriter.write(data, 0, data.length());
break;
default:
throw new XMLSecurityException(XMLSecurityException.ErrorCode.FAILED_CHECK, "unexpectedXMLEvent", XMLSecurityUtils.getXMLEventAsString(xmlEvent));
@@ -717,10 +722,17 @@ public abstract class AbstractDecryptInp
}
//close to get Cipher.doFinal() called
- decryptOutputStream.close();
+ outputStreamWriter.close();
logger.debug("Decryption thread finished");
} catch (Exception e) {
+ try {
+ //we have to close the pipe when an exception occurs. Otherwise we can run into a deadlock when an exception occurs
+ //before we have written any byte to the pipe.
+ this.pipedOutputStream.close();
+ } catch (IOException e1) {
+ //ignore since we will throw the original exception below
+ }
throw new UncheckedXMLSecurityException(e);
}
}
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/AbstractSignatureReferenceVerifyInputProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/AbstractSignatureReferenceVerifyInputProcessor.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/AbstractSignatureReferenceVerifyInputProcessor.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/AbstractSignatureReferenceVerifyInputProcessor.java Sun May 13 17:27:10 2012
@@ -19,6 +19,8 @@
package org.swssf.xmlsec.impl.processor.input;
import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.swssf.binding.excc14n.InclusiveNamespaces;
import org.swssf.binding.xmldsig.ReferenceType;
import org.swssf.binding.xmldsig.SignatureType;
@@ -41,8 +43,7 @@ import java.lang.reflect.InvocationTarge
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
/**
* @author $Author$
@@ -50,14 +51,33 @@ import java.util.List;
*/
public abstract class AbstractSignatureReferenceVerifyInputProcessor extends AbstractInputProcessor {
+ private static final transient Log logger = LogFactory.getLog(AbstractSignatureReferenceVerifyInputProcessor.class);
+
private SignatureType signatureType;
private SecurityToken securityToken;
- private List<ReferenceType> processedReferences = new ArrayList<ReferenceType>();
+ private Map<String, ReferenceType> references;
+ private List<ReferenceType> processedReferences;
- public AbstractSignatureReferenceVerifyInputProcessor(SignatureType signatureType, SecurityToken securityToken, XMLSecurityProperties securityProperties) {
+ public AbstractSignatureReferenceVerifyInputProcessor(SignatureType signatureType, SecurityToken securityToken,
+ XMLSecurityProperties securityProperties) throws XMLSecurityException {
super(securityProperties);
this.signatureType = signatureType;
this.securityToken = securityToken;
+
+ List<ReferenceType> referencesTypeList = signatureType.getSignedInfo().getReference();
+ references = new HashMap<String, ReferenceType>(referencesTypeList.size() + 1);
+ processedReferences = new ArrayList<ReferenceType>(referencesTypeList.size());
+
+ //if (referenceList != null) {
+ Iterator<ReferenceType> referenceTypeIterator = referencesTypeList.iterator();
+ while (referenceTypeIterator.hasNext()) {
+ ReferenceType referenceType = referenceTypeIterator.next();
+ if (referenceType.getURI() == null) {
+ throw new XMLSecurityException(XMLSecurityException.ErrorCode.FAILED_CHECK);
+ }
+ references.put(XMLSecurityUtils.dropReferenceMarker(referenceType.getURI()), referenceType);
+ }
+ //}
}
public SignatureType getSignatureType() {
@@ -107,25 +127,18 @@ public abstract class AbstractSignatureR
protected ReferenceType matchesReferenceId(StartElement startElement) {
Attribute refId = getReferenceIDAttribute(startElement);
if (refId != null) {
- List<ReferenceType> references = getSignatureType().getSignedInfo().getReference();
- for (int i = 0; i < references.size(); i++) {
- ReferenceType referenceType = references.get(i);
- if (refId.getValue().equals(XMLSecurityUtils.dropReferenceMarker(referenceType.getURI()))) {
- logger.debug("Found signature reference: " + refId.getValue() + " on element" + startElement.getName());
- return referenceType;
- }
- }
+ return references.get(refId.getValue());
}
return null;
}
@Override
public void doFinal(InputProcessorChain inputProcessorChain) throws XMLStreamException, XMLSecurityException {
- List<ReferenceType> references = getSignatureType().getSignedInfo().getReference();
- for (int i = 0; i < references.size(); i++) {
- ReferenceType referenceType = references.get(i);
- if (!processedReferences.contains(referenceType)) {
- throw new XMLSecurityException(XMLSecurityException.ErrorCode.FAILED_CHECK, "unprocessedSignatureReferences");
+ Iterator<Map.Entry<String, ReferenceType>> refEntryIterator = this.references.entrySet().iterator();
+ while (refEntryIterator.hasNext()) {
+ Map.Entry<String, ReferenceType> referenceTypeEntry = refEntryIterator.next();
+ if (!processedReferences.contains(referenceTypeEntry.getValue())) {
+ throw new XMLSecurityException(XMLSecurityException.ErrorCode.FAILED_CHECK, "unprocessedEncryptionReferences");
}
}
inputProcessorChain.doFinal();
@@ -158,7 +171,12 @@ public abstract class AbstractSignatureR
protected AlgorithmType createMessageDigest(SecurityContext securityContext) throws XMLSecurityException, NoSuchAlgorithmException, NoSuchProviderException {
AlgorithmType digestAlgorithm = JCEAlgorithmMapper.getAlgorithmMapping(getReferenceType().getDigestMethod().getAlgorithm());
- MessageDigest messageDigest = MessageDigest.getInstance(digestAlgorithm.getJCEName(), digestAlgorithm.getJCEProvider());
+ MessageDigest messageDigest;
+ if (digestAlgorithm.getJCEProvider() != null) {
+ messageDigest = MessageDigest.getInstance(digestAlgorithm.getJCEName(), digestAlgorithm.getJCEProvider());
+ } else {
+ messageDigest = MessageDigest.getInstance(digestAlgorithm.getJCEName());
+ }
this.setDigestOutputStream(new DigestOutputStream(messageDigest));
this.setBufferedDigestOutputStream(new BufferedOutputStream(this.getDigestOutputStream()));
return digestAlgorithm;
@@ -200,12 +218,12 @@ public abstract class AbstractSignatureR
getTransformer().transform(xmlEvent);
if (xmlEvent.isStartElement()) {
- setElementCounter(getElementCounter() + 1);
+ this.elementCounter++;
} else if (xmlEvent.isEndElement()) {
EndElement endElement = xmlEvent.asEndElement();
- setElementCounter(getElementCounter() - 1);
+ this.elementCounter--;
- if (endElement.getName().equals(getStartElement()) && getElementCounter() == 0) {
+ if (this.elementCounter == 0 && endElement.getName().equals(getStartElement())) {
try {
getBufferedDigestOutputStream().close();
} catch (IOException e) {
@@ -234,6 +252,10 @@ public abstract class AbstractSignatureR
return finished;
}
+ protected void setFinished(boolean finished) {
+ this.finished = finished;
+ }
+
protected ReferenceType getReferenceType() {
return referenceType;
}
@@ -273,17 +295,5 @@ public abstract class AbstractSignatureR
protected void setStartElement(QName startElement) {
this.startElement = startElement;
}
-
- protected int getElementCounter() {
- return elementCounter;
- }
-
- protected void setElementCounter(int elementCounter) {
- this.elementCounter = elementCounter;
- }
-
- protected void setFinished(boolean finished) {
- this.finished = finished;
- }
}
}
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/LogInputProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/LogInputProcessor.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/LogInputProcessor.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/LogInputProcessor.java Sun May 13 17:27:10 2012
@@ -18,6 +18,8 @@
*/
package org.swssf.xmlsec.impl.processor.input;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.swssf.xmlsec.ext.*;
import javax.xml.stream.XMLStreamException;
@@ -30,6 +32,8 @@ import java.io.StringWriter;
*/
public class LogInputProcessor extends AbstractInputProcessor {
+ private static final transient Log logger = LogFactory.getLog(LogInputProcessor.class);
+
public LogInputProcessor(XMLSecurityProperties securityProperties) {
super(securityProperties);
setPhase(XMLSecurityConstants.Phase.POSTPROCESSING);
Modified: webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/XMLEventReaderInputProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/XMLEventReaderInputProcessor.java?rev=1337945&r1=1337944&r2=1337945&view=diff
==============================================================================
--- webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/XMLEventReaderInputProcessor.java (original)
+++ webservices/wss4j/branches/swssf/streaming-xml-security/src/main/java/org/swssf/xmlsec/impl/processor/input/XMLEventReaderInputProcessor.java Sun May 13 17:27:10 2012
@@ -37,8 +37,8 @@ import java.util.List;
public class XMLEventReaderInputProcessor extends AbstractInputProcessor {
private XMLEventReader xmlEventReader;
- private Deque<List<ComparableNamespace>> nsStack = new ArrayDeque<List<ComparableNamespace>>(10);
- private Deque<List<ComparableAttribute>> attrStack = new ArrayDeque<List<ComparableAttribute>>(10);
+ private Deque<List<ComparableNamespace>> nsStack = new ArrayDeque<List<ComparableNamespace>>();
+ private Deque<List<ComparableAttribute>> attrStack = new ArrayDeque<List<ComparableAttribute>>();
public XMLEventReaderInputProcessor(XMLSecurityProperties securityProperties, XMLEventReader xmlEventReader) {
super(securityProperties);
@@ -57,10 +57,13 @@ public class XMLEventReaderInputProcesso
}
private XMLEvent processNextEventInternal(InputProcessorChain inputProcessorChain) throws XMLStreamException {
- XMLEvent xmlEvent = XMLSecurityUtils.createXMLEventNS(xmlEventReader.nextEvent(), nsStack, attrStack);
+ XMLEvent xmlEvent = xmlEventReader.nextEvent();
if (xmlEvent.isStartElement()) {
+ xmlEvent = XMLSecurityUtils.createXMLEventNS(xmlEvent, nsStack, attrStack);
inputProcessorChain.getDocumentContext().addPathElement(xmlEvent.asStartElement().getName());
} else if (xmlEvent.isEndElement()) {
+ nsStack.pop();
+ attrStack.pop();
inputProcessorChain.getDocumentContext().removePathElement();
}
return xmlEvent;