[jboss-svn-commits] JBossWS SVN: r707 - in branches/jbossws-1.0_Heiko/src: main/java/org/jboss/ws/addressing/soap main/java/org/jboss/ws/binding/soap main/java/org/jboss/ws/handler main/java/org/jboss/ws/jaxrpc/encoding main/java/org/jboss/ws/server main/java/org/jboss/ws/soap main/java/org/jboss/ws/soap/attachment main/java/org/jboss/ws/utils test/java/org/jboss/test/ws/encoded/marshalltest test/java/org/jboss/test/ws/samples/dynamichandler test/java/org/jboss/test/ws/soap test/java/org/jboss/test/ws/wsse

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Aug 8 12:29:28 EDT 2006


Author: heiko.braun at jboss.com
Date: 2006-08-08 12:29:01 -0400 (Tue, 08 Aug 2006)
New Revision: 707

Modified:
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/addressing/soap/SOAPAddressingPropertiesImpl.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/binding/soap/SOAPBindingProvider.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/binding/soap/SOAPMessageMarshaller.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/handler/HandlerChainBaseImpl.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArraySerializer.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/server/ServiceEndpoint.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/DOMEnvelopeBuilder.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SAAJElementWriter.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SOAPContentElement.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SOAPElementImpl.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SOAPEnvelopeImpl.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedSwAEncoder.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedXOPEncoder.java
   branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/utils/ThreadLocalAssociation.java
   branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/encoded/marshalltest/MarshallTestCase.java
   branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/samples/dynamichandler/DynamicHandlerTestCase.java
   branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/soap/SOAPContentElementTestCase.java
   branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/soap/SOAPHeaderElementTestCase.java
   branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/soap/SOAPHeaderTestCase.java
   branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/wsse/MicrosoftInteropTestCase.java
   branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/wsse/RoundTripTestCase.java
Log:
eleminate unnessecary DOM API calls

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/addressing/soap/SOAPAddressingPropertiesImpl.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/addressing/soap/SOAPAddressingPropertiesImpl.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/addressing/soap/SOAPAddressingPropertiesImpl.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -53,6 +53,7 @@
 import org.jboss.ws.soap.NameImpl;
 import org.jboss.ws.soap.SOAPElementImpl;
 import org.jboss.ws.soap.SOAPFactoryImpl;
+import org.jboss.ws.utils.ThreadLocalAssociation;
 import org.jboss.xb.binding.NamespaceRegistry;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
@@ -74,8 +75,13 @@
 
    public void readHeaders(SOAPMessage message) throws AddressingException
    {
+
+      Boolean domExpansion = ThreadLocalAssociation.localDomExpansion().get();
+
       try
       {
+         ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+
          SOAPHeader soapHeader = message.getSOAPHeader();
 
          SOAPAddressingBuilder builder = new SOAPAddressingBuilderImpl();
@@ -183,6 +189,9 @@
       {
          throw new AddressingException("Cannot read headers", ex);
       }
+      finally{
+         ThreadLocalAssociation.localDomExpansion().set(domExpansion);
+      }
    }
 
    public void writeHeaders(SOAPMessage message) throws AddressingException

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/binding/soap/SOAPBindingProvider.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/binding/soap/SOAPBindingProvider.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/binding/soap/SOAPBindingProvider.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -42,9 +42,9 @@
 import org.jboss.ws.soap.*;
 import org.jboss.ws.soap.attachment.AttachmentPartImpl;
 import org.jboss.ws.soap.attachment.CIDGenerator;
-import org.jboss.ws.soap.attachment.MimeConstants;
 import org.jboss.ws.utils.JavaUtils;
 import org.jboss.ws.utils.MimeUtils;
+import org.jboss.ws.utils.ThreadLocalAssociation;
 import org.jboss.xb.binding.NamespaceRegistry;
 import org.w3c.dom.Element;
 
@@ -79,6 +79,9 @@
 
       try
       {
+         // disable DOMExpansion
+         ThreadLocalAssociation.localDomExpansion().set(Boolean.FALSE);
+
          SOAPMessageContextImpl msgContext = MessageContextAssociation.peekMessageContext();
          if (msgContext == null)
             throw new WSException("MessageContext not available");
@@ -180,6 +183,9 @@
          handleException(e);
          return null;
       }
+      finally{
+         ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+      }
    }
 
    /** On the server side, extract the IN parameters from the payload and populate an Invocation object */
@@ -309,6 +315,8 @@
 
       try
       {
+         ThreadLocalAssociation.localDomExpansion().set(Boolean.FALSE);
+
          SOAPMessageContextImpl msgContext = MessageContextAssociation.peekMessageContext();
          if (msgContext == null)
             throw new WSException("MessageContext not available");
@@ -432,6 +440,9 @@
          handleException(e);
          return null;
       }
