Author: muthulee
Date: Mon Jul 23 20:24:03 2007
New Revision: 558920

URL: http://svn.apache.org/viewvc?view=rev&rev=558920
Log:
Fixing Rampart - 61

Added:
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/OptimizePartsBuilder.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/OptimizePartsConfig.java
Modified:
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/MessageOptimizer.java

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java?view=diff&rev=558920&r1=558919&r2=558920
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java
 Mon Jul 23 20:24:03 2007
@@ -34,6 +34,7 @@
 import org.apache.rampart.builder.SymmetricBindingBuilder;
 import org.apache.rampart.builder.TransportBindingBuilder;
 import org.apache.rampart.policy.RampartPolicyData;
+import org.apache.rampart.policy.model.OptimizePartsConfig;
 import org.apache.rampart.util.Axis2Util;
 import org.apache.rampart.util.MessageOptimizer;
 import org.apache.rampart.util.RampartUtil;
@@ -134,12 +135,9 @@
         * Checking whether MTOMSerializable is there. If so set 
optimizeElement.
         * */
         if(rpd.isMTOMSerialize()){
-               String optimizeElement = rpd.getOptimizeParts();
-               if(optimizeElement == null){
-                         optimizeElement = 
"//xenc:EncryptedData/xenc:CipherData/xenc:CipherValue";
-               }
                msgCtx.setProperty(Constants.Configuration.ENABLE_MTOM, 
Constants.VALUE_TRUE);
-               MessageOptimizer.optimize(msgCtx.getEnvelope(),optimizeElement);
+               OptimizePartsConfig config= rpd.getOptimizePartsConfig();
+               MessageOptimizer.optimize(msgCtx.getEnvelope(), 
config.getExpressions(), config.getNamespaces());
         }
         
     }

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java?view=diff&rev=558920&r1=558919&r2=558920
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
 Mon Jul 23 20:24:03 2007
@@ -19,6 +19,7 @@
 import org.apache.axis2.policy.model.MTOMAssertion;
 import org.apache.neethi.Policy;
 import org.apache.rampart.RampartException;
+import org.apache.rampart.policy.model.OptimizePartsConfig;
 import org.apache.rampart.policy.model.RampartConfig;
 import org.apache.ws.secpolicy.Constants;
 import org.apache.ws.secpolicy.WSSPolicyException;
@@ -662,7 +663,7 @@
                return false;
     }
     
