[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