+      finally {
+         ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+      }
    }
 
    /** On the client side, extract the OUT parameters from the payload and return them to the client. */
@@ -442,6 +453,9 @@
 
       try
       {
+
+         ThreadLocalAssociation.localDomExpansion().set(Boolean.FALSE);
+
          // R2714 For one-way operations, an INSTANCE MUST NOT return a HTTP response that contains a SOAP envelope.
          // Specifically, the HTTP response entity-body must be empty.
          if (opMetaData.isOneWayOperation() == true)
@@ -575,6 +589,9 @@
       {
          handleException(e);
       }
+      finally{
+         ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+      }
    }
 
    private AttachmentPart createAttachmentPart(ParameterMetaData paramMetaData, Object value, CIDGenerator cidGenerator) throws SOAPException, BindingException
@@ -731,14 +748,24 @@
 
          if (soapArrayName.equals(elName))
          {
-            QName compXMLName = paramMetaData.getXmlName();
-            Element compElement = DOMUtils.getFirstChildElement(aux);
-            if (compElement.getNodeName().equals(compXMLName.getLocalPart()))
+            Boolean domExpansion = ThreadLocalAssociation.localDomExpansion().get();
+            ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+            try
             {
-               soapContentElement = aux;
-               soapContentElement.setParamMetaData(paramMetaData);
-               break;
+               QName compXMLName = paramMetaData.getXmlName();
+               Element compElement = DOMUtils.getFirstChildElement(aux);
+               if (compElement.getNodeName().equals(compXMLName.getLocalPart()))
+               {
+                  soapContentElement = aux;
+                  soapContentElement.setParamMetaData(paramMetaData);
+                  break;
+               }
             }
+            finally
+            {
+               ThreadLocalAssociation.localDomExpansion().set(domExpansion);
+            }
+
          }
       }
 

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/binding/soap/SOAPMessageMarshaller.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/binding/soap/SOAPMessageMarshaller.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/binding/soap/SOAPMessageMarshaller.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -21,19 +21,19 @@
 */
 package org.jboss.ws.binding.soap;
 
-import java.io.IOException;
-import java.io.OutputStream;
+import org.jboss.logging.Logger;
+import org.jboss.remoting.InvocationRequest;
+import org.jboss.remoting.invocation.OnewayInvocation;
+import org.jboss.remoting.marshal.Marshaller;
+import org.jboss.ws.soap.SAAJElementWriter;
+import org.jboss.ws.soap.SOAPElementImpl;
 
 import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPMessage;
+import java.io.IOException;
+import java.io.OutputStream;
 