-    public String getOptimizeParts(){
+    public OptimizePartsConfig getOptimizePartsConfig(){
        return rampartConfig.getOptimizeParts();
     }
    

Added: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/OptimizePartsBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/OptimizePartsBuilder.java?view=auto&rev=558920
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/OptimizePartsBuilder.java
 (added)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/OptimizePartsBuilder.java
 Mon Jul 23 20:24:03 2007
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.rampart.policy.builders;
+
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.AssertionBuilderFactory;
+import org.apache.neethi.builders.AssertionBuilder;
+import org.apache.rampart.policy.model.OptimizePartsConfig;
+import org.apache.rampart.policy.model.RampartConfig;
+
+/**
+ * OptimizePartsBuilder creates the OptimizePartsConfig
+ * 
+ * This clase deserialize the following XML fragment inside the RampartConfig.
+ * Example
+<pre>
+&lt;ramp:optimizeParts&gt;<br />
+&lt;ramp:expressions&gt;<br />
+&lt;ramp:expression&gt;//ns1:data1&lt;/ramp:expression&gt;<br />
+&lt;ramp:expression&gt;//ns2:data2&lt;/ramp:expression&gt;<br />
+&lt;/ramp:expressions&gt;<br />
+&nbsp;&lt;ramp:namespaces&gt;<br />
+&lt;nampespace uri="http://test1.com"; prefix="ns1"/&gt;<br />
+&lt;nampespace uri="http://test2.com"; prefix="ns2"/&gt;<br />
+&lt;/ramp:namespaces&gt;<br />
+&lt;/ramp:optimizeParts&gt;
+</pre>
+ * @see OptimizePartsConfig
+ */
+public class OptimizePartsBuilder implements AssertionBuilder{
+
+       public Assertion build(OMElement element, AssertionBuilderFactory 
factory) throws IllegalArgumentException {
+               OptimizePartsConfig assertion = new OptimizePartsConfig();
+               OMElement expressionsElem = element.getFirstChildWithName(new 
QName(RampartConfig.NS, OptimizePartsConfig.EXPRESSIONS_LN));
+               
+               if(expressionsElem != null){
+                       Iterator iterator = expressionsElem.getChildElements();
+                       while(iterator.hasNext()){
+                               OMElement elem = (OMElement)iterator.next();
+                               String expression = elem.getText();
+                               assertion.addExpression(expression);
+                       }
+                       
+               }
+               
+               OMElement nsElem = element.getFirstChildWithName(new 
QName(RampartConfig.NS, OptimizePartsConfig.NAMESPACES_LN));
+               if(nsElem != null){
+                       Iterator iterator = nsElem.getChildElements();
+                       while(iterator.hasNext()){
+                               OMElement elem = (OMElement)iterator.next();
+                               String namespace = elem.getText();
+                               String prefix = elem.getAttributeValue(new 
QName("", OptimizePartsConfig.PREFIX_ATTR));
+                               String uri = elem.getAttributeValue(new 
QName("", OptimizePartsConfig.URI_ATTR));
+                               assertion.addNamespaces(prefix, uri);
+                       }
+                       
+               }
+               return assertion;
+       }
+
+       public QName[] getKnownElements() {
+               return new QName[] {new QName(RampartConfig.NS, 
OptimizePartsConfig.OPTIMIZE_PARTS_LN)};
+       }
+       
+}

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java?view=diff&rev=558920&r1=558919&r2=558920
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
 Mon Jul 23 20:24:03 2007
@@ -22,6 +22,7 @@
 import org.apache.neethi.AssertionBuilderFactory;
 import org.apache.neethi.builders.AssertionBuilder;
 import org.apache.rampart.policy.model.CryptoConfig;
+import org.apache.rampart.policy.model.OptimizePartsConfig;
 import org.apache.rampart.policy.model.RampartConfig;
 import org.apache.rampart.policy.model.SSLConfig;
 
@@ -47,12 +48,6 @@
         }
         
         childElement = element.getFirstChildWithName(new QName(
-                RampartConfig.NS, RampartConfig.OPTIMISE_PARTS_LN));
-        if (childElement != null) {
-            rampartConfig.setOptimizeParts(childElement.getText().trim());
-        }
-
-        childElement = element.getFirstChildWithName(new QName(
                 RampartConfig.NS, RampartConfig.PW_CB_CLASS_LN));
         if (childElement != null) {
             rampartConfig.setPwCbClass(childElement.getText().trim());
@@ -70,7 +65,6 @@
             
         }
         
-                      
         childElement = element.getFirstChildWithName(new QName(
                 RampartConfig.NS, RampartConfig.SIG_CRYPTO_LN));
         if (childElement != null) {
@@ -88,6 +82,14 @@
                 RampartConfig.NS, RampartConfig.TS_MAX_SKEW_LN));
         if (childElement != null) {
             rampartConfig.setTimestampMaxSkew(childElement.getText().trim());
+        }
+        
+               childElement = element.getFirstChildWithName(new QName(
+                RampartConfig.NS, RampartConfig.OPTIMISE_PARTS));
+        if (childElement != null) {
+               OptimizePartsConfig config = (OptimizePartsConfig)new 
OptimizePartsBuilder().
+            build(childElement, factory);
+               rampartConfig.setOptimizeParts(config);
         }
 
         return rampartConfig;