-import org.jboss.logging.Logger;
-import org.jboss.remoting.InvocationRequest;
-import org.jboss.remoting.invocation.OnewayInvocation;
-import org.jboss.remoting.marshal.Marshaller;
-import org.jboss.util.xml.DOMWriter;
-
 /**
  * @author Thomas.Diesler at jboss.org
  * @since 25-Nov-2004
@@ -71,7 +71,7 @@
          if (log.isTraceEnabled())
          {
             SOAPEnvelope soapEnv = soapMessage.getSOAPPart().getEnvelope();
-            String envStr = DOMWriter.printNode(soapEnv, true);
+            String envStr = SAAJElementWriter.printSOAPElement((SOAPElementImpl)soapEnv, true);
             log.trace("Outgoing SOAPMessage\n" + envStr);
          }
 

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/handler/HandlerChainBaseImpl.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/handler/HandlerChainBaseImpl.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/handler/HandlerChainBaseImpl.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -23,42 +23,27 @@
 
 // $Id$
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.namespace.QName;
-import javax.xml.rpc.JAXRPCException;
-import javax.xml.rpc.handler.Handler;
-import javax.xml.rpc.handler.HandlerChain;
-import javax.xml.rpc.handler.HandlerInfo;
-import javax.xml.rpc.handler.MessageContext;
-import javax.xml.rpc.handler.soap.SOAPMessageContext;
-import javax.xml.rpc.soap.SOAPFaultException;
-import javax.xml.soap.Name;
-import javax.xml.soap.SOAPEnvelope;
-import javax.xml.soap.SOAPException;
-import javax.xml.soap.SOAPHeaderElement;
-import javax.xml.soap.SOAPMessage;
-import javax.xml.soap.SOAPPart;
-
 import org.jboss.logging.Logger;
-import org.jboss.util.xml.DOMWriter;
 import org.jboss.ws.Constants;
-import org.jboss.ws.xop.XOPContext;
 import org.jboss.ws.metadata.EndpointMetaData;
 import org.jboss.ws.metadata.OperationMetaData;
 import org.jboss.ws.metadata.ParameterMetaData;
+import org.jboss.ws.soap.SAAJElementWriter;
 import org.jboss.ws.soap.SOAPEnvelopeImpl;
 import org.jboss.ws.soap.SOAPMessageContextImpl;
 import org.jboss.ws.soap.SOAPMessageImpl;
+import org.jboss.ws.xop.XOPContext;
 
+import javax.xml.namespace.QName;
+import javax.xml.rpc.JAXRPCException;
+import javax.xml.rpc.handler.Handler;
+import javax.xml.rpc.handler.HandlerChain;
+import javax.xml.rpc.handler.HandlerInfo;
+import javax.xml.rpc.handler.MessageContext;
+import javax.xml.rpc.soap.SOAPFaultException;
+import javax.xml.soap.*;
+import java.util.*;
+
 /**
  * Represents a list of handlers. All elements in the
  * HandlerChain are of the type javax.xml.rpc.handler.Handler.
@@ -372,7 +357,7 @@
       if (handlers.size() > 0)
       {
          log.debug("Enter: handleFault");
-         
+
          try
          {
             int handlerIndex = handlers.size() - 1;
@@ -404,7 +389,7 @@
       try
       {
          SOAPEnvelopeImpl soapEnv = (SOAPEnvelopeImpl)soapPart.getEnvelope();
-         String envString = DOMWriter.printNode(soapEnv, true);
+         String envString = SAAJElementWriter.printSOAPElement(soapEnv, true);
          if (envString.equals(lastMessageTrace) == false)
          {
             log.debug(envString);
@@ -473,7 +458,7 @@
       try
       {
          SOAPMessageImpl soapMessage = (SOAPMessageImpl)msgContext.getMessage();
-         
+
          // A SOAPHeaderElement is possibly bound to the endpoint operation
          // in order to check that we need a the opMetaData
          OperationMetaData opMetaData = msgContext.getOperationMetaData();
@@ -483,8 +468,8 @@
             // before the dispatch target operation can be known 
             EndpointMetaData epMetaData = msgContext.getEndpointMetaData();
             opMetaData = soapMessage.getOperationMetaData(epMetaData);
-         }         
-         
+         }
+
          SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope();
          if (soapEnvelope != null && soapEnvelope.getHeader() != null)
          {
@@ -494,10 +479,10 @@
                SOAPHeaderElement soapHeaderElement = (SOAPHeaderElement)it.next();
                Name name = soapHeaderElement.getElementName();
                QName xmlName = new QName(name.getURI(), name.getLocalName());
-               
+
                ParameterMetaData paramMetaData = (opMetaData != null ? opMetaData.getParameter(xmlName) : null);
                boolean isBoundHeader = (paramMetaData != null && paramMetaData.isInHeader());
-               
+
                if (soapHeaderElement.getMustUnderstand() && isBoundHeader == false)
                {
                   String actor = soapHeaderElement.getActor();

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArraySerializer.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArraySerializer.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArraySerializer.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -32,8 +32,11 @@
 import org.jboss.ws.jaxrpc.TypeMappingImpl;
 import org.jboss.ws.metadata.ParameterMetaData;
 import org.jboss.ws.utils.JavaUtils;
+import org.jboss.xb.binding.NamespaceRegistry;
 import org.w3c.dom.NamedNodeMap;
 
+import java.util.Iterator;
+
 /**
  * A Serializer that can handle SOAP encoded arrays.
  *
@@ -104,7 +107,15 @@
          if (JavaUtils.isPrimitive(value.getClass()))
             value = JavaUtils.getWrapperValue(value);
 
+
+         // register soapenc namespaces
+         NamespaceRegistry nsReg = serContext.getNamespaceRegistry();
+         nsReg.registerURI(Constants.URI_SOAP11_ENC, Constants.PREFIX_SOAP11_ENC);
+         nsReg.registerURI(Constants.NS_SCHEMA_XSD, Constants.PREFIX_XSD);
+         nsReg.registerURI(Constants.NS_SCHEMA_XSI, Constants.PREFIX_XSI);
+
          xmlFragment = new StringBuilder("<" + Constants.PREFIX_SOAP11_ENC + ":Array ");
+
          if (value instanceof Object[])
          {
             Object[] objArr = (Object[])value;
@@ -120,8 +131,18 @@
 
             compXmlType = serContext.getNamespaceRegistry().registerQName(compXmlType);
             String arrayType = Constants.PREFIX_SOAP11_ENC + ":arrayType='" + compXmlType.getPrefix() + ":" + compXmlType.getLocalPart() + "[" + arrayDim + "]'";
-            xmlFragment.append(arrayType + ">");
+            xmlFragment.append(arrayType);
 
+            // append namespaces
+            Iterator it = nsReg.getRegisteredPrefixes();
+            while(it.hasNext())
+            {
+               String nsPrefix = (String)it.next();
+               xmlFragment.append(" xmlns:").append(nsPrefix).append("='").append(nsReg.getNamespaceURI(nsPrefix)).append("'");
+            }
+
+            xmlFragment.append(">");
+
             serializeArrayComponents(compXmlName, compXmlType, serContext, objArr);
          }
          else
@@ -131,6 +152,7 @@
          xmlFragment.append("</" + Constants.PREFIX_SOAP11_ENC + ":Array>");
 
          log.debug("serialized: " + xmlFragment);
+
          return xmlFragment.toString();
       }
       catch (RuntimeException e)

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/server/ServiceEndpoint.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/server/ServiceEndpoint.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/server/ServiceEndpoint.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -23,31 +23,11 @@
 
 // $Id$
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.xml.namespace.QName;
-import javax.xml.rpc.JAXRPCException;
-import javax.xml.rpc.handler.HandlerInfo;
-import javax.xml.rpc.server.ServletEndpointContext;
-import javax.xml.rpc.soap.SOAPFaultException;
-import javax.xml.soap.MimeHeaders;
-import javax.xml.soap.SOAPEnvelope;
-import javax.xml.soap.SOAPMessage;
-
 import org.jboss.logging.Logger;
 import org.jboss.util.xml.DOMWriter;
 import org.jboss.ws.Constants;
 import org.jboss.ws.WSException;
+import org.jboss.ws.utils.ThreadLocalAssociation;
 import org.jboss.ws.binding.BindingException;
 import org.jboss.ws.handler.ServerHandlerChain;
 import org.jboss.ws.jaxrpc.SOAPFaultExceptionHelper;
@@ -55,14 +35,26 @@
 import org.jboss.ws.metadata.ServerEndpointMetaData;
 import org.jboss.ws.metadata.UnifiedMetaData;
 import org.jboss.ws.metadata.j2ee.UnifiedHandlerMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedHandlerMetaData.HandlerType;
 import org.jboss.ws.metadata.j2ee.UnifiedInitParamMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedHandlerMetaData.HandlerType;
-import org.jboss.ws.soap.MessageContextAssociation;
-import org.jboss.ws.soap.MessageFactoryImpl;
-import org.jboss.ws.soap.SOAPMessageContextImpl;
-import org.jboss.ws.soap.SOAPMessageImpl;
+import org.jboss.ws.soap.*;
 import org.w3c.dom.Document;
 
+import javax.xml.namespace.QName;
+import javax.xml.rpc.JAXRPCException;
+import javax.xml.rpc.handler.HandlerInfo;
+import javax.xml.rpc.server.ServletEndpointContext;
+import javax.xml.rpc.soap.SOAPFaultException;
+import javax.xml.soap.MimeHeaders;
+import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPMessage;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.net.URL;
+import java.util.*;
+
 /**
  * This object registered with the ServiceEndpointManager service.
  *
@@ -197,8 +189,19 @@
          msgFactory.setStyle(epMetaData.getStyle());
 
          MimeHeaders headers = (headerSource != null ? headerSource.getMimeHeaders() : null);
-         SOAPMessageImpl reqMessage = (SOAPMessageImpl)msgFactory.createMessage(headers, inputStream);
+         SOAPMessageImpl reqMessage = null;
 
+         try
+         {
+            // when JBossWS uses the SAAJ API we can safely disable DOM expansions
+            // assuming we do everything right ...
+            ThreadLocalAssociation.localDomExpansion().set(Boolean.FALSE);
+            reqMessage = (SOAPMessageImpl)msgFactory.createMessage(headers, inputStream);
+         }
+         finally{
+            ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+         }
+
          // Associate current message with message context
          msgContext.setMessage(reqMessage);
 
@@ -206,7 +209,7 @@
          if (msgLog.isDebugEnabled())
          {
             SOAPEnvelope soapEnv = reqMessage.getSOAPPart().getEnvelope();
-            String envStr = DOMWriter.printNode(soapEnv, true);
+            String envStr = SAAJElementWriter.printSOAPElement((SOAPElementImpl)soapEnv, true);
             msgLog.debug("Incomming SOAPMessage\n" + envStr);
          }
 
@@ -287,7 +290,7 @@
          {
             resMessage.saveChanges();
             SOAPEnvelope soapEnv = resMessage.getSOAPPart().getEnvelope();
-            String envStr = DOMWriter.printNode(soapEnv, true);
+            String envStr = SAAJElementWriter.printSOAPElement((SOAPElementImpl)soapEnv, true);
             msgLog.debug("Outgoing SOAPMessage\n" + envStr);
          }
       }

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/DOMEnvelopeBuilder.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/DOMEnvelopeBuilder.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/DOMEnvelopeBuilder.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -6,6 +6,7 @@
 import org.jboss.xb.binding.NamespaceRegistry;
 import org.jboss.ws.jaxrpc.Style;
 import org.jboss.ws.WSException;
+import org.jboss.ws.Constants;
 
 import javax.xml.soap.*;
 import javax.xml.soap.Node;
@@ -172,6 +173,23 @@
                   SOAPContentElement destElement = new SOAPContentElement(name);
                   soapBodyElement.addChildElement(destElement);
 
+                  // handle SOAPEncoding namespaces
+                  /*NamedNodeMap attribs = srcElement.getAttributes();
+                  for (int i = 0; i < attribs.getLength(); i++)
+                  {
+                     Attr attr = (Attr)attribs.item(i);
+                     if(attr.getNamespaceURI()!=null &&
+                         attr.getNamespaceURI().equals(Constants.URI_SOAP11_ENC)  &&
+                         attr.getValue().indexOf(':') != -1
+                         ) // nested soap11-enc namespaces
+                     {
+                        String nestedPrefix = attr.getValue().substring(0, attr.getValue().indexOf(':'));
+                        String nestedNS = soapBodyElement.getNamespaceURI(nestedPrefix);
+                        if(nestedNS!=null)
+                           soapBodyElement.addNamespaceDeclaration(nestedPrefix, nestedNS);
+                     }
+                  } */
+
                   String xmlFragment = DOMWriter.printNode(srcElement, false);
                   destElement.setXMLFragment(xmlFragment);
                }

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SAAJElementWriter.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SAAJElementWriter.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SAAJElementWriter.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -170,18 +170,22 @@
       // the element itself
       String endTag = element.write(out, pretty);
 
-      // and it's children
-      Iterator it = element.getChildElements();
-      while(it.hasNext())
+      // skip SOAPContentElements
+      if(! (element instanceof SOAPContentElement))
       {
-         Object child = it.next();
-         if(child instanceof SOAPElement)
+         // and it's children
+         Iterator it = element.getChildElements();
+         while(it.hasNext())
          {
-            SOAPElementImpl childElement = (SOAPElementImpl)child;
-            writeElement(childElement, out, pretty);
+            Object child = it.next();
+            if(child instanceof SOAPElement)
+            {
+               SOAPElementImpl childElement = (SOAPElementImpl)child;
+               writeElement(childElement, out, pretty);
+            }
          }
+
       }
-
       if(endTag!=null)
          out.write(endTag);
    }

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SOAPContentElement.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SOAPContentElement.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SOAPContentElement.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -33,6 +33,7 @@
 import org.jboss.ws.metadata.ParameterMetaData;
 import org.jboss.ws.utils.JavaUtils;
 import org.jboss.ws.utils.MimeUtils;
+import org.jboss.ws.utils.ThreadLocalAssociation;
 import org.w3c.dom.*;
 
 import javax.xml.namespace.QName;
@@ -138,12 +139,16 @@
          TypeMappingImpl typeMapping = serContext.getTypeMapping();
 
          QName xmlName = getQName();