Added: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/OptimizePartsConfig.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/OptimizePartsConfig.java?view=auto&rev=558920
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/OptimizePartsConfig.java
 (added)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/OptimizePartsConfig.java
 Mon Jul 23 20:24:03 2007
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.rampart.policy.model;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.neethi.Assertion;
+import org.apache.neethi.Constants;
+import org.apache.neethi.PolicyComponent;
+
+
+public class OptimizePartsConfig implements Assertion{
+
+       public final static String OPTIMIZE_PARTS_LN = 
RampartConfig.OPTIMISE_PARTS;
+       public final static String EXPRESSIONS_LN = "expressions";
+       public final static String EXPRESSION_LN = "expression";
+       public final static String NAMESPACES_LN = "namespaces";
+       public final static String NAMESPACE_LN = "namespace";
+       public final static String URI_ATTR = "uri";
+       public final static String PREFIX_ATTR = "prefix";
+       
+       private Map namespaces = null;
+       private Vector expressions = null;
+       
+       public OptimizePartsConfig(){
+               namespaces = new HashMap();
+               expressions = new Vector();
+       }
+       
+       public void addExpression(String expression){
+               expressions.add(expression);
+       }
+       
+       public void addNamespaces(String prefix, String ns){
+               namespaces.put(prefix, ns);
+       }
+       
+       public Vector getExpressions() {
+               return expressions;
+       }
+
+       public Map getNamespaces() {
+               return namespaces;
+       }
+       
+       public short getType() {
+        return Constants.TYPE_ASSERTION;
+       }
+       
+       public QName getName() {
+               return new QName(RampartConfig.NS, OPTIMIZE_PARTS_LN);
+       }
+       
+       public void serialize(XMLStreamWriter writer) throws XMLStreamException 
{
+               String prefix = writer.getPrefix(RampartConfig.NS);
+        
+        if (prefix == null) {
+            prefix = RampartConfig.NS;
+            writer.setPrefix(prefix, RampartConfig.NS);
+        }                
+        
+        writer.writeStartElement(RampartConfig.NS, OPTIMIZE_PARTS_LN);
+        
+        if((expressions != null) && (expressions.size()>0)){
+                 writer.writeStartElement(RampartConfig.NS, EXPRESSIONS_LN);
+                 Iterator ite = expressions.iterator();
+                 while(ite.hasNext()){
+                         writer.writeStartElement(RampartConfig.NS, 
EXPRESSION_LN);
+                         String exp = (String)ite.next();
+                         writer.writeCharacters(exp);
+                         writer.writeEndElement();
+                 }
+              writer.writeEndElement();
+        }
+        
+        if((namespaces != null) && (namespaces.size()>0)){
+                 writer.writeStartElement(RampartConfig.NS, NAMESPACES_LN);
+                 Iterator ite = namespaces.keySet().iterator();
+                 while(ite.hasNext()){
+                         String strPrefix = (String)ite.next();
+                         String strURI = (String) namespaces.get(strPrefix);
+                         writer.writeAttribute(URI_ATTR , strURI);
+                         writer.writeAttribute(PREFIX_ATTR, strPrefix);
+                         writer.writeEndElement();
+                 }
+              writer.writeEndElement();
+        }
+        writer.writeEndElement();
+       }
+       
+       public PolicyComponent normalize() {
+               //TODO
+               throw new UnsupportedOperationException("TODO");
+       }
+       
+       public boolean isOptional() {
+               throw new UnsupportedOperationException("Not relevant");
+       }
+       
+       public boolean equal(PolicyComponent arg0) {
+               throw new UnsupportedOperationException("Not relevant");
+       }
+
+       
+
+
+}

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java?view=diff&rev=558920&r1=558919&r2=558920
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java
 Mon Jul 23 20:24:03 2007
@@ -87,8 +87,10 @@
 
     public final static String TOKEN_STORE_CLASS_LN = "tokenStoreClass";
     
-    public final static String OPTIMISE_PARTS_LN = "optimizeParts";
+    public final static String OPTIMISE_PARTS = "optimizeParts";
 
+    public final static String SSL_CONFIG = "sslConfig";
+    
     private String user;
 
     private String encryptionUser;
@@ -105,15 +107,12 @@
     
     private String timestampMaxSkew = 
Integer.toString(DEFAULT_TIMESTAMP_MAX_SKEW);
 
-    private String optimizeParts;
+    private OptimizePartsConfig optimizeParts;
 
     private String tokenStoreClass;
     
     private SSLConfig sslConfig;
     
-    public final static String SSL_CONFIG = "sslConfig";
-    
-    
     public SSLConfig getSSLConfig() {
         return sslConfig;
     }
@@ -307,23 +306,13 @@
     public void setTimestampMaxSkew(String timestampMaxSkew) {
         this.timestampMaxSkew = timestampMaxSkew;
     }
-    
-    /**
-     * @param strOptimizeParts 
-     *                         The xpath of elements that should be optimized
-     */
-    public void setOptimizeParts(String strOptimizeParts){
-       optimizeParts = strOptimizeParts;
-    }
-    
-    /**
-     * 
-     * @return The Xpath string of indicating elements to be optimized or null.
-     */
-    
-    public String getOptimizeParts(){
-       return optimizeParts;
-    }
-    
+
+       public OptimizePartsConfig getOptimizeParts() {
+               return optimizeParts;
+       }
+
+       public void setOptimizeParts(OptimizePartsConfig optimizeParts) {
+               this.optimizeParts = optimizeParts;
+       }
     
 }

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/MessageOptimizer.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/MessageOptimizer.java?view=diff&rev=558920&r1=558919&r2=558920
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/MessageOptimizer.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/MessageOptimizer.java
 Mon Jul 23 20:24:03 2007
@@ -20,6 +20,7 @@
 import org.apache.axiom.om.OMText;
 import org.apache.axiom.om.xpath.AXIOMXPath;
 import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.rampart.RampartException;
 import org.apache.ws.security.WSConstants;
 import org.apache.ws.security.WSSecurityException;
 import org.jaxen.JaxenException;