+
+         Boolean domExpansionState = ThreadLocalAssociation.localDomExpansion().get();
+
          try
          {
+            ThreadLocalAssociation.localDomExpansion().set(Boolean.FALSE);
+
             SerializerSupport ser;
             if (objectValue != null)
-            {
-               // [hb] let the SimpleSerialzer handle xop serialisation
+            {              
                SerializerFactoryBase serializerFactory = getSerializerFactory(typeMapping, javaType, xmlType);
                ser = (SerializerSupport)serializerFactory.getSerializer();
             }
@@ -154,8 +159,7 @@
                   addNamespaceDeclaration(Constants.PREFIX_XSI, Constants.NS_SCHEMA_XSI);
             }
 
-            NamedNodeMap attributes = getAttributes();
-            xmlFragment = ser.serialize(xmlName, xmlType, objectValue, serContext, attributes);
+            xmlFragment = ser.serialize(xmlName, xmlType, objectValue, serContext, null);
 
             // Add the arrayType namespace declaration
             QName compXmlType = paramMetaData.getSOAPArrayCompType();
@@ -172,6 +176,9 @@
          {
             throw new JAXRPCException(e);
          }
+         finally {
+            ThreadLocalAssociation.localDomExpansion().set(domExpansionState);
+         }
       }
 
       // Generate the xmlFragment from the DOM tree
@@ -179,6 +186,7 @@
       {
          log.debug("getXMLFragment from DOM");
          xmlFragment = DOMWriter.printNode(this, false);
+         // TODO: shouldnt the DOM state be invalidated here?
          log.debug("xmlFragment: " + xmlFragment);
       }
 
@@ -228,7 +236,8 @@
             DeserializerFactoryBase deserializerFactory = getDeserializerFactory(typeMapping, javaType, xmlType);
             DeserializerSupport des = (DeserializerSupport)deserializerFactory.getDeserializer();
 
-            String strContent = insertNamespaceDeclarations(getXMLFragment());
+            //String strContent = insertNamespaceDeclarations(getXMLFragment());
+            String strContent = getXMLFragment();
 
             Object obj = des.deserialize(getQName(), xmlType, strContent, serContext);
             if (obj != null)
@@ -802,10 +811,17 @@
     */
    private void expandToDOM()
    {
+      // If JBossWS itself uses the SAAJ API, we can safely disable
+      // DOM expansion, assuming it does everything right.
+      // SOAPContentElements should only be expanded when jaxxrpc handlers do require it.
+      boolean domExpansionEnabled = ThreadLocalAssociation.localDomExpansion().get().booleanValue();
 
-      log.debug("*** Expand to DOM called ***", new RuntimeException("Show Callee"));
+      if(!domExpansionEnabled)
+         log.debug("*** DOMExpansion disabled ***");
+      else
+         log.debug("*** Expand to DOM called ***", new RuntimeException("Show Callee"));
 
-      if (isDOMValid == false && expandingToDOM == false)
+      if (isDOMValid == false && expandingToDOM == false && domExpansionEnabled)
       {
          log.trace("BEGIN: expandToDOM");
          expandingToDOM = true;

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SOAPElementImpl.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SOAPElementImpl.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SOAPElementImpl.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -674,5 +674,5 @@
       */
 
       return null;
-   }   
+   }
 }

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SOAPEnvelopeImpl.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SOAPEnvelopeImpl.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/SOAPEnvelopeImpl.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -192,7 +192,16 @@
    {
       return soapPart;
    }
+  
+   /*public String getNamespaceURI(String prefix)
+   {
+      String nsURI = getAttribute("xmlns:" + prefix);
+      if (nsURI.length() == 0 && namespaceRegistry != null)
+         return namespaceRegistry.getNamespaceURI(prefix);
 
+      return (nsURI.length() > 0 ? nsURI : null);
+   }*/
+
    public String write(Writer writer, boolean pretty) {
       try
       {

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedSwAEncoder.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedSwAEncoder.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedSwAEncoder.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -21,7 +21,9 @@
  */
 package org.jboss.ws.soap.attachment;
 
-import java.io.OutputStream;
+import org.jboss.ws.soap.SAAJElementWriter;
+import org.jboss.ws.soap.SOAPElementImpl;
+import org.jboss.ws.soap.SOAPMessageImpl;
 
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeBodyPart;
@@ -29,10 +31,8 @@
 import javax.mail.internet.ParameterList;
 import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPException;
+import java.io.OutputStream;
 
-import org.jboss.util.xml.DOMWriter;
-import org.jboss.ws.soap.SOAPMessageImpl;
-
 /**
  * MultipartRelatedEncoder encodes a SOAPMessage
  * into a multipart/related stream.
@@ -69,7 +69,7 @@
        * stream.
        */
       SOAPEnvelope soapEnv = soapMessage.getSOAPPart().getEnvelope();
-      String envStr = DOMWriter.printNode(soapEnv, true);
+      String envStr = SAAJElementWriter.printSOAPElement((SOAPElementImpl)soapEnv, true);
       rootPart.setText(envStr, "UTF-8");
 
       rootPart.setContentID(MimeConstants.ROOTPART_CID);

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedXOPEncoder.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedXOPEncoder.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedXOPEncoder.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -21,7 +21,9 @@
  */
 package org.jboss.ws.soap.attachment;
 
-import java.io.OutputStream;
+import org.jboss.ws.soap.SAAJElementWriter;
+import org.jboss.ws.soap.SOAPElementImpl;
+import org.jboss.ws.soap.SOAPMessageImpl;
 
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeBodyPart;
@@ -29,10 +31,8 @@
 import javax.mail.internet.ParameterList;
 import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPException;
+import java.io.OutputStream;
 
-import org.jboss.util.xml.DOMWriter;
-import org.jboss.ws.soap.SOAPMessageImpl;
-
 /**
  * <code>MultipartRelatedEncoder</code> encodes a <code>SOAPMessage</code>
  * into a multipart/related stream.
@@ -60,7 +60,7 @@
       p.set("type", MimeConstants.TYPE_APPLICATION_XOP_XML);
       p.set("start", MimeConstants.ROOTPART_CID);
       p.set("start-info", MimeConstants.START_INFO_XOP);
-      
+
       MimeMultipart multipart = new MimeMultipart("related" + p);
       MimeBodyPart rootPart = new MimeBodyPart();
 
@@ -71,11 +71,11 @@
        * stream.
        */
       SOAPEnvelope soapEnv = soapMessage.getSOAPPart().getEnvelope();
-      String envStr = DOMWriter.printNode(soapEnv, true);
+      String envStr = SAAJElementWriter.printSOAPElement((SOAPElementImpl)soapEnv, true);
       rootPart.setText(envStr, "UTF-8");
 
       rootPart.setContentID(MimeConstants.ROOTPART_CID);
-      rootPart.setHeader(MimeConstants.CONTENT_TYPE, MimeConstants.TYPE_APPLICATION_XOP_XML + "; type=\"text/xml\""); 
+      rootPart.setHeader(MimeConstants.CONTENT_TYPE, MimeConstants.TYPE_APPLICATION_XOP_XML + "; type=\"text/xml\"");
       rootPart.setHeader(MimeConstants.CONTENT_TRANSFER_ENCODING, MimeConstants.TEXT_8BIT_ENCODING);
 
       multipart.addBodyPart(rootPart);

Modified: branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/utils/ThreadLocalAssociation.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/utils/ThreadLocalAssociation.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/main/java/org/jboss/ws/utils/ThreadLocalAssociation.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -39,6 +39,14 @@
          return Boolean.FALSE;
       }
    };