@@ -28,12 +29,64 @@
 
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.StringTokenizer;
+import java.util.Vector;
 
 /**
  * Utility class to handle MTOM-Optimizing Base64 Text values
  */
 public class MessageOptimizer {
+       
+       private static final String CIPHER_ELEMENT = 
"//xenc:EncryptedData/xenc:CipherData/xenc:CipherValue";
+
+       public static void optimize(SOAPEnvelope env, Vector expressions, Map 
namespaces) throws RampartException {
+               
+               SimpleNamespaceContext nsCtx = new SimpleNamespaceContext();
+               nsCtx.addNamespace(WSConstants.ENC_PREFIX,WSConstants.ENC_NS);
+               nsCtx.addNamespace(WSConstants.SIG_PREFIX,WSConstants.SIG_NS);
+               nsCtx.addNamespace(WSConstants.WSSE_PREFIX,WSConstants.WSSE_NS);
+               nsCtx.addNamespace(WSConstants.WSU_PREFIX,WSConstants.WSU_NS);
+
+               Iterator keys = namespaces.keySet().iterator();
+               while(keys.hasNext()){
+                       String strPrefix =  (String)keys.next();
+                       String strNS = (String)namespaces.get(strPrefix);
+                       nsCtx.addNamespace(strPrefix,strNS);
+               }
+
+               try {
+                       if(expressions.size() > 0){
+                               for(int i=0; i<expressions.size(); i++){
+                                       String exp = (String)expressions.get(i);
+                                       XPath xp = new AXIOMXPath(exp);
+                                       xp.setNamespaceContext(nsCtx);
+                                       List list = xp.selectNodes(env);
+                                       Iterator elements = list.iterator();
+                                       while (elements.hasNext()) {
+                                               OMElement element = (OMElement) 
elements.next();
+                                               OMText text = 
(OMText)element.getFirstOMChild();
+                                               text.setOptimize(true);
+                                       }
+                               }
+                       }else{
+                               String exp = CIPHER_ELEMENT;
+                               XPath xp = new AXIOMXPath(exp);
+                               xp.setNamespaceContext(nsCtx);
+                               List list = xp.selectNodes(env);
+                               Iterator elements = list.iterator();
+                               while (elements.hasNext()) {
+                                       OMElement element = (OMElement) 
elements.next();
+                                       OMText text = 
(OMText)element.getFirstOMChild();
+                                       text.setOptimize(true);
+                               }
+                       }
+               } catch (JaxenException e) {
+                       throw new RampartException("Error in XPath ", e);
+               }
+
+       }
+
 
        /**
         * Mark the requied Base64 text values as optimized
@@ -45,47 +98,47 @@
        public static void optimize(SOAPEnvelope env, String optimizeParts) 
throws WSSecurityException {
                String separater = "<>";
                StringTokenizer tokenizer = new StringTokenizer(optimizeParts, 
separater);
-               
+
                while(tokenizer.hasMoreTokens()) {
-                       
+
                        String xpathExpr = tokenizer.nextToken(); 
-                       
+
                        //Find binary content
                        List list = findElements(env,xpathExpr);
-                       
+
                        Iterator cipherValueElements = list.iterator();
-                       
+
                        while (cipherValueElements.hasNext()) {
                                OMElement element = (OMElement) 
cipherValueElements.next();
                                OMText text = (OMText)element.getFirstOMChild();
-                System.out.println(text.getText().length());
+                               System.out.println(text.getText().length());
                                text.setOptimize(true);
                        }
                }
        }
-       
-       
+
+
        private static List findElements(OMElement elem, String expression) 
throws WSSecurityException {
                try {
                        XPath xp = new AXIOMXPath(expression);
-                       
+
                        //Set namespaces
                        SimpleNamespaceContext nsCtx = new 
SimpleNamespaceContext();
                        
nsCtx.addNamespace(WSConstants.ENC_PREFIX,WSConstants.ENC_NS);
                        
nsCtx.addNamespace(WSConstants.SIG_PREFIX,WSConstants.SIG_NS);
                        
nsCtx.addNamespace(WSConstants.WSSE_PREFIX,WSConstants.WSSE_NS);
                        
nsCtx.addNamespace(WSConstants.WSU_PREFIX,WSConstants.WSU_NS);
-                       
+
                        xp.setNamespaceContext(nsCtx);
-                       
+
                        return xp.selectNodes(elem);
-                       
+
                } catch (JaxenException e) {
                        throw new WSSecurityException(e.getMessage(), e);
                }
-               
+
        }
-       
-       
-       
+
+
+
 }


Reply via email to