+
+   private static ThreadLocal<Boolean> DOMExpansionAssoc = new ThreadLocal<Boolean>()
+   {
+      protected Boolean initialValue() {
+         return Boolean.FALSE;
+      }
+   };
+
    public static ThreadLocal localInvokerMDBAssoc() {
       return invokerMDBAssoc;
    }
@@ -55,10 +63,17 @@
    {
       return XOPInlineAssoc;
    }
+
+   public static ThreadLocal<Boolean> localDomExpansion()
+   {
+      return DOMExpansionAssoc;
+   }
+
    public static void clear() {
       invokerMDBAssoc.set(null);
       msgContextAssoc.set(null);
       strTransformAssoc.set(null);
-      XOPInlineAssoc.set(null);
+      XOPInlineAssoc.set(Boolean.FALSE);
+      DOMExpansionAssoc.set(Boolean.FALSE);
    }
 }

Modified: branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/encoded/marshalltest/MarshallTestCase.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/encoded/marshalltest/MarshallTestCase.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/encoded/marshalltest/MarshallTestCase.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -31,6 +31,7 @@
 
 import javax.naming.InitialContext;
 import javax.xml.rpc.Service;
+import javax.xml.rpc.Stub;
 
 import junit.framework.Test;
 
@@ -60,7 +61,7 @@
          InitialContext iniCtx = getInitialContext();
          Service service = (Service)iniCtx.lookup("java:comp/env/service/TestService");
          port = (MarshallTest)service.getPort(MarshallTest.class);
-      }
+      }      
    }
 
    public void testBigDecimalArrayTest() throws Exception
@@ -525,4 +526,5 @@
       Short retObj = port.wrapperShortTest(inObj);
       assertEquals(inObj, retObj);
    }
+
 }

Modified: branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/samples/dynamichandler/DynamicHandlerTestCase.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/samples/dynamichandler/DynamicHandlerTestCase.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/samples/dynamichandler/DynamicHandlerTestCase.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -69,7 +69,7 @@
          endpoint = (HandlerTestService)service.getPort(HandlerTestService.class);
       }
 
-      //((Stub)endpoint)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8081/jbossws-samples-dynamichandler");
+      ((Stub)endpoint)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8081/jbossws-samples-dynamichandler");
    }
 
    public void testStaticHandlers() throws Exception

Modified: branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/soap/SOAPContentElementTestCase.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/soap/SOAPContentElementTestCase.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/soap/SOAPContentElementTestCase.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -35,6 +35,7 @@
 import org.jboss.test.ws.JBossWSTest;
 import org.jboss.ws.soap.NameImpl;
 import org.jboss.ws.soap.SOAPContentElement;
+import org.jboss.ws.utils.ThreadLocalAssociation;
 
 /**
  * Test the SOAPContentElement
@@ -44,20 +45,24 @@
  */
 public class SOAPContentElementTestCase extends JBossWSTest
 {
+   protected void setUp() throws Exception {
+      ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+   }
+
    /** Test that we can lazily create the SOAP tree
     */
    public void testChildNodeAccess() throws Exception
    {
       Name name = new NameImpl("Order", "tns", "http://someURI");
 
-      String xmlFragment = 
-      "<tns:Order xmlns:tns='http://someURI'>" + 
-       "<OrderItem>Ferarri</OrderItem>" + 
-       "<OrderItem>Lamborgini</OrderItem>" + 
-       "<OrderItem>JBoss Support</OrderItem>" + 
-       "<Customer>" + 
-        "<Name>Thomas</Name>" + 
-       "</Customer>" + 
+      String xmlFragment =
+      "<tns:Order xmlns:tns='http://someURI'>" +
+       "<OrderItem>Ferarri</OrderItem>" +
+       "<OrderItem>Lamborgini</OrderItem>" +
+       "<OrderItem>JBoss Support</OrderItem>" +
+       "<Customer>" +
+        "<Name>Thomas</Name>" +
+       "</Customer>" +
       "</tns:Order>";
 
       SOAPContentElement soapEl = new SOAPContentElement(name);
@@ -162,9 +167,9 @@
          "<ns1:hello xmlns:ns1='http://handlerservice1.org/wsdl'>" +
          "<String_1>world</String_1>" +
          "</ns1:hello>" +
-         "</env:Body>" + 
+         "</env:Body>" +
          "</env:Envelope>";
-      
+
       MessageFactory factory = MessageFactory.newInstance();
       SOAPMessage soapMessage = factory.createMessage(null, new ByteArrayInputStream(envStr.getBytes()));
       SOAPBody soapBody = soapMessage.getSOAPBody();
@@ -181,7 +186,7 @@
 
       ByteArrayOutputStream baos = new ByteArrayOutputStream();
       soapMessage.writeTo(baos);
-      
+
       String expEnv = "<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'><env:Header/><env:Body><ns1:hello xmlns:ns1='http://handlerservice1.org/wsdl'><String_1>world::SOAP header was added</String_1></ns1:hello></env:Body></env:Envelope>";
       assertEquals(expEnv, baos.toString());
    }

Modified: branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/soap/SOAPHeaderElementTestCase.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/soap/SOAPHeaderElementTestCase.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/soap/SOAPHeaderElementTestCase.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -25,6 +25,7 @@
 import org.jboss.util.xml.DOMWriter;
 import org.jboss.ws.soap.MessageFactoryImpl;
 import org.jboss.ws.soap.NameImpl;
+import org.jboss.ws.utils.ThreadLocalAssociation;
 
 import javax.xml.soap.MessageFactory;
 import javax.xml.soap.Name;
@@ -43,6 +44,10 @@
 public class SOAPHeaderElementTestCase extends JBossWSTest
 {
 
+   protected void setUp() throws Exception {
+      ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+   }
+
    /** Test access to the actor attribute
     */
    public void testAttributeActor() throws Exception

Modified: branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/soap/SOAPHeaderTestCase.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/soap/SOAPHeaderTestCase.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/soap/SOAPHeaderTestCase.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -35,6 +35,7 @@
 import org.jboss.test.ws.JBossWSTest;
 import org.jboss.util.xml.DOMUtils;
 import org.jboss.ws.Constants;
+import org.jboss.ws.utils.ThreadLocalAssociation;
 import org.jboss.ws.soap.MessageFactoryImpl;
 import org.jboss.ws.soap.NameImpl;
 
@@ -46,7 +47,10 @@
  */
 public class SOAPHeaderTestCase extends JBossWSTest
 {
-
+   protected void setUp() throws Exception {
+      ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+   }
+   
    public void testAddHeaderElement() throws Exception
    {
       MessageFactory factory = new MessageFactoryImpl();

Modified: branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/wsse/MicrosoftInteropTestCase.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/wsse/MicrosoftInteropTestCase.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/wsse/MicrosoftInteropTestCase.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -38,6 +38,7 @@
 import org.jboss.ws.wsse.SecurityDecoder;
 import org.jboss.ws.wsse.SecurityStore;
 import org.jboss.ws.wsse.Util;
+import org.jboss.ws.utils.ThreadLocalAssociation;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -49,6 +50,10 @@
  */
 public class MicrosoftInteropTestCase extends JBossWSTest
 {
+   protected void setUp() throws Exception {
+      ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+   }
+   
    /** Test that we can build an envelope from InputStream */
    public void testMicrosoftRequest() throws Exception
    {

Modified: branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/wsse/RoundTripTestCase.java
===================================================================
--- branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/wsse/RoundTripTestCase.java	2006-08-08 09:30:27 UTC (rev 706)
+++ branches/jbossws-1.0_Heiko/src/test/java/org/jboss/test/ws/wsse/RoundTripTestCase.java	2006-08-08 16:29:01 UTC (rev 707)
@@ -51,6 +51,7 @@
 import org.jboss.ws.wsse.TimestampOperation;
 import org.jboss.ws.wsse.Util;
 import org.jboss.ws.wsse.WsuIdTarget;
+import org.jboss.ws.utils.ThreadLocalAssociation;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -62,6 +63,10 @@
  */
 public class RoundTripTestCase extends JBossWSTest
 {
+   protected void setUp() throws Exception {
+      ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+   }
+   
    /** Test that we can build an envelope from InputStream */
    public void testRoundTrip() throws Exception
    {




More information about the jboss-svn-commits mailing list