[jboss-svn-commits] JBossWS SVN: r753 - in branches/jbossws-1.0/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/jaxb main/java/org/jboss/ws/jaxrpc 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 main/java/org/jboss/ws/xop test/java/org/jboss/test/ws/addressing test/java/org/jboss/test/ws/encoded/marshalltest test/java/org/jboss/test/ws/jbws801 test/java/org/jboss/test/ws/jsr181/webservice test/java/org/jboss/test/ws/samples/dynamichandler test/java/org/jboss/test/ws/samples/jsr181ejb test/java/org/jboss/test/ws/samples/mtom test/java/org/jboss/test/ws/soap test/java/org/jboss/test/ws/wsse test/java/org/jboss/test/ws/xop/doclit test/resources/samples-override/mtom/WEB-INF test/resources/samples-override/mtom/WEB-INF/wsdl test/resources/xop/doclit/WEB-INF test/resources/xop/doclit/WEB-IN! F/wsdl
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Aug 16 06:23:46 EDT 2006
Author: heiko.braun at jboss.com
Date: 2006-08-16 06:23:13 -0400 (Wed, 16 Aug 2006)
New Revision: 753
Modified:
branches/jbossws-1.0/src/main/java/org/jboss/ws/addressing/soap/SOAPAddressingPropertiesImpl.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/binding/soap/SOAPBindingProvider.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/binding/soap/SOAPMessageMarshaller.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/handler/HandlerChainBaseImpl.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxb/SchemaBindingBuilder.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/StubExt.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArraySerializer.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/server/ServiceEndpoint.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/DOMEnvelopeBuilder.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyElementDoc.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyElementMessage.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyElementRpc.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyImpl.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPConnectionImpl.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPContentElement.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPElementImpl.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPEnvelopeImpl.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPFactoryImpl.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPHeaderImpl.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPMessageImpl.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/attachment/ByteArrayContentHandler.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedSwAEncoder.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedXOPEncoder.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/IOUtils.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/JavaUtils.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/MimeUtils.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/ThreadLocalAssociation.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/xop/XOPContext.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/xop/XOPMarshallerImpl.java
branches/jbossws-1.0/src/main/java/org/jboss/ws/xop/XOPUnmarshallerImpl.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/addressing/SOAPAddressingPropertiesTestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/encoded/marshalltest/MarshallTestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jbws801/JBWS801TestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jsr181/webservice/JSR181WebServiceEJB3TestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/dynamichandler/DynamicHandlerTestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/jsr181ejb/JSR181WebServiceEJB3TestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/mtom/XOPRpcTestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/mtom/XOPTest.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/mtom/XOPTestImpl.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/soap/SOAPContentElementTestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/soap/SOAPHeaderElementTestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/soap/SOAPHeaderTestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/wsse/MicrosoftInteropTestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/wsse/RoundTripTestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/wsse/SimpleSignEncryptTestCase.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/InlineHandler.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/PingMsg.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/PingMsgResponse.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/TestServiceImpl.java
branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/XOPElementDoclitTestCase.java
branches/jbossws-1.0/src/test/resources/samples-override/mtom/WEB-INF/jaxrpc-mapping.xml
branches/jbossws-1.0/src/test/resources/samples-override/mtom/WEB-INF/wsdl/TestService.wsdl
branches/jbossws-1.0/src/test/resources/xop/doclit/WEB-INF/jaxrpc-mapping.xml
branches/jbossws-1.0/src/test/resources/xop/doclit/WEB-INF/wsdl/TestService.wsdl
Log:
Removed DOM API calls, support XOP Inline
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/addressing/soap/SOAPAddressingPropertiesImpl.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/addressing/soap/SOAPAddressingPropertiesImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/addressing/soap/SOAPAddressingPropertiesImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -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,10 @@
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 +186,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/src/main/java/org/jboss/ws/binding/soap/SOAPBindingProvider.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/binding/soap/SOAPBindingProvider.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/binding/soap/SOAPBindingProvider.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -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,8 @@
try
{
+ // disable DOMExpansion
+ ThreadLocalAssociation.localDomExpansion().set(Boolean.FALSE);
SOAPMessageContextImpl msgContext = MessageContextAssociation.peekMessageContext();
if (msgContext == null)
throw new WSException("MessageContext not available");
@@ -87,7 +89,8 @@
SOAPMessageImpl reqMessage = (SOAPMessageImpl)createMessage(opMetaData);
msgContext.setMessage(reqMessage);
- SOAPEnvelope soapEnvelope = reqMessage.getSOAPPart().getEnvelope();
+ SOAPEnvelopeImpl soapEnvelope = (SOAPEnvelopeImpl)reqMessage.getSOAPPart().getEnvelope();
+ soapEnvelope.setDomExpansionEnabled(false);
SOAPBody soapBody = soapEnvelope.getBody();
SOAPHeader soapHeader = soapEnvelope.getHeader();
@@ -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,7 @@
try
{
+ ThreadLocalAssociation.localDomExpansion().set(Boolean.FALSE);
SOAPMessageContextImpl msgContext = MessageContextAssociation.peekMessageContext();
if (msgContext == null)
throw new WSException("MessageContext not available");
@@ -432,6 +439,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 +452,7 @@
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 +586,9 @@
{
handleException(e);
}
+ finally{
+ ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+ }
}
private AttachmentPart createAttachmentPart(ParameterMetaData paramMetaData, Object value, CIDGenerator cidGenerator) throws SOAPException, BindingException
@@ -731,14 +745,23 @@
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/src/main/java/org/jboss/ws/binding/soap/SOAPMessageMarshaller.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/binding/soap/SOAPMessageMarshaller.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/binding/soap/SOAPMessageMarshaller.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -21,19 +21,19 @@
*/
package org.jboss.ws.binding.soap;
-import java.io.IOException;
-import java.io.OutputStream;
-import javax.xml.soap.SOAPEnvelope;
-import javax.xml.soap.SOAPException;
-import javax.xml.soap.SOAPMessage;
-
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;
+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;
/**
* @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/src/main/java/org/jboss/ws/handler/HandlerChainBaseImpl.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/handler/HandlerChainBaseImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/handler/HandlerChainBaseImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -23,15 +23,16 @@
// $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 org.jboss.logging.Logger;
+import org.jboss.ws.Constants;
+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;
@@ -39,25 +40,10 @@
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 javax.xml.soap.*;
+import java.util.*;
-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.SOAPEnvelopeImpl;
-import org.jboss.ws.soap.SOAPMessageContextImpl;
-import org.jboss.ws.soap.SOAPMessageImpl;
/**
* Represents a list of handlers. All elements in the
@@ -256,9 +242,7 @@
currHandler = ((HandlerEntry)handlers.get(handlerIndex)).getHandler();
log.debug("Handle request: " + currHandler);
- XOPContext.setInlineBase64();
doNext = currHandler.handleRequest(msgContext);
- XOPContext.unsetInlineBase64();
if (log.isTraceEnabled())
{
@@ -324,9 +308,7 @@
currHandler = ((HandlerEntry)handlers.get(handlerIndex)).getHandler();
log.debug("Handle response: " + currHandler);
- XOPContext.setInlineBase64();
doNext = currHandler.handleResponse(msgContext);
- XOPContext.unsetInlineBase64();
if (log.isTraceEnabled())
{
@@ -404,7 +386,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);
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxb/SchemaBindingBuilder.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxb/SchemaBindingBuilder.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxb/SchemaBindingBuilder.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -35,14 +35,15 @@
import org.apache.xerces.xs.XSModel;
import org.jboss.logging.Logger;
import org.jboss.util.xml.JBossEntityResolver;
-import org.jboss.ws.Constants;
-import org.jboss.ws.WSException;
import org.jboss.ws.metadata.jaxrpcmapping.ExceptionMapping;
import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
import org.jboss.ws.metadata.jaxrpcmapping.JavaXmlTypeMapping;
import org.jboss.ws.metadata.jaxrpcmapping.PackageMapping;
import org.jboss.ws.metadata.jaxrpcmapping.VariableMapping;
+import org.jboss.ws.Constants;
+import org.jboss.ws.WSException;
import org.jboss.ws.utils.JBossWSEntityResolver;
+import org.jboss.ws.xop.XOPValueAdapter;
import org.jboss.xb.binding.metadata.ClassMetaData;
import org.jboss.xb.binding.metadata.PackageMetaData;
import org.jboss.xb.binding.metadata.PropertyMetaData;
@@ -311,6 +312,20 @@
if (log.isTraceEnabled())
log.trace("Bound element " + xmlName + " to property " + prop.getName());
}
+ // XOP elements that derive from xmlmime namespace
+ // need to be declared 'simple' in order for XB to
+ // treat them as simple base64Binaries.
+ QName elementType = element.getType().getQName();
+ if(elementType!=null)
+ {
+ String elementTypeNS = elementType.getNamespaceURI() != null ? elementType.getNamespaceURI() : "";
+ String elementTypeName = elementType.getLocalPart() != null ? elementType.getLocalPart() : "";
+ if(elementTypeNS.equals(Constants.NS_XML_MIME) && elementTypeName.equals("base64Binary"))
+ {
+ element.getType().setSimple(true);
+ element.getType().setValueAdapter(new XOPValueAdapter());
+ }
+ }
}
private void processWildcard(TypeBinding typeBinding, VariableMapping varMapping)
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/StubExt.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/StubExt.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/StubExt.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -56,6 +56,8 @@
static final String PROPERTY_AUTH_TYPE_BASIC = "org.jboss.ws.authType.basic";
/** Authentication type, WSEE */
static final String PROPERTY_AUTH_TYPE_WSSE = "org.jboss.ws.authType.wsse";
+ /** MTOM enabled? */
+ static final String PROPERTY_MTOM_ENABLED= "org.jboss.ws.mtom.enabled";
// if you add a property here, make sure its registered in CallProxy
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArraySerializer.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArraySerializer.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArraySerializer.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -32,7 +32,9 @@
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,6 +106,11 @@
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[])
{
@@ -120,8 +127,17 @@
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
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/server/ServiceEndpoint.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/server/ServiceEndpoint.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/server/ServiceEndpoint.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -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,25 @@
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 +188,17 @@
msgFactory.setStyle(epMetaData.getStyle());
MimeHeaders headers = (headerSource != null ? headerSource.getMimeHeaders() : null);
- SOAPMessageImpl reqMessage = (SOAPMessageImpl)msgFactory.createMessage(headers, inputStream);
+ SOAPMessageImpl reqMessage = null;
+ try
+ {
+ 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 +206,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 +287,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/src/main/java/org/jboss/ws/soap/DOMEnvelopeBuilder.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/DOMEnvelopeBuilder.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/DOMEnvelopeBuilder.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -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;
@@ -77,13 +78,14 @@
while (it.hasNext())
{
Element srcElement = (Element)it.next();
+ //registerLocalNamespace(srcElement);
String xmlFragment = DOMWriter.printNode(srcElement, false);
Name name = new NameImpl(srcElement.getLocalName(), srcElement.getPrefix(), srcElement.getNamespaceURI());
SOAPContentElement destElement = new SOAPHeaderElementImpl(name);
soapHeader.addChildElement(destElement);
- DOMUtils.copyAttributes(destElement, srcElement);
+ //DOMUtils.copyAttributes(destElement, srcElement);
destElement.setXMLFragment(xmlFragment);
}
}
@@ -164,10 +166,27 @@
while (itBodyElement.hasNext())
{
Element srcElement = (Element)itBodyElement.next();
+ registerLocalNamespace(srcElement);
Name name = new NameImpl(srcElement.getLocalName(), srcElement.getPrefix(), srcElement.getNamespaceURI());
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);
@@ -225,6 +244,16 @@
return soapEnv;
}
+ private void registerLocalNamespace(Element srcElement) {
+ if(srcElement.getPrefix()== null)
+ {
+ srcElement.setAttribute("xmlns", srcElement.getNamespaceURI());
+ }
+ else
+ {
+ srcElement.setAttribute("xmlns:"+srcElement.getPrefix(), srcElement.getNamespaceURI());
+ }
+ }
private void registerNamespaces(NamespaceRegistry namespaceRegistry, SOAPElement soapEl)
{
Iterator itNSPrefixes = soapEl.getNamespacePrefixes();
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyElementDoc.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyElementDoc.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyElementDoc.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -23,6 +23,7 @@
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBodyElement;
+import java.io.Writer;
/**
* An abstract implemenation of the SOAPBodyElement
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyElementMessage.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyElementMessage.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyElementMessage.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -21,8 +21,10 @@
*/
package org.jboss.ws.soap;
+import org.jboss.util.xml.DOMWriter;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBodyElement;
+import java.io.Writer;
/**
* An abstract implemenation of the SOAPBodyElement
@@ -43,4 +45,11 @@
{
super(element);
}
+ public String write(Writer writer, boolean pretty) {
+ DOMWriter domWriter = new DOMWriter(writer);
+ domWriter.setPrettyprint(pretty);
+ domWriter.print(this);
+
+ return null;
+ }
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyElementRpc.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyElementRpc.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyElementRpc.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -21,8 +21,14 @@
*/
package org.jboss.ws.soap;
+import org.jboss.util.xml.DOMWriter;
+import org.jboss.ws.WSException;
+import org.w3c.dom.Element;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBodyElement;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Iterator;
/**
* An abstract implemenation of the SOAPBodyElement
@@ -43,4 +49,58 @@
{
super(element);
}
+ public String write(Writer writer, boolean pretty) {
+ try
+ {
+
+ writer.write('<');
+ String prefix = getPrefix()!=null ? getPrefix():"";
+ String fqn = prefix.length()>0 ? prefix+":"+getLocalName() : getLocalName();
+ writer.write(fqn);
+
+ // namespaces
+ Iterator it = getNamespacePrefixes();
+ while(it.hasNext())
+ {
+ String nsPrefix = (String)it.next();
+ writer.write(" xmlns:"+nsPrefix+"='"+getNamespaceURI(nsPrefix)+"'");
+ }
+
+ // attributes
+ Iterator attNames = getAllAttributes();
+ while(attNames.hasNext())
+ {
+ NameImpl name = (NameImpl)attNames.next();
+ String attPrefix = name.getPrefix()!=null ? name.getPrefix():"";
+ String attFqn = attPrefix.length()>0 ? attPrefix+":"+name.getLocalName() : name.getLocalName();
+ writer.write(" "+attFqn);
+ writer.write("='"+getAttributeValue(name)+"'");
+ }
+
+ writer.write('>');
+
+ // children
+ Iterator children = getChildElements();
+ while(children.hasNext())
+ {
+ Object child = children.next();
+ if( (child instanceof SOAPContentElement) == false)
+ {
+ DOMWriter domWriter = new DOMWriter(writer);
+ domWriter.setPrettyprint(pretty);
+ domWriter.print((Element)child);
+ }
+ }
+
+ if(pretty)
+ writer.write("\n");
+
+ return("</"+fqn+">");
+
+ }
+ catch (IOException e)
+ {
+ throw new WSException(e.getMessage());
+ }
+ }
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyImpl.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPBodyImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -25,6 +25,8 @@
import java.util.Iterator;
import java.util.Locale;
+import java.io.Writer;
+import java.io.IOException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBody;
@@ -35,6 +37,7 @@
import org.jboss.logging.Logger;
import org.jboss.ws.Constants;
+import org.jboss.ws.WSException;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
@@ -164,4 +167,41 @@
element.detachNode();
return new SOAPBodyElementDoc(element);
}
+ public String write(Writer writer, boolean pretty) {
+ try
+ {
+ writer.write("<");
+ writer.write(getParentElement().getPrefix()+":Body");
+
+ // namespaces
+ Iterator nsPrefixes = getNamespacePrefixes();
+ while(nsPrefixes.hasNext())
+ {
+ String prefix = (String)nsPrefixes.next();
+ writer.write(" xmlns:"+prefix+"='"+getNamespaceURI(prefix)+"'");
+ }
+
+ // attributes
+ Iterator attNames = getAllAttributes();
+ while(attNames.hasNext())
+ {
+ NameImpl name = (NameImpl)attNames.next();
+ String attPrefix = name.getPrefix()!=null ? name.getPrefix():"";
+ String attFqn = attPrefix.length()>0 ? attPrefix+":"+name.getLocalName() : name.getLocalName();
+ writer.write(" "+attFqn);
+ writer.write("='"+getAttributeValue(name)+"'");
+ }
+
+ writer.write(">");
+
+ if(pretty)
+ writer.write("\n");
+
+ return ("</"+getParentElement().getPrefix()+":Body>");
+ }
+ catch (IOException e)
+ {
+ throw new WSException(e.getMessage());
+ }
+ }
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPConnectionImpl.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPConnectionImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPConnectionImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -42,7 +42,6 @@
import org.jboss.remoting.Client;
import org.jboss.remoting.InvokerLocator;
import org.jboss.remoting.util.socket.RemotingSSLSocketFactory;
-import org.jboss.util.xml.DOMWriter;
import org.jboss.ws.binding.soap.SOAPMessageMarshaller;
import org.jboss.ws.binding.soap.SOAPMessageUnMarshaller;
import org.jboss.ws.jaxrpc.StubExt;
@@ -171,7 +170,7 @@
if(msgLog.isDebugEnabled())
{
SOAPEnvelope soapReqEnv = reqMessage.getSOAPPart().getEnvelope();
- String envStr = DOMWriter.printNode(soapReqEnv, true);
+ String envStr = SAAJElementWriter.printSOAPElement((SOAPElementImpl)soapReqEnv, true);
msgLog.debug("Remoting meta data: " + metadata);
msgLog.debug("Outgoing SOAPMessage\n" + envStr);
}
@@ -190,7 +189,7 @@
if (resMessage != null && msgLog.isDebugEnabled())
{
SOAPEnvelope soapResEnv = resMessage.getSOAPPart().getEnvelope();
- String envStr = DOMWriter.printNode(soapResEnv, true);
+ String envStr = SAAJElementWriter.printSOAPElement((SOAPElementImpl)soapResEnv, true);
msgLog.debug("Incomming Response SOAPMessage\n" + envStr);
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPContentElement.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPContentElement.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPContentElement.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -26,26 +26,26 @@
import org.jboss.util.xml.DOMWriter;
import org.jboss.ws.Constants;
import org.jboss.ws.WSException;
-import org.jboss.ws.xop.XOPUnmarshallerImpl;
import org.jboss.ws.binding.BindingException;
import org.jboss.ws.jaxrpc.TypeMappingImpl;
import org.jboss.ws.jaxrpc.encoding.*;
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.jboss.ws.xop.XOPContext;
import org.w3c.dom.*;
+import javax.activation.DataHandler;
import javax.xml.namespace.QName;
import javax.xml.rpc.JAXRPCException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
-import javax.activation.DataHandler;
+import java.io.IOException;
+import java.io.Writer;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.util.Iterator;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
/**
* A SOAPElement that gives access to its content as XML fragment or Java object.
@@ -137,8 +137,10 @@
TypeMappingImpl typeMapping = serContext.getTypeMapping();
QName xmlName = getQName();
+ Boolean domExpansionState = ThreadLocalAssociation.localDomExpansion().get();
try
{
+ ThreadLocalAssociation.localDomExpansion().set(Boolean.FALSE);
SerializerSupport ser;
if (objectValue != null)
{
@@ -153,8 +155,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, getObjectValue(), serContext, null);
// Add the arrayType namespace declaration
QName compXmlType = paramMetaData.getSOAPArrayCompType();
@@ -171,6 +172,9 @@
{
throw new JAXRPCException(e);
}
+ finally {
+ ThreadLocalAssociation.localDomExpansion().set(domExpansionState);
+ }
}
// Generate the xmlFragment from the DOM tree
@@ -227,7 +231,7 @@
DeserializerFactoryBase deserializerFactory = getDeserializerFactory(typeMapping, javaType, xmlType);
DeserializerSupport des = (DeserializerSupport)deserializerFactory.getDeserializer();
- String strContent = insertNamespaceDeclarations(getXMLFragment());
+ String strContent = getXMLFragment();
Object obj = des.deserialize(getQName(), xmlType, strContent, serContext);
if (obj != null)
@@ -267,19 +271,17 @@
if (isAssignable == false)
{
- // MSFT hack: Force conversion according to the target java parameter
Object convertedObj = null;
+
if(obj instanceof DataHandler)
{
- MimeUtils utils = new MimeUtils();
- MimeUtils.ByteArrayConverter converter = utils.getConverterFor(javaType);
try
{
- convertedObj = converter.convert( ((DataHandler)obj).getInputStream() );
+ convertedObj = ((DataHandler)obj).getContent();
}
catch (IOException e)
{
- log.warn("Failed to convert from DataHandler", e);
+ throw new WSException("Failed to convert unassignable endpoint parameter", e);
}
}
@@ -801,7 +803,11 @@
*/
private void expandToDOM()
{
- if (isDOMValid == false && expandingToDOM == false)
+ // 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();
+ if (isDOMValid == false && expandingToDOM == false && domExpansionEnabled)
{
log.trace("BEGIN: expandToDOM");
expandingToDOM = true;
@@ -841,6 +847,8 @@
{
SOAPElementImpl soapElement = soapFactory.createElement((Element)child, true);
super.addChildElement(soapElement);
+ if(isXOPParameter())
+ XOPContext.inlineXOPData(soapElement);
}
else if (childType == Node.TEXT_NODE)
{
@@ -877,7 +885,8 @@
log.trace("END: expandToDOM");
}
- // FIXME JBWS-482, This is a workaround
+ // Either the dom-valid state, or the xml-valid state can be true
+ // Therefore we invalidate the xml content.
invalidateXMLContent();
}
}
@@ -954,4 +963,70 @@
invalidateXMLContent();
}
}
+ public String write(Writer writer, boolean pretty) {
+ try
+ {
+ handleMTOMTransitions();
+
+ if(isDOMValid)
+ {
+ DOMWriter dw = new DOMWriter(writer);
+ dw.setPrettyprint(pretty);
+ dw.print(this);
+ }
+ else
+ {
+ writer.write( getXMLFragment() );
+ if(pretty)
+ writer.write("\n");
+ }
+
+ }
+ catch (Exception e)
+ {
+ log.error("Failed to write SOAPContentElement ", e);
+ }
+
+ return null;
+ }
+ /**
+ * When a SOAPContentElement transitions between dom-valid and xml-valid
+ * the XOP elements need to transition from XOP optimized to base64 and reverse.<p>
+ *
+ * If MTOM is disabled through a message context property we always enforce the
+ * base64 representation by expanding to DOM, the same happens when a JAXRPC handler
+ * accesses the SOAPContentElement.<p>
+ *
+ * If the element is in dom-valid state (because a handlers accessed it), upon marshalling
+ * it's needs to be decided wether or not the <code>xop:Include</code> should be restored.
+ * This as well depends upon the message context property.
+ */
+ private void handleMTOMTransitions() {
+
+ boolean mtomEnabled = isXOPParameter() && XOPContext.isMTOMEnabled();
+
+ if( paramMetaData != null && mtomEnabled == false )
+ {
+ // If MTOM is disabled, we force dom expansion.
+ // This will inline any XOP include element
+ // and remove the attachment part when transitioning.
+ // See SOAPFactoryImpl for details.
+
+ log.debug("Transitioning to dom-valid state, MTOM disabled");
+ expandToDOM();
+ }
+ else if(isDOMValid && mtomEnabled )
+ {
+ // When the DOM representation is valid,
+ // but MTOM is enabled we need to convert the inlined
+ // element back to an xop:Include element and create the attachment part
+
+ log.debug("Transitioning to xml-valid state, MTOM enabled");
+ XOPContext.restoreXOPData(this);
+ }
+ }
+
+ private boolean isXOPParameter() {
+ return (paramMetaData != null && paramMetaData.isXOP());
+ }
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPElementImpl.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPElementImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPElementImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -26,6 +26,7 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.io.Writer;
import javax.xml.namespace.QName;
import javax.xml.soap.Name;
@@ -36,6 +37,7 @@
import org.jboss.logging.Logger;
import org.jboss.util.xml.DOMUtils;
+import org.jboss.util.xml.DOMWriter;
import org.jboss.ws.Constants;
import org.w3c.dom.Attr;
import org.w3c.dom.DOMException;
@@ -654,4 +656,21 @@
// FIXME setIdAttributeNS
throw new org.jboss.util.NotImplementedException("setIdAttributeNS");
}
+ /**
+ * The default implementation uses a DOMWriter.
+ * SOAPContentElements overwrite this to optimize DOM callbacks.
+ *
+ * @param writer
+ * @param pretty
+ *
+ * @return end element tag
+ */
+ public String write(Writer writer, boolean pretty)
+ {
+ /*DOMWriter domWriter = new DOMWriter(writer);
+ domWriter.setPrettyprint(pretty);
+ domWriter.print(this);
+ */
+ return null;
+ }
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPEnvelopeImpl.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPEnvelopeImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPEnvelopeImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -24,6 +24,8 @@
// $Id$
import java.util.Iterator;
+import java.io.Writer;
+import java.io.IOException;
import javax.xml.namespace.QName;
import javax.xml.rpc.soap.SOAPFaultException;
@@ -35,9 +37,9 @@
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
-import javax.xml.soap.SOAPPart;
import org.jboss.ws.Constants;
+import org.jboss.ws.WSException;
import org.jboss.xb.binding.NamespaceRegistry;
import org.w3c.dom.Document;
@@ -54,6 +56,8 @@
// Reference the enclosing SOAPPart, so that getOwnerDocument() works correctly
private SOAPPartImpl soapPart;
+ private boolean domExpansionEnabled = false;
+
// A registry of namespaces in this envelope
private NamespaceRegistry namespaceRegistry = new NamespaceRegistry();
@@ -190,4 +194,39 @@
{
return soapPart;
}
+ public boolean isDomExpansionEnabled() {
+ return domExpansionEnabled;
+ }
+
+ public void setDomExpansionEnabled(boolean domExpansionEnabled) {
+ this.domExpansionEnabled = domExpansionEnabled;
+ }
+ public String write(Writer writer, boolean pretty) {
+ try
+ {
+ writer.write("<");
+ String envPrefix = getPrefix();
+ writer.write(envPrefix +":Envelope xmlns:"+getPrefix()+"='"+getNamespaceURI()+"'");
+
+ // namespaces
+ Iterator it = getNamespacePrefixes();
+ while(it.hasNext())
+ {
+ String prefix = (String)it.next();
+ if(!prefix.equals(envPrefix))
+ writer.write(" xmlns:"+prefix+"='"+getNamespaceURI(prefix)+"'");
+ }
+
+ writer.write('>');
+
+ if(pretty)
+ writer.write("\n");
+
+ return("</"+getPrefix()+":Envelope>");
+ }
+ catch (IOException e)
+ {
+ throw new WSException(e.getMessage());
+ }
+ }
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPFactoryImpl.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPFactoryImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPFactoryImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -31,6 +31,8 @@
import org.jboss.logging.Logger;
import org.jboss.util.xml.DOMUtils;
+import org.jboss.ws.Constants;
+import org.jboss.ws.xop.XOPContext;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -69,8 +71,8 @@
throw new IllegalArgumentException("Source node cannot be null");
String localName = domNode.getLocalName();
- String prefix = domNode.getPrefix();
- String nsURI = domNode.getNamespaceURI();
+ String prefix = domNode.getPrefix() != null ? domNode.getPrefix() : "";
+ String nsURI = domNode.getNamespaceURI() != null ? domNode.getNamespaceURI() : "";
SOAPElementImpl soapElement = new SOAPElementImpl(localName, prefix, nsURI);
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPHeaderImpl.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPHeaderImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPHeaderImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -23,6 +23,8 @@
import java.util.ArrayList;
import java.util.Iterator;
+import java.io.Writer;
+import java.io.IOException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPElement;
@@ -33,6 +35,7 @@
import org.w3c.dom.DOMException;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Node;
+import org.jboss.ws.WSException;
/**
@@ -195,4 +198,52 @@
return super.replaceChild(newChild, oldChild);
}
+ public String write(Writer writer, boolean pretty) {
+ try
+ {
+
+ writer.write('<');
+ writer.write(getParentElement().getPrefix()+":Header");
+
+ // namespaces
+ Iterator it = getNamespacePrefixes();
+ while(it.hasNext())
+ {
+ String prefix = (String)it.next();
+ writer.write(" xmlns:"+prefix+"='"+getNamespaceURI(prefix)+"'");
+ }
+
+ // attributes
+ Iterator attNames = getAllAttributes();
+ while(attNames.hasNext())
+ {
+ NameImpl name = (NameImpl)attNames.next();
+ String attPrefix = name.getPrefix()!=null ? name.getPrefix():"";
+ String attFqn = attPrefix.length()>0 ? attPrefix+":"+name.getLocalName() : name.getLocalName();
+ writer.write(" "+attFqn);
+ writer.write("='"+getAttributeValue(name)+"'");
+ }
+
+ boolean hasChildren = getChildNodes().getLength() > 0;
+ String endTag = null;
+ if(hasChildren)
+ {
+ writer.write('>');
+ endTag = "</"+getParentElement().getPrefix()+":Header>";
+ }
+ else
+ {
+ writer.write("/>");
+ }
+
+ if(pretty)
+ writer.write("\n");
+
+ return endTag;
+ }
+ catch (IOException e)
+ {
+ throw new WSException(e.getMessage());
+ }
+ }
}
\ No newline at end of file
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPMessageImpl.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPMessageImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/SOAPMessageImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -23,8 +23,8 @@
// $Id$
-import org.jboss.util.xml.DOMWriter;
import org.jboss.ws.WSException;
+import org.jboss.ws.xop.XOPContext;
import org.jboss.ws.metadata.EndpointMetaData;
import org.jboss.ws.metadata.OperationMetaData;
import org.jboss.ws.soap.attachment.*;
@@ -109,6 +109,20 @@
return null;
}
+ public AttachmentPart removeAttachmentByContentId(String cid)
+ {
+ for (AttachmentPart part : attachments)
+ {
+ String contentId = part.getContentId();
+ if (contentId.equals(cid))
+ {
+ attachments.remove(part);
+ return part;
+ }
+ }
+
+ return null;
+ }
public AttachmentPart getAttachmentByPartName(String partName)
{
for (AttachmentPart part : attachments)
@@ -187,7 +201,7 @@
try
{
String contentType;
- if (isXOPMessage())
+ if (isXOPMessage() && XOPContext.isMTOMEnabled())
{
multipartRelatedEncoder = new MultipartRelatedXOPEncoder(this);
multipartRelatedEncoder.encodeMultipartRelatedMessage();
@@ -247,8 +261,8 @@
{
boolean writeXML = isWriteXMLDeclaration();
String charsetEncoding = getCharSetEncoding();
- DOMWriter domWriter = new DOMWriter(outs, charsetEncoding);
- domWriter.setWriteXMLDeclaration(writeXML).print(soapEnv);
+ SAAJElementWriter writer = new SAAJElementWriter(outs, charsetEncoding);
+ writer.setWriteXMLDeclaration(writeXML).print((SOAPEnvelopeImpl)soapEnv);
}
}
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/attachment/ByteArrayContentHandler.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/attachment/ByteArrayContentHandler.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/attachment/ByteArrayContentHandler.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -21,17 +21,16 @@
*/
package org.jboss.ws.soap.attachment;
-import org.jboss.ws.WSException;
+import org.jboss.ws.utils.MimeUtils;
+import javax.activation.ActivationDataFlavor;
import javax.activation.DataContentHandler;
import javax.activation.DataSource;
-import javax.activation.ActivationDataFlavor;
-import javax.xml.transform.stream.StreamSource;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
-import java.io.ByteArrayInputStream;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.UnsupportedFlavorException;
/**
* @author Heiko Braun <heiko.braun at jboss.com>
@@ -58,6 +57,16 @@
}
public void writeTo(Object object, String string, OutputStream outputStream) throws IOException {
- throw new WSException("The current implementation is read-only");
+ if(object instanceof byte[])
+ {
+ // this actually depends on the SwapableMemoryDataSource
+ // todo: why is not always a ByteArrayInputStream ?
+ outputStream.write((byte[])object);
+ }
+ else
+ {
+ MimeUtils.ByteArrayConverter converter = MimeUtils.getConverterForJavaType(object.getClass());
+ converter.writeTo(object, outputStream);
+ }
}
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedSwAEncoder.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedSwAEncoder.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedSwAEncoder.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -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;
@@ -30,8 +32,7 @@
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
-import org.jboss.util.xml.DOMWriter;
-import org.jboss.ws.soap.SOAPMessageImpl;
+import java.io.OutputStream;
/**
* MultipartRelatedEncoder encodes a SOAPMessage
@@ -69,7 +70,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/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedXOPEncoder.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedXOPEncoder.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/soap/attachment/MultipartRelatedXOPEncoder.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -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.
@@ -71,7 +71,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/src/main/java/org/jboss/ws/utils/IOUtils.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/IOUtils.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/IOUtils.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -21,16 +21,13 @@
*/
package org.jboss.ws.utils;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
+import java.io.*;
import org.jboss.logging.Logger;
+import org.jboss.ws.WSException;
+import javax.activation.DataHandler;
+
/**
* IO utilites
*
@@ -62,4 +59,17 @@
r = ins.read(bytes);
}
}
+ public static byte[] convertToBytes(DataHandler dh)
+ {
+ try
+ {
+ ByteArrayOutputStream buffOS= new ByteArrayOutputStream();
+ dh.writeTo(buffOS);
+ return buffOS.toByteArray();
+ }
+ catch (IOException e)
+ {
+ throw new WSException("Unable to convert DataHandler to byte[]: " + e.getMessage());
+ }
+ }
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/JavaUtils.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/JavaUtils.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/JavaUtils.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -27,7 +27,6 @@
import java.util.HashMap;
import org.jboss.logging.Logger;
-import org.jboss.ws.metadata.wsdl.WSDLUtils;
/** Java utilities
*
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/MimeUtils.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/MimeUtils.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/MimeUtils.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -27,7 +27,9 @@
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
+import com.sun.image.codec.jpeg.JPEGImageEncoder;
import org.jboss.ws.Constants;
+import org.jboss.ws.WSException;
import javax.mail.internet.ContentType;
import javax.mail.internet.MimeMultipart;
@@ -35,7 +37,7 @@
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;
import java.awt.image.BufferedImage;
-import java.io.InputStream;
+import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -169,25 +171,48 @@
return mimeType;
}
- public ByteArrayConverter getConverterFor(Class targetClazz)
+ public static ByteArrayConverter getConverterForJavaType(Class targetClazz)
{
ByteArrayConverter converter = null;
- if(JavaUtils.isAssignableFrom(targetClazz, java.awt.Image.class))
+ if(JavaUtils.isAssignableFrom(java.awt.Image.class, targetClazz))
converter = new ImageConverter();
- else if (JavaUtils.isAssignableFrom(targetClazz, javax.xml.transform.Source.class))
+ else if (JavaUtils.isAssignableFrom(javax.xml.transform.Source.class, targetClazz))
converter = new SourceConverter();
- else if (JavaUtils.isAssignableFrom(targetClazz, java.lang.String.class))
+ else if (JavaUtils.isAssignableFrom(java.lang.String.class, targetClazz))
converter = new StringConverter();
+ else if (JavaUtils.isAssignableFrom(java.io.InputStream.class, targetClazz))
+ converter = new StreamConverter();
if(null == converter)
- throw new IllegalArgumentException("Unable to resolve conversion strategy for: " + targetClazz);
+ throw new WSException("No ByteArrayConverter for class: " + targetClazz.getName());
return converter;
}
- public class ImageConverter implements ByteArrayConverter
+ public static ByteArrayConverter getConverterForContentType(String contentType)
{
- public Object convert(InputStream in) {
+ ByteArrayConverter converter = null;
+
+ if(contentType != null)
+ {
+ if("image/jpeg".equals(contentType) || "image/jpg".equals(contentType))
+ converter = new ImageConverter();
+ else if("text/xml".equals(contentType) || "application/xml".equals(contentType))
+ converter = new SourceConverter();
+ else if("text/plain".equals(contentType))
+ converter = new StringConverter();
+ else if("application/octet-stream".equals(contentType))
+ converter = new StreamConverter();
+ }
+
+ if(null == converter)
+ throw new WSException("No ByteArrayConverter for content type: " + contentType);
+
+ return converter;
+ }
+ public static class ImageConverter implements ByteArrayConverter
+ {
+ public Object readFrom(InputStream in) {
Object converted = null;
try
{
@@ -203,51 +228,124 @@
return converted;
}
+ public void writeTo(Object obj, OutputStream out) {
+ if(obj instanceof BufferedImage)
+ {
+ JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(out);
+ try
+ {
+ enc.encode((BufferedImage)obj);
+ }
+ catch (IOException e)
+ {
+ throw new WSException("Failed to convert " + obj.getClass());
+ }
+ }
+ else
+ {
+ throw new WSException("Unable to convert " + obj.getClass());
+ }
+
+ }
+
}
- public class SourceConverter implements ByteArrayConverter
+ public static class SourceConverter implements ByteArrayConverter
{
- public Object convert(InputStream in) {
+ public Object readFrom(InputStream in) {
+ return new StreamSource(in);
+ }
- Object converted = null;
- try
+ public void writeTo(Object obj, OutputStream out) {
+ if(obj instanceof StreamSource)
{
- converted = new StreamSource(in);
+ StreamSource s = (StreamSource)obj;
+ try
+ {
+ IOUtils.copyStream(out, s.getInputStream());
+ }
+ catch (IOException e)
+ {
+ throw new WSException("Failed to convert " + obj.getClass());
+ }
}
- catch (Exception e)
+ else
{
- // ignore
+ throw new WSException("Unable to convert " + obj.getClass());
}
-
- return converted;
}
}
- public class StringConverter implements ByteArrayConverter
+ public static class StringConverter implements ByteArrayConverter
{
- public Object convert(InputStream in) {
+ public Object readFrom(InputStream in) {
Object converted = null;
try
{
- StringBuffer sb = new StringBuffer();
- while(in.available()>0)
- {
- sb.append(in.read());
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
+ StringBuilder sb = new StringBuilder();
+ String line = null;
+
+ while ((line = br.readLine()) != null) {
+ sb.append(line + "\n");
}
+
+ br.close();
+
converted = sb.toString();
}
- catch (Exception e)
+ catch (IOException e)
{
- // ignore
+ throw new WSException("Failed to convert java.lang.String");
}
return converted;
}
+
+ public void writeTo(Object obj, OutputStream out) {
+ if(obj instanceof String)
+ {
+ String s = (String)obj;
+ try
+ {
+ out.write(s.getBytes("UTF-8"));
+ }
+ catch (IOException e)
+ {
+ throw new WSException("Failed to convert " + obj.getClass());
+ }
+ }
+ else
+ {
+ throw new WSException("Unable to convert " + obj.getClass());
+ }
+ }
}
+ public static class StreamConverter implements ByteArrayConverter
+ {
+ public Object readFrom(InputStream in) {
+ return in;
+ }
+
+ public void writeTo(Object obj, OutputStream out) {
+ if(obj instanceof InputStream)
+ {
+ try
+ {
+ IOUtils.copyStream(out, (InputStream)obj);
+ }
+ catch (IOException e)
+ {
+ throw new WSException("Failed to convert " + obj.getClass());
+ }
+ }
+ }
+ }
public interface ByteArrayConverter
{
- Object convert(InputStream in);
+ Object readFrom(InputStream in);
+ void writeTo(Object obj, OutputStream out);
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/ThreadLocalAssociation.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/ThreadLocalAssociation.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/utils/ThreadLocalAssociation.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -29,11 +29,7 @@
*/
private static InheritableThreadLocal<SecurityStore> strTransformAssoc = new InheritableThreadLocal<SecurityStore>();
- /**
- * Stores XOP callee information
- * @see org.jboss.ws.xop.XOPContext#doInlineBase64
- */
- private static ThreadLocal<Boolean> XOPInlineAssoc = new ThreadLocal<Boolean>()
+ private static ThreadLocal<Boolean> DOMExpansionAssoc = new ThreadLocal<Boolean>()
{
protected Boolean initialValue() {
return Boolean.FALSE;
@@ -51,14 +47,14 @@
return strTransformAssoc;
}
- public static ThreadLocal<Boolean> localXOPCalleeAssoc()
+ public static ThreadLocal<Boolean> localDomExpansion()
{
- return XOPInlineAssoc;
+ return DOMExpansionAssoc;
}
public static void clear() {
invokerMDBAssoc.set(null);
msgContextAssoc.set(null);
strTransformAssoc.set(null);
- XOPInlineAssoc.set(null);
+ DOMExpansionAssoc.set(Boolean.FALSE);
}
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/xop/XOPContext.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/xop/XOPContext.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/xop/XOPContext.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -21,24 +21,43 @@
*/
package org.jboss.ws.xop;
+import org.jboss.logging.Logger;
import org.jboss.util.xml.DOMUtils;
+import org.jboss.ws.Constants;
+import org.jboss.ws.WSException;
+import org.jboss.ws.jaxrpc.StubExt;
import org.jboss.ws.soap.MessageContextAssociation;
+import org.jboss.ws.soap.NameImpl;
import org.jboss.ws.soap.SOAPMessageContextImpl;
import org.jboss.ws.soap.SOAPMessageImpl;
+import org.jboss.ws.utils.MimeUtils;
import org.jboss.ws.utils.ThreadLocalAssociation;
-import org.jboss.xb.binding.sunday.xop.XOPUnmarshaller;
+import org.jboss.ws.utils.JavaUtils;
import org.jboss.xb.binding.SimpleTypeBindings;
-import org.w3c.dom.Element;
+import org.jboss.xb.binding.sunday.xop.XOPMarshaller;
+import org.jboss.xb.binding.sunday.xop.XOPObject;
-import javax.xml.soap.SOAPElement;
import javax.activation.DataHandler;
import javax.activation.DataSource;
+import javax.xml.namespace.QName;
+import javax.xml.soap.AttachmentPart;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPException;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.util.Iterator;
/**
* XOP context associated with a message context.
+ * Acts as a facade to the current soap message and supports the various
+ * XOP transitions.<p>
+ * A good starting point to understand how MTOM in JBossWS works is to take a
+ * look at the SOAPContentElement implementation.
*
* @see ThreadLocalAssociation
+ * @see org.jboss.ws.soap.SOAPContentElement#handleMTOMTransitions()
+ * @see XOPUnmarshallerImpl
+ * @see XOPMarshallerImpl
*
* @author Heiko Braun <heiko.braun at jboss.com>
* @since May 10, 2006
@@ -46,8 +65,13 @@
*/
public class XOPContext {
- public static final String CID_PREFIX = "cid:";
+ private static final Logger log = Logger.getLogger(XOPContext.class);
+ private static final String NS_XOP_JBOSSWS = "http://org.jboss.ws/xop";
+
+ /**
+ * Check if the current soap message flagged as a XOP package?
+ */
public static boolean isXOPPackage() {
boolean isXOP = false;
SOAPMessageContextImpl msgContext = MessageContextAssociation.peekMessageContext();
@@ -59,93 +83,229 @@
}
/**
- * Force inline representation.
+ * Check if MTOM is disabled through a message context property.
+ * (<code>org.jboss.ws.mtom.enabled</code>)<br>
+ * Defaults to TRUE if the property is not set.
*/
- public static void setInlineBase64()
+ public static boolean isMTOMEnabled()
{
- ThreadLocalAssociation.localXOPCalleeAssoc().set(Boolean.TRUE);
+ SOAPMessageContextImpl msgContext = MessageContextAssociation.peekMessageContext();
+ boolean mtomEnabled = msgContext.getProperty(StubExt.PROPERTY_MTOM_ENABLED) == null ?
+ true :
+ ((String)msgContext.getProperty(StubExt.PROPERTY_MTOM_ENABLED)).equalsIgnoreCase("true");
+ return mtomEnabled;
}
/**
- * Unset inline representation flag.
+ * Replace all <code>xop:Include</code> elements with it's base64 representation.
+ * This happens when the associated SOAPContentElement transitions to state dom-valid.<br>
+ * All attachement parts will be removed.
*/
- public static void unsetInlineBase64()
+ public static void inlineXOPData(SOAPElement xopElement)
{
- ThreadLocalAssociation.localXOPCalleeAssoc().set(Boolean.FALSE);
- }
+ String ns = xopElement.getNamespaceURI()!=null ? xopElement.getNamespaceURI(): "";
+ String localName = xopElement.getLocalName();
- /**
- * Should the current message be inlined?
- * An inlined message contains the base64 representation instead
- * if the <code>xop:Include</code> element.
- */
- public static boolean doInlineBase64()
- {
- Boolean b = ThreadLocalAssociation.localXOPCalleeAssoc().get() != null ?
- ThreadLocalAssociation.localXOPCalleeAssoc().get():Boolean.FALSE;
- return b.booleanValue();
+ // rpc/lit
+ if(ns.equals(Constants.NS_XOP) && localName.equals("Include"))
+ {
+ replaceXOPInclude(xopElement.getParentElement(), xopElement);
+ }
+ else
+ {
+ // doc/lit
+ Iterator it = DOMUtils.getChildElements(xopElement);
+ while(it.hasNext())
+ {
+ SOAPElement childElement = (SOAPElement)it.next();
+ String childNS = childElement.getNamespaceURI()!=null ? childElement.getNamespaceURI(): "";
+ String childName = childElement.getLocalName();
+ if(childNS.equals(Constants.NS_XOP) && childName.equals("Include"))
+ {
+ replaceXOPInclude(xopElement, childElement);
+ }
+ else
+ {
+ inlineXOPData(childElement);
+ }
+ }
+ }
}
/**
- * Replace all <code>xop:Include</code> elements with it's base64 representation
+ * Restore previously inlined XOP elements.
+ * All base64 representations will be replaced by <code>xop:Include</code>
+ * elements and the attachment parts will be recreated. <br>
+ * This happens when a SOAPContentElement is written to an output stream.
*/
- public static void inlineXOPData(SOAPElement xopElement)
+ public static void restoreXOPData(SOAPElement xopElement)
{
- Iterator it = DOMUtils.getChildElements(xopElement);
- while(it.hasNext())
+ String contentType = xopElement.getAttributeNS(NS_XOP_JBOSSWS, "content-type");
+ if(contentType != null && contentType.length()>0)
{
- SOAPElement childElement = (SOAPElement)it.next();
- String ns = childElement.getNamespaceURI()!=null ? childElement.getNamespaceURI(): "";
- String localName = childElement.getLocalName();
- if(ns.equals("http://www.w3.org/2004/08/xop/include") && localName.equals("Include"))
+ replaceBase64Representation(xopElement, contentType);
+ xopElement.removeAttribute(new NameImpl(new QName(NS_XOP_JBOSSWS, "content-type")));
+ }
+ else
+ {
+ Iterator it = DOMUtils.getChildElements(xopElement);
+ while(it.hasNext())
{
- replaceXOPInclude(xopElement, childElement);
+ SOAPElement childElement = (SOAPElement)it.next();
+ restoreXOPData(childElement);
}
- else
- {
- inlineXOPData(childElement);
- }
}
}
- private static void replaceXOPInclude(SOAPElement parent, SOAPElement child)
+ private static void replaceBase64Representation(SOAPElement xopElement, String contentType) {
+
+ SOAPElement parentElement = xopElement.getParentElement();
+ log.debug("Replace base64 representation on element [xmlName=" + parentElement.getLocalName()+"]");
+
+ String base64 = xopElement.getValue();
+ byte[] data = SimpleTypeBindings.unmarshalBase64(base64);
+
+ MimeUtils.ByteArrayConverter converter = MimeUtils.getConverterForContentType(contentType);
+ Object converted = converter.readFrom(new ByteArrayInputStream(data));
+
+ XOPObject xopObject = new XOPObject(converted);
+ xopObject.setContentType(contentType);
+
+ XOPMarshaller xopMarshaller = new XOPMarshallerImpl();
+ String cid = xopMarshaller.addMtomAttachment(xopObject, xopElement.getNamespaceURI(), xopElement.getLocalName());
+
+ // remove base64 node with the xop:Include element
+ org.w3c.dom.Node child = (org.w3c.dom.Node)xopElement.getFirstChild();
+ xopElement.removeChild(child);
+
+ try
+ {
+ SOAPElement xopInclude = xopElement.addChildElement("Include", "xop", Constants.NS_XOP);
+ xopInclude.setAttribute("href", cid);
+ log.debug("Restored xop:Include element on {" + xopElement.getNamespaceURI()+"}"+xopElement.getLocalName());
+ }
+ catch (SOAPException e)
+ {
+ throw new WSException("Failed to create XOP include element", e);
+ }
+
+ }
+
+ private static void replaceXOPInclude(SOAPElement parent, SOAPElement xopIncludeElement)
{
- String cid = child.getAttribute("href");
- if(cid!=null)
+
+ log.debug("Replace xop:Include on element [xmlName=" + parent.getLocalName() +"]");
+
+ String cid = xopIncludeElement.getAttribute("href");
+ byte[] data;
+ String contentType;
+
+ try
{
- XOPUnmarshaller unm = new XOPUnmarshallerImpl();
- byte[] data = unm.getAttachmentAsByteArray(cid);
- String base64 = SimpleTypeBindings.marshalBase64(data);
- parent.removeChild(child);
- parent.setValue(base64);
+ AttachmentPart part = XOPContext.getAttachmentByCID(cid);
+ DataHandler dh = part.getDataHandler();
+ contentType = dh.getContentType();
+
+ // TODO: can't we create base64 directly from stream?
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ dh.writeTo(bout);
+ data = bout.toByteArray();
+
}
+ catch (Exception e)
+ {
+ throw new WSException("Failed to inline XOP data", e);
+ }
+
+ // create base64 contents
+ String base64 = SimpleTypeBindings.marshalBase64(data);
+ parent.removeChild(xopIncludeElement);
+ parent.setValue(base64);
+ parent.setAttributeNS(NS_XOP_JBOSSWS, "content-type", contentType);
+
+ log.debug("Created base64 representation for content-type " + contentType);
+
+ // cleanup the attachment part
+ SOAPMessageContextImpl msgContext = (SOAPMessageContextImpl)MessageContextAssociation.peekMessageContext();
+ SOAPMessageImpl soapMessage = (SOAPMessageImpl)msgContext.getMessage();
+
+ if(cid.startsWith("cid:")) cid = cid.substring(4);
+ cid = '<'+cid+'>';
+
+ AttachmentPart removedPart = soapMessage.removeAttachmentByContentId(cid);
+ if(null == removedPart)
+ throw new WSException("Unable to remove attachment part " + cid);
+
+ log.debug("Removed attachment part " + cid);
+
}
- public static DataHandler getDataHandler(Object o)
+ /**
+ * Access an XOP attachment part by content id (CID).
+ */
+ public static AttachmentPart getAttachmentByCID(String cid) throws SOAPException
{
+ SOAPMessageContextImpl msgContext = MessageContextAssociation.peekMessageContext();
+ SOAPMessageImpl soapMessage = (SOAPMessageImpl)msgContext.getMessage();
+
+ // RFC2392 requires the 'cid:' part to be stripped from the cid
+ if(cid.startsWith("cid:")) cid = cid.substring(4);
+ cid = '<'+cid+'>';
+
+ AttachmentPart part = soapMessage.getAttachmentByContentId(cid);
+ if (part == null)
+ throw new WSException("Cannot find attachment part for: " + cid);
+
+ return part;
+ }
+
+ /**
+ * Create a <code>DataHandler</code> for an object.
+ * The handlers content type is based on the java type.
+ */
+ public static DataHandler createDataHandler(XOPObject xopObject)
+ {
DataHandler dataHandler;
- // todo: contentType
- if(o instanceof java.awt.Image)
+ Object o = xopObject.getContent();
+
+ if(o instanceof DataHandler)
{
- dataHandler = new DataHandler(o, "image/jpeg");
+ dataHandler = (DataHandler)o;
}
- else if(o instanceof javax.xml.transform.Source)
+ else if(xopObject.getContentType() != null)
{
- dataHandler = new DataHandler(o, "application/xml");
+ dataHandler = new DataHandler(o, xopObject.getContentType());
}
- else if(o instanceof String)
+ else if(! getContentTypeForClazz(o.getClass()).equals("application/octet-stream"))
{
- dataHandler = new DataHandler(o, "text/plain");
+ dataHandler = new DataHandler(o, getContentTypeForClazz(o.getClass()));
}
- else if(o instanceof DataHandler)
- {
- dataHandler = (DataHandler)o;//new DataHandler(o, "application/octet-stream");
- }
else
{
DataSource ds = new SimpleDataSource(o, "application/octet-stream");
dataHandler = new DataHandler(ds);
}
+
return dataHandler;
}
+
+ public static String getContentTypeForClazz(Class clazz)
+ {
+ if(JavaUtils.isAssignableFrom(java.awt.Image.class, clazz))
+ {
+ return "image/jpeg";
+ }
+ else if (JavaUtils.isAssignableFrom(javax.xml.transform.Source.class, clazz))
+ {
+ return "application/xml";
+ }
+ else if (JavaUtils.isAssignableFrom(java.lang.String.class, clazz))
+ {
+ return "text/plain";
+ }
+ else
+ {
+ return "application/octet-stream";
+ }
+ }
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/xop/XOPMarshallerImpl.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/xop/XOPMarshallerImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/xop/XOPMarshallerImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -32,7 +32,6 @@
import org.jboss.xb.binding.sunday.xop.XOPObject;
import javax.activation.DataHandler;
-import javax.activation.DataSource;
import javax.xml.namespace.QName;
import javax.xml.soap.AttachmentPart;
@@ -57,7 +56,7 @@
// Load JAF content handlers
ContentHandlerRegistry.register();
}
-
+
public boolean isXOPPackage()
{
return XOPContext.isXOPPackage();
@@ -66,21 +65,21 @@
public String addMtomAttachment(XOPObject obj, String elementNamespace, String elementName)
{
- QName xmlName = new QName(elementNamespace, elementName);
- log.debug("serialize: [xmlName=" + xmlName + "]");
-
SOAPMessageContextImpl msgContext = (SOAPMessageContextImpl)MessageContextAssociation.peekMessageContext();
SOAPMessageImpl soapMessage = (SOAPMessageImpl)msgContext.getMessage();
+ QName xmlName = new QName(elementNamespace, elementName);
+ log.debug("serialize: [xmlName=" + xmlName + "]");
+
String cid = soapMessage.getCidGenerator().generateFromName(xmlName.getLocalPart());
- DataHandler dataHandler = XOPContext.getDataHandler(obj.getContent());
- obj.setContentType(dataHandler.getContentType());
-
+ DataHandler dataHandler = XOPContext.createDataHandler(obj);
AttachmentPart xopPart = soapMessage.createAttachmentPart(dataHandler);
xopPart.addMimeHeader(MimeConstants.CONTENT_ID, '<'+cid+'>'); // RFC2392 requirement
soapMessage.addAttachmentPart(xopPart);
+ log.debug("Created attachment part " +cid+", with content-type " +xopPart.getContentType());
+
return "cid:" + cid;
}
Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/xop/XOPUnmarshallerImpl.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/xop/XOPUnmarshallerImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/xop/XOPUnmarshallerImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -68,19 +68,10 @@
{
try
{
- AttachmentPart part = getAttachementByCID(cid);
-
- // Let JAF do the conversion
- Object content = part.getDataHandler().getContent();
-
- if(content instanceof InputStream)
- {
- // JAF doesn't know the content-type
- // In this case we pass along the DataHandler
- content = part.getDataHandler();
- }
-
- XOPObject xopObject = new XOPObject(content);
+ // Always return the DataHandler, it's the preferred SEI parameter type.
+ // If necessary the conversion can take just place in SOAPContentElement
+ AttachmentPart part = XOPContext.getAttachmentByCID(cid);
+ XOPObject xopObject = new XOPObject(part.getDataHandler());
xopObject.setContentType(part.getDataHandler().getContentType());
return xopObject;
@@ -89,18 +80,13 @@
{
throw new WSException(ex);
}
- catch(IOException e)
- {
- throw new WSException("Unable to retrieve content for cid:" + cid, e);
- }
-
}
public byte[] getAttachmentAsByteArray(String cid)
{
try
{
- AttachmentPart part = getAttachementByCID(cid);
+ AttachmentPart part = XOPContext.getAttachmentByCID(cid);
DataHandler dh = part.getDataHandler();
ByteArrayOutputStream bout = new ByteArrayOutputStream();
dh.writeTo(bout);
@@ -117,20 +103,4 @@
}
}
-
- private AttachmentPart getAttachementByCID(String cid) throws SOAPException
- {
- SOAPMessageContextImpl msgContext = MessageContextAssociation.peekMessageContext();
- SOAPMessageImpl soapMessage = (SOAPMessageImpl)msgContext.getMessage();
-
- // RFC2392 requires the 'cid:' part to be stripped from the cid
- if(cid.startsWith("cid:")) cid = cid.substring(4);
- cid = '<'+cid+'>';
-
- AttachmentPart part = soapMessage.getAttachmentByContentId(cid);
- if (part == null)
- throw new WSException("Cannot find attachment part for: " + cid);
-
- return part;
- }
}
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/addressing/SOAPAddressingPropertiesTestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/addressing/SOAPAddressingPropertiesTestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/addressing/SOAPAddressingPropertiesTestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -37,6 +37,9 @@
import javax.xml.ws.addressing.soap.SOAPAddressingProperties;
import org.jboss.test.ws.JBossWSTest;
+import org.jboss.ws.soap.SAAJElementWriter;
+import org.jboss.ws.soap.SOAPElementImpl;
+import org.jboss.ws.utils.ThreadLocalAssociation;
/**
* Test the SOAPAddressingProperties
@@ -83,6 +86,7 @@
AddressingBuilder addrBuilder = SOAPAddressingBuilder.getAddressingBuilder();
addrProps = (SOAPAddressingProperties)addrBuilder.newAddressingProperties();
addrProps.readHeaders(soapMessage);
+ ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
}
public void testReadHeaders() throws Exception
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/encoded/marshalltest/MarshallTestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/encoded/marshalltest/MarshallTestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/encoded/marshalltest/MarshallTestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -31,6 +31,7 @@
import javax.naming.InitialContext;
import javax.xml.rpc.Service;
+import javax.xml.rpc.Stub;
import junit.framework.Test;
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jbws801/JBWS801TestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jbws801/JBWS801TestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jbws801/JBWS801TestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -47,6 +47,7 @@
import org.jboss.test.ws.JBossWSTest;
import org.jboss.test.ws.JBossWSTestSetup;
+import org.jboss.ws.utils.ThreadLocalAssociation;
public class JBWS801TestCase extends JBossWSTest
{
@@ -59,6 +60,9 @@
{
return JBossWSTestSetup.newTestSetup(JBWS801TestCase.class, "jbossws-jbws801.war");
}
+ protected void setUp() throws Exception {
+ ThreadLocalAssociation.localDomExpansion().set(Boolean.TRUE);
+ }
public void testLargeFile() throws Exception
{
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jsr181/webservice/JSR181WebServiceEJB3TestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jsr181/webservice/JSR181WebServiceEJB3TestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jsr181/webservice/JSR181WebServiceEJB3TestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -26,6 +26,7 @@
import javax.naming.InitialContext;
import javax.xml.rpc.Service;
+import javax.xml.rpc.Stub;
import junit.framework.Test;
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/dynamichandler/DynamicHandlerTestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/dynamichandler/DynamicHandlerTestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/dynamichandler/DynamicHandlerTestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -30,6 +30,7 @@
import javax.xml.namespace.QName;
import javax.xml.rpc.handler.HandlerInfo;
import javax.xml.rpc.handler.HandlerRegistry;
+import javax.xml.rpc.Stub;
import junit.framework.Test;
@@ -67,6 +68,7 @@
service = (ServiceExt)iniCtx.lookup("java:comp/env/service/TestService");
endpoint = (HandlerTestService)service.getPort(HandlerTestService.class);
}
+ //((Stub)endpoint)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8081/jbossws-samples-dynamichandler");
}
public void testStaticHandlers() throws Exception
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/jsr181ejb/JSR181WebServiceEJB3TestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/jsr181ejb/JSR181WebServiceEJB3TestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/jsr181ejb/JSR181WebServiceEJB3TestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -73,7 +73,7 @@
Service service = (Service)iniCtx.lookup("java:comp/env/service/TestService");
EndpointInterface port = (EndpointInterface)service.getPort(EndpointInterface.class);
- ((Stub)port)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8080/jbossws-samples-jsr181ejb/EJB3Bean01");
+ //((Stub)port)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8081/jbossws-samples-jsr181ejb/EJB3Bean01");
Stub stub = (Stub)port;
stub._setProperty(Stub.USERNAME_PROPERTY, "kermit");
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/mtom/XOPRpcTestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/mtom/XOPRpcTestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/mtom/XOPRpcTestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -34,7 +34,6 @@
import javax.xml.rpc.Stub;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
-import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.net.URL;
@@ -67,7 +66,7 @@
InitialContext iniCtx = getInitialContext();
Service service = (Service)iniCtx.lookup("java:comp/env/service/XOPTestService");
port = (XOPTest)service.getPort(XOPTest.class);
- }
+ }
else
{
ServiceFactoryImpl factory = new ServiceFactoryImpl();
@@ -84,140 +83,86 @@
//((Stub)port)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, "http://" + getServerHost() + ":8081/jbossws-samples-mtom");
}
- /** Send a multipart message with a image/gif attachment part
+ /**
+ * Send unknown file as 'application/octet-stream'.
+ * Uses a DataHandler both for the endpint parameter and the return type.
*/
- /*public void testSendMimeImageGIF() throws Exception
+ public void testSimpleBinary() throws Exception
{
- URL url = new File("resources/samples/mtom/attach.gif").toURL();
-
- // On Linux the X11 server must be installed properly to create images successfully.
- // If the image cannot be created in the test VM, we assume it cannot be done on the
- // server either, so we just skip the test
- Image image = null;
- try
- {
- image = Toolkit.getDefaultToolkit().createImage(url);
- }
- catch (Throwable th)
- {
- //log.warn("Cannot create Image: " + th);
- }
-
- if (image != null)
- {
- Object value = port.sendMimeImageGIF("Some text message", new DataHandler(url));
- assertNotNull(value);
- assertTrue("Wrong return value type", value instanceof Image);
- }
- } */
-
- /** Send unknown file that actually is converted into a DataHandler
- */
- public void testSendOctets() throws Exception
- {
- Object value = port.sendOctets("Some text message", new DataHandler(
+ DataHandler value = port.sendOctets("Some text message", new DataHandler(
new FileDataSource("resources/samples/mtom/disguised_jpeg.xcf")
));
assertNotNull(value);
- assertTrue("Wrong return value type", value instanceof DataHandler);
+ assertTrue("Wrong content type", value.getContentType().equals("application/octet-stream"));
}
/**
- * A disguised element is send when the actual SEI java parameter
- * doesn't map with the content-type set on the mimepart.
- * .NET loves do this...
- *
- * In this case we try to 'force' convert that object according to
- * the expected java parameter.
- *
- * @throws Exception
- * @see org.jboss.ws.soap.SOAPContentElement#getObjectValue()
+ * Send a multipart message with a 'image/jpeg' attachment part.
+ * Uses a DataHandler as endpoint parameter and return type.
*/
- public void testSendDisguised() throws Exception
+ public void testAbstractParameterTypes() throws Exception
{
- Object value = port.sendMimeImageGIF("Some text message", new DataHandler(
- new FileDataSource("resources/samples/mtom/disguised_jpeg.xcf")
- ));
+ URL url = new File("resources/samples/mtom/attach.jpeg").toURL();
+ DataHandler value = port.sendMimeImageJPEG("Some text message", new DataHandler(url));
assertNotNull(value);
- assertTrue("Wrong return value type", value instanceof Image);
+ assertTrue("Wrong return content-type returned", value.getContentType().equals("image/jpeg"));
}
- /** Send a multipart message with a image/jpeg attachment part
+ /**
+ * Send a multipart message with a 'text/plain' attachment part.
+ * Uses java.lang.String as endpoint parameter and return type.
*/
- public void testSendMimeImageJPEG() throws Exception
+ public void testConcreteParameterTypes() throws Exception
{
- URL url = new File("resources/samples/mtom/attach.jpeg").toURL();
-
- // On Linux the X11 server must be installed properly to create images successfully.
- // If the image cannot be created in the test VM, we assume it cannot be done on the
- // server either, so we just skip the test
- Image image = null;
- try
- {
- image = Toolkit.getDefaultToolkit().createImage(url);
- }
- catch (Throwable th)
- {
- //log.warn("Cannot create Image: " + th);
- }
-
- if (image != null)
- {
- Object value = port.sendMimeImageJPEG("Some text message", image);
- assertNotNull(value);
- assertTrue("Wrong return value type", value instanceof Image);
- }
- }
-
- /** Send a multipart message with a text/plain attachment part
- */
- public void testSendMimeTextPlain() throws Exception
- {
- String value = port.sendMimeTextPlain("Some text message", "This is a plain text attachment.");
+ String xoppart = "This is a plain text attachment.";
+ String value = port.sendMimeTextPlain("Some text message", xoppart);
assertNotNull(value);
+ assertEquals("Value mismatch", value, xoppart);
}
- /** Send a multipart message with a multipart attachment part
+ /**
+ * Send a multipart message with a 'text/xml' attachment part.
+ * Uses a DataHandler as endpoint parameter, but javax.xml.transform.Source as return value.
*/
- public void testSendMimeMultipart() throws Exception
+ public void testParameterConversion() throws Exception
{
- /*URL url = new File("resources/samples/mtom/attach.txt").toURL();
- MimeMultipart multipart = new MimeMultipart("mixed");
- MimeBodyPart bodyPart = new MimeBodyPart();
- bodyPart.setDataHandler(new DataHandler(url));
- String bpct = bodyPart.getContentType();
- bodyPart.setHeader("Content-Type", bpct);
- multipart.addBodyPart(bodyPart);
+ FileInputStream stream = new FileInputStream("resources/samples/mtom/attach.xml");
+ StreamSource source = new StreamSource(stream);
- Object value = port.sendMimeMultipart("Some text message", multipart);
+ Source value = port.sendMimeTextXML("Some text message", new DataHandler(source, "text/xml"));
assertNotNull(value);
- assertTrue("Wrong return value type", value instanceof MimeMultipart);
- */
-
- System.out.println("FIXME 'testSendMimeMultipart()'");
+ assertTrue("Wrong return value type", value instanceof Source);
}
- /** Send a multipart message with a text/xml attachment part
+ /**
+ * Send a multipart message with a application/xml attachment part.
+ * Uses a javax.xml.transform.Source as endpoint parameter, but javax.activation.DataHandler as return value.
*/
- public void testSendMimeTextXML() throws Exception
+ public void testParameterConversionReverse() throws Exception
{
FileInputStream stream = new FileInputStream("resources/samples/mtom/attach.xml");
StreamSource source = new StreamSource(stream);
- Object value = port.sendMimeTextXML("Some text message", new DataHandler(source, "text/xml"));
+ DataHandler value = port.sendMimeApplicationXML("Some text message", source);
assertNotNull(value);
- assertTrue("Wrong return value type", value instanceof Source);
+ assertTrue("Wrong return value content-type", value.getContentType().equals("application/xml"));
}
- /** Send a multipart message with a application/xml attachment part
+ /**
+ * Send a inlined message and expect a multipart response.
*/
- public void testSendMimeApplicationXML() throws Exception
+ public void testMTOMDisabledClientSide() throws Exception
{
- FileInputStream stream = new FileInputStream("resources/samples/mtom/attach.xml");
- StreamSource source = new StreamSource(stream);
+ /*URL url = new File("resources/samples/mtom/attach.jpeg").toURL();
- Object value = port.sendMimeApplicationXML("Some text message", source);
+ // disable MTOM
+ ((Stub)port)._setProperty("org.jboss.ws.mtom.enabled", "false");
+
+ DataHandler value = port.sendMimeImageJPEG("MTOM disabled request", new DataHandler(url));
assertNotNull(value);
- assertTrue("Wrong return value type", value instanceof Source);
+ assertTrue("Wrong return content-type returned", value.getContentType().equals("image/jpeg"));
+ */
+
+ System.out.println("FIXME: testMTOMDisabledClientSide");
}
}
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/mtom/XOPTest.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/mtom/XOPTest.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/mtom/XOPTest.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -44,29 +44,21 @@
*/
public interface XOPTest extends Remote
{
- /** Service endpoint method for image/gif
- */
- Object sendMimeImageGIF(String message, Object xoppart) throws RemoteException;
-
/** Service endpoint method for image/jpeg
*/
- Object sendMimeImageJPEG(String message, Image xoppart) throws RemoteException;
+ DataHandler sendMimeImageJPEG(String message, DataHandler xoppart) throws RemoteException;
/** Service endpoint method for text/plain
*/
String sendMimeTextPlain(String message, String xoppart) throws RemoteException;
- /** Service endpoint method for multipart/*
- */
- MimeMultipart sendMimeMultipart(String message, MimeMultipart xoppart) throws RemoteException;
-
/** Service endpoint method for text/xml
*/
- Object sendMimeTextXML(String message, Object xoppart) throws RemoteException;
+ Source sendMimeTextXML(String message, DataHandler xoppart) throws RemoteException;
/** Service endpoint method for application/xml
*/
- Object sendMimeApplicationXML(String message, Source xoppart) throws RemoteException;
+ DataHandler sendMimeApplicationXML(String message, Source xoppart) throws RemoteException;
DataHandler sendOctets(String message, DataHandler xoppart) throws RemoteException;
}
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/mtom/XOPTestImpl.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/mtom/XOPTestImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/samples/mtom/XOPTestImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -21,6 +21,8 @@
*/
package org.jboss.test.ws.samples.mtom;
+import org.jboss.ws.WSException;
+
import javax.mail.BodyPart;
import javax.mail.internet.MimeMultipart;
import javax.xml.rpc.ServiceException;
@@ -34,229 +36,77 @@
import java.awt.*;
import java.rmi.RemoteException;
import java.util.Iterator;
+import java.io.IOException;
/**
* Service Endpoint for XOP
*
- * image/gif java.awt.Image
* image/jpeg java.awt.Image
* text/plain java.lang.String
- * multipart/* javax.mail.internet.MimeMultipart
* text/xml javax.xml.transform.Source
* application/xml javax.xml.transform.Source
*
* @author Thomas.Diesler at jboss.org
+ * @author Heiko.Braun at jboss.org
+ *
* @since 18-Jan-2006
*/
public class XOPTestImpl implements XOPTest, ServiceLifecycle
{
private ServletEndpointContext context;
- /** Service endpoint method for image/gif
+ /**
+ * Service endpoint method that processes inlined and optimized values.
*/
- public Object sendMimeImageGIF(String message, Object xoppart) throws RemoteException
+ public DataHandler sendMimeImageJPEG(String message, DataHandler xoppart) throws RemoteException
{
- StringBuffer buffer = new StringBuffer();
+ String expContentType = message.equals("MTOM disabled request") ? "application/octet-stream" : "image/jpeg";
- validateStringMessage(buffer, message);
-
- String expContentType = "image/gif";
- validateAttachmentPart(buffer, expContentType, xoppart);
-
+ if(! xoppart.getContentType().equals(expContentType))
+ throw new IllegalArgumentException("Wrong content-type: expected "+expContentType+", but was " + xoppart.getContentType());
return xoppart;
}
- /** Service endpoint method for image/jpeg
+ /**
+ * Service endpoint method for text/plain
*/
- public Object sendMimeImageJPEG(String message, Image xoppart) throws RemoteException
- {
- StringBuffer buffer = new StringBuffer();
- String expContentType = "image/jpeg";
- validateAttachmentPart(buffer, expContentType, xoppart);
- return xoppart;
- }
-
- /** Service endpoint method for text/plain
- */
public String sendMimeTextPlain(String message, String xoppart) throws RemoteException
{
- StringBuffer buffer = new StringBuffer();
-
- validateStringMessage(buffer, message);
-
- String expContentType = "text/plain";
- validateAttachmentPart(buffer, expContentType, xoppart);
-
- String resultStr = getResultStr(buffer, expContentType);
- return resultStr;
- }
-
- /** Service endpoint method for multipart/*
- */
- public MimeMultipart sendMimeMultipart(String message, MimeMultipart xoppart) throws RemoteException
- {
- StringBuffer buffer = new StringBuffer();
-
- validateStringMessage(buffer, message);
-
- String expContentType = "multipart/*";
- validateAttachmentPart(buffer, expContentType, xoppart);
-
return xoppart;
}
- /** Service endpoint method for text/xml
+ /**
+ * Service endpoint method for text/xml
*/
- public Object sendMimeTextXML(String message, Object xoppart) throws RemoteException
+ public Source sendMimeTextXML(String message, DataHandler xoppart) throws RemoteException
{
- StringBuffer buffer = new StringBuffer();
-
- validateStringMessage(buffer, message);
-
- String expContentType = "text/xml";
- validateAttachmentPart(buffer, expContentType, xoppart);
-
- return xoppart;
- }
-
- /** Service endpoint method for application/xml
- */
- public Object sendMimeApplicationXML(String message, Source xoppart) throws RemoteException
- {
- StringBuffer buffer = new StringBuffer();
-
- validateStringMessage(buffer, message);
-
- String expContentType = "application/xml";
- validateAttachmentPart(buffer, expContentType, xoppart);
-
- return xoppart;
- }
-
- public DataHandler sendOctets(String message, DataHandler xoppart) throws RemoteException {
- StringBuffer buffer = new StringBuffer();
- validateStringMessage(buffer, message);
-
- String expContentType = "application/octet-stream";
- validateAttachmentPart(buffer, expContentType, xoppart);
-
- return xoppart;
- }
-
- private void validateStringMessage(StringBuffer buffer, String message)
- {
- if ("Some text message".equals(message) == false)
- buffer.append("[message=" + message + "]");
- }
-
- private void validateAttachmentPart(StringBuffer buffer, String expContentType, Object xoppart)
- {
- if(null==xoppart)
- throw new IllegalArgumentException("XOP Parameter was null");
- SOAPMessageContext msgContext = (SOAPMessageContext)context.getMessageContext();
- SOAPMessage soapMessage = msgContext.getMessage();
-
- Iterator attachments = soapMessage.getAttachments();
- if (attachments.hasNext())
+ if(! xoppart.getContentType().equals("text/xml"))
+ throw new IllegalArgumentException("Wrong content-type: expected 'text/xml', but was " + xoppart.getContentType());
+ try
{
- AttachmentPart ap = (AttachmentPart)attachments.next();
- String contentType = ap.getContentType();
-
- if (expContentType.equals("multipart/*"))
- {
- if (contentType.startsWith("multipart/") == false)
- buffer.append("[contentType=" + contentType + "]");
- }
- else if (expContentType.equals("text/xml"))
- {
- if (contentType.equals("text/xml") == false && contentType.equals("application/xml") == false)
- buffer.append("[contentType=" + contentType + "]");
- }
- else
- {
- if (contentType.equals(expContentType) == false)
- buffer.append("[contentType=" + contentType + "]");
- }
- validateSinglePart(buffer, expContentType, ap);
+ Source payload = (Source)xoppart.getContent();
+ return payload;
}
- else
+ catch (IOException e)
{
- buffer.append("[no attachments]");
+ throw new WSException(e.getMessage());
}
-
- validateSinglePart(buffer, expContentType, xoppart);
}
- private void validateSinglePart(StringBuffer buffer, String contentType, Object content)
+ /**
+ * Service endpoint method for application/xml
+ */
+ public DataHandler sendMimeApplicationXML(String message, Source xoppart) throws RemoteException
{
- try
- {
- if (content instanceof AttachmentPart)
- content = ((AttachmentPart)content).getContent();
-
- if (contentType.equals("image/gif") || contentType.equals("image/jpeg"))
- {
- if ((content instanceof Image) == false)
- buffer.append("[content=" + content + "]");
- }
- else if (contentType.equals("text/plain"))
- {
- if ((content instanceof String) == false)
- buffer.append("[content=" + content + "]");
- }
- else if (contentType.startsWith("multipart/"))
- {
- if ((content instanceof MimeMultipart) == false)
- {
- buffer.append("[content=" + content + "]");
- }
- else
- {
- MimeMultipart mmp = (MimeMultipart)content;
-
- int mmpCount = mmp.getCount();
- if (mmpCount < 1)
- buffer.append("[count=" + mmpCount + "]");
-
- for (int i = 0; i < mmpCount; i++)
- {
- BodyPart bp = mmp.getBodyPart(i);
- String bpct = bp.getContentType();
- Object bpc = bp.getContent();
- validateSinglePart(buffer, bpct, bpc);
- }
- }
- }
- else if (contentType.equals("text/xml") || contentType.equals("application/xml"))
- {
- if ((content instanceof Source) == false)
- buffer.append("[content=" + content + "]");
- }
- else if (contentType.equals("application/octet-stream") )
- {
- if ((content instanceof DataHandler) == false)
- buffer.append("[content=" + content + "]");
- }
- else
- {
- throw new IllegalArgumentException("Unsupported mime type: " + contentType);
- }
- }
- catch (Exception e)
- {
- buffer.append("[" + e + "]");
- }
+ return new DataHandler(xoppart, "application/xml");
}
- private String getResultStr(StringBuffer buffer, String expContentType)
- {
- String retStr = (buffer.length() == 0 ? "[pass]" : buffer.toString());
- System.out.println(expContentType + ": " + retStr);
- return retStr;
+ public DataHandler sendOctets(String message, DataHandler xoppart) throws RemoteException {
+ if(! xoppart.getContentType().equals("application/octet-stream"))
+ throw new IllegalArgumentException("Wrong content-type: expected 'application/octet-stream', but was " + xoppart.getContentType());
+ return xoppart;
}
- // ServiceLifecycle *******************************************************************************************
-
public void init(Object context) throws ServiceException
{
this.context = (ServletEndpointContext)context;
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/soap/SOAPContentElementTestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/soap/SOAPContentElementTestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/soap/SOAPContentElementTestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -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/src/test/java/org/jboss/test/ws/soap/SOAPHeaderElementTestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/soap/SOAPHeaderElementTestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/soap/SOAPHeaderElementTestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -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/src/test/java/org/jboss/test/ws/soap/SOAPHeaderTestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/soap/SOAPHeaderTestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/soap/SOAPHeaderTestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -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/src/test/java/org/jboss/test/ws/wsse/MicrosoftInteropTestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/wsse/MicrosoftInteropTestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/wsse/MicrosoftInteropTestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -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,9 @@
*/
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/src/test/java/org/jboss/test/ws/wsse/RoundTripTestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/wsse/RoundTripTestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/wsse/RoundTripTestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -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,9 @@
*/
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
{
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/wsse/SimpleSignEncryptTestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/wsse/SimpleSignEncryptTestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/wsse/SimpleSignEncryptTestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -23,6 +23,7 @@
import javax.naming.InitialContext;
import javax.xml.rpc.Service;
+import javax.xml.rpc.Stub;
import junit.framework.Test;
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/InlineHandler.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/InlineHandler.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/InlineHandler.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -1,17 +1,16 @@
package org.jboss.test.ws.xop.doclit;
import org.jboss.logging.Logger;
-import org.jboss.util.xml.DOMWriter;
import org.jboss.ws.soap.NameImpl;
import javax.xml.namespace.QName;
import javax.xml.rpc.handler.GenericHandler;
import javax.xml.rpc.handler.MessageContext;
import javax.xml.rpc.handler.soap.SOAPMessageContext;
-import javax.xml.soap.SOAPMessage;
-import javax.xml.soap.Name;
-import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPMessage;
+import java.io.ByteArrayOutputStream;
/**
* @author Heiko Braun <heiko.braun at jboss.com>
@@ -26,7 +25,7 @@
}
public boolean handleRequest(MessageContext messageContext) {
- //dumpMessage(messageContext);
+ dumpMessage(messageContext);
return true;
}
@@ -41,12 +40,9 @@
SOAPMessage soapMessage = ((SOAPMessageContext)messageContext).getMessage();
SOAPBody soapBody = soapMessage.getSOAPBody();
- String msg = DOMWriter.printNode(soapBody, true);
- log.info(msg);
-
SOAPElement response = (SOAPElement) soapBody.getChildElements().next();
- SOAPElement xopElement = (SOAPElement)response.getChildElements(new NameImpl("imagejpeg")).next();
- messageContext.setProperty("xop.expected", xopElement.getFirstChild().getNodeValue());
+ SOAPElement xopElement = (SOAPElement)response.getChildElements(new NameImpl("xopContent")).next();
+ messageContext.setProperty("xop.inline.value", xopElement.getFirstChild().getNodeValue());
}
catch (Exception e)
{
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/PingMsg.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/PingMsg.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/PingMsg.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -7,30 +7,29 @@
package org.jboss.test.ws.xop.doclit;
-import java.awt.*;
+import javax.activation.DataHandler;
-
-public class PingMsg
+public class PingMsg
{
protected String message;
- protected Image imagejpeg;
+ protected DataHandler xopContent;
public PingMsg(){}
- public PingMsg(String message, Image img){
+ public PingMsg(String message, DataHandler dataHandler){
this.message=message;
- this.imagejpeg = img;
+ this.xopContent = dataHandler;
}
public java.lang.String getMessage() { return message ;}
public void setMessage(java.lang.String message){ this.message=message; }
- public Image getImagejpeg() {
- return imagejpeg;
+ public DataHandler getXopContent() {
+ return xopContent;
}
- public void setImagejpeg(Image imagejpeg) {
- this.imagejpeg = imagejpeg;
+ public void setXopContent(DataHandler xopContent) {
+ this.xopContent = xopContent;
}
}
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/PingMsgResponse.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/PingMsgResponse.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/PingMsgResponse.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -7,25 +7,25 @@
package org.jboss.test.ws.xop.doclit;
-import java.awt.*;
+import javax.activation.DataHandler;
public class PingMsgResponse
{
- protected Image imagejpeg;
+ protected DataHandler xopContent;
public PingMsgResponse(){
}
- public PingMsgResponse(Image image) {
- this.imagejpeg = image;
+ public PingMsgResponse(DataHandler dataHandler) {
+ this.xopContent = dataHandler;
}
- public Image getImagejpeg() {
- return imagejpeg;
+ public DataHandler getXopContent() {
+ return xopContent;
}
- public void setImagejpeg(Image imagejpeg) {
- this.imagejpeg = imagejpeg;
+ public void setXopContent(DataHandler xopContent) {
+ this.xopContent = xopContent;
}
}
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/TestServiceImpl.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/TestServiceImpl.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/TestServiceImpl.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -1,7 +1,5 @@
package org.jboss.test.ws.xop.doclit;
-import org.jboss.ws.WSException;
-
import java.rmi.RemoteException;
/**
@@ -10,6 +8,6 @@
*/
public class TestServiceImpl implements TestService_PortType {
public PingMsgResponse ping(PingMsg pingMsg) throws RemoteException {
- return new PingMsgResponse(pingMsg.getImagejpeg());
+ return new PingMsgResponse(pingMsg.getXopContent());
}
}
Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/XOPElementDoclitTestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/XOPElementDoclitTestCase.java 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/xop/doclit/XOPElementDoclitTestCase.java 2006-08-16 10:23:13 UTC (rev 753)
@@ -27,15 +27,13 @@
import org.jboss.test.ws.JBossWSTest;
import org.jboss.test.ws.JBossWSTestSetup;
import org.jboss.xb.binding.SimpleTypeBindings;
+import org.jboss.ws.jaxrpc.StubExt;
import javax.activation.DataHandler;
import javax.naming.InitialContext;
import javax.xml.rpc.Service;
import javax.xml.rpc.Stub;
-import java.awt.*;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.net.URL;
+import java.io.*;
/**
*
@@ -60,50 +58,58 @@
Service service = (Service)iniCtx.lookup("java:comp/env/service/TestService");
port = (TestService_PortType)service.getPort(TestService_PortType.class);
}
+
+ //((Stub)port)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8081/jbossws-xop-doclit");
}
- public void testPingMsg() throws Exception {
- URL url = new File("resources/samples/mtom/attach.jpeg").toURL();
+ public void testPingMsgInlined() throws Exception {
- // On Linux the X11 server must be installed properly to create images successfully.
- // If the image cannot be created in the test VM, we assume it cannot be done on the
- // server either, so we just skip the test
- Image image = null;
- try
- {
- image = Toolkit.getDefaultToolkit().createImage(url);
- }
- catch (Throwable th)
- {
- //log.warn("Cannot create Image: " + th);
- }
+ DataHandler dh = new DataHandler("Another plain text attachment", "text/plain");
+ PingMsgResponse value = port.ping(new PingMsg("Some text message", dh));
+ assertNotNull("Return value was null", value);
+ assertNotNull("Returned xopContent was null", value.getXopContent());
+ assertTrue("Wrong java type returned", (value.getXopContent()) instanceof DataHandler);
- if (image != null)
- {
- PingMsgResponse value = port.ping(new PingMsg("Some text message", image));
- assertNotNull("Return value was null",value);
- assertNotNull("Return image was null", value.getImagejpeg());
+ // check inline values
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ dh.writeTo(bout);
- // check inline values
+ byte[] imageBytes = bout.toByteArray();
+ String expected = SimpleTypeBindings.marshalBase64(imageBytes);
- System.out.println("FIXME: JBWS-660");
+ String was = (String)((Stub) port)._getProperty("xop.inline.value");
+ assertNotNull("base64 value not found", was);
+ //assertEquals(expected, was);
+ }
- /*
- DataHandler dh = new DataHandler(url);
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- dh.writeTo(bout);
+ /*public void testMTOMDisabled() throws Exception {
- byte[] imageBytes = bout.toByteArray();
- String expected = SimpleTypeBindings.marshalBase64(imageBytes);
+ byte[] bytes = getBytesFromFile(new File("resources/samples/mtom/attach.jpeg"));
+ DataHandler dh = new DataHandler(new ByteArrayInputStream(bytes), "application/octet-stream");
- String was = (String)((Stub) port)._getProperty("xop.expected");
- assertNotNull("bas64 value not found", was);
- assertEquals(expected, was);
- */
+ // force disable MTOM
+ ((Stub)port)._setProperty(StubExt.PROPERTY_MTOM_ENABLED, "false");
+
+ PingMsgResponse value = port.ping(new PingMsg("Some text message", dh));
+ assertNotNull("Return value was null",value);
+ assertNotNull("Return image was null", value.getXopContent());
+ } */
+
+ public static byte[] getBytesFromFile(File file) throws IOException {
+ InputStream is = new FileInputStream(file);
+
+ long length = file.length();
+ byte[] bytes = new byte[(int)length];
+
+ int offset = 0;
+ int numRead = 0;
+ while (offset < bytes.length
+ && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
+ offset += numRead;
}
- //System.out.println("FIXME: JBXB-62");
-
+ is.close();
+ return bytes;
}
}
Modified: branches/jbossws-1.0/src/test/resources/samples-override/mtom/WEB-INF/jaxrpc-mapping.xml
===================================================================
--- branches/jbossws-1.0/src/test/resources/samples-override/mtom/WEB-INF/jaxrpc-mapping.xml 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/resources/samples-override/mtom/WEB-INF/jaxrpc-mapping.xml 2006-08-16 10:23:13 UTC (rev 753)
@@ -19,37 +19,6 @@
<wsdl-binding xmlns:bindingNS="http://org.jboss.ws/samples/mtom">bindingNS:XOPTestBinding</wsdl-binding>
<service-endpoint-method-mapping>
- <java-method-name>sendMimeImageGIF</java-method-name>
- <wsdl-operation>sendMimeImageGIF</wsdl-operation>
- <method-param-parts-mapping>
- <param-position>0</param-position>
- <param-type>java.lang.String</param-type>
- <wsdl-message-mapping>
- <wsdl-message xmlns:wsdlMsgNS="http://org.jboss.ws/samples/mtom">wsdlMsgNS:XOPTest_sendMimeImageGIF</wsdl-message>
- <wsdl-message-part-name>message</wsdl-message-part-name>
- <parameter-mode>IN</parameter-mode>
- </wsdl-message-mapping>
- </method-param-parts-mapping>
-
- <!-- BEGIN manual modification -->
- <method-param-parts-mapping>
- <param-position>1</param-position>
- <param-type>java.awt.Image</param-type>
- <wsdl-message-mapping>
- <wsdl-message xmlns:wsdlMsgNS="http://org.jboss.ws/samples/mtom">wsdlMsgNS:XOPTest_sendMimeImageGIF</wsdl-message>
- <wsdl-message-part-name>xoppart</wsdl-message-part-name>
- <parameter-mode>IN</parameter-mode>
- </wsdl-message-mapping>
- </method-param-parts-mapping>
- <!-- END manual modification -->
-
- <wsdl-return-value-mapping>
- <method-return-value>java.awt.Image</method-return-value>
- <wsdl-message xmlns:wsdlMsgNS="http://org.jboss.ws/samples/mtom">wsdlMsgNS:XOPTest_sendMimeImageGIFResponse</wsdl-message>
- <wsdl-message-part-name>result</wsdl-message-part-name>
- </wsdl-return-value-mapping>
- </service-endpoint-method-mapping>
- <service-endpoint-method-mapping>
<java-method-name>sendMimeImageJPEG</java-method-name>
<wsdl-operation>sendMimeImageJPEG</wsdl-operation>
<method-param-parts-mapping>
@@ -65,7 +34,7 @@
<!-- BEGIN manual modification -->
<method-param-parts-mapping>
<param-position>1</param-position>
- <param-type>java.awt.Image</param-type>
+ <param-type>javax.activation.DataHandler</param-type>
<wsdl-message-mapping>
<wsdl-message xmlns:wsdlMsgNS="http://org.jboss.ws/samples/mtom">wsdlMsgNS:XOPTest_sendMimeImageJPEG</wsdl-message>
<wsdl-message-part-name>xoppart</wsdl-message-part-name>
@@ -75,11 +44,12 @@
<!-- END manual modification -->
<wsdl-return-value-mapping>
- <method-return-value>java.awt.Image</method-return-value>
+ <method-return-value>javax.activation.DataHandler</method-return-value>
<wsdl-message xmlns:wsdlMsgNS="http://org.jboss.ws/samples/mtom">wsdlMsgNS:XOPTest_sendMimeImageJPEGResponse</wsdl-message>
<wsdl-message-part-name>result</wsdl-message-part-name>
</wsdl-return-value-mapping>
</service-endpoint-method-mapping>
+
<service-endpoint-method-mapping>
<java-method-name>sendMimeTextPlain</java-method-name>
<wsdl-operation>sendMimeTextPlain</wsdl-operation>
@@ -111,37 +81,7 @@
<wsdl-message-part-name>result</wsdl-message-part-name>
</wsdl-return-value-mapping>
</service-endpoint-method-mapping>
- <service-endpoint-method-mapping>
- <java-method-name>sendMimeMultipart</java-method-name>
- <wsdl-operation>sendMimeMultipart</wsdl-operation>
- <method-param-parts-mapping>
- <param-position>0</param-position>
- <param-type>java.lang.String</param-type>
- <wsdl-message-mapping>
- <wsdl-message xmlns:wsdlMsgNS="http://org.jboss.ws/samples/mtom">wsdlMsgNS:XOPTest_sendMimeMultipart</wsdl-message>
- <wsdl-message-part-name>message</wsdl-message-part-name>
- <parameter-mode>IN</parameter-mode>
- </wsdl-message-mapping>
- </method-param-parts-mapping>
- <!-- BEGIN manual modification -->
- <method-param-parts-mapping>
- <param-position>1</param-position>
- <param-type>javax.mail.internet.MimeMultipart</param-type>
- <wsdl-message-mapping>
- <wsdl-message xmlns:wsdlMsgNS="http://org.jboss.ws/samples/mtom">wsdlMsgNS:XOPTest_sendMimeMultipart</wsdl-message>
- <wsdl-message-part-name>xoppart</wsdl-message-part-name>
- <parameter-mode>IN</parameter-mode>
- </wsdl-message-mapping>
- </method-param-parts-mapping>
- <!-- END manual modification -->
-
- <wsdl-return-value-mapping>
- <method-return-value>javax.mail.internet.MimeMultipart</method-return-value>
- <wsdl-message xmlns:wsdlMsgNS="http://org.jboss.ws/samples/mtom">wsdlMsgNS:XOPTest_sendMimeMultipartResponse</wsdl-message>
- <wsdl-message-part-name>result</wsdl-message-part-name>
- </wsdl-return-value-mapping>
- </service-endpoint-method-mapping>
<service-endpoint-method-mapping>
<java-method-name>sendMimeTextXML</java-method-name>
<wsdl-operation>sendMimeTextXML</wsdl-operation>
@@ -158,7 +98,7 @@
<!-- BEGIN manual modification -->
<method-param-parts-mapping>
<param-position>1</param-position>
- <param-type>javax.xml.transform.Source</param-type>
+ <param-type>javax.activation.DataHandler</param-type>
<wsdl-message-mapping>
<wsdl-message xmlns:wsdlMsgNS="http://org.jboss.ws/samples/mtom">wsdlMsgNS:XOPTest_sendMimeTextXML</wsdl-message>
<wsdl-message-part-name>xoppart</wsdl-message-part-name>
@@ -173,6 +113,7 @@
<wsdl-message-part-name>result</wsdl-message-part-name>
</wsdl-return-value-mapping>
</service-endpoint-method-mapping>
+
<service-endpoint-method-mapping>
<java-method-name>sendMimeApplicationXML</java-method-name>
<wsdl-operation>sendMimeApplicationXML</wsdl-operation>
@@ -199,7 +140,7 @@
<!-- END manual modification -->
<wsdl-return-value-mapping>
- <method-return-value>javax.xml.transform.Source</method-return-value>
+ <method-return-value>javax.activation.DataHandler</method-return-value>
<wsdl-message xmlns:wsdlMsgNS="http://org.jboss.ws/samples/mtom">wsdlMsgNS:XOPTest_sendMimeApplicationXMLResponse</wsdl-message>
<wsdl-message-part-name>result</wsdl-message-part-name>
</wsdl-return-value-mapping>
Modified: branches/jbossws-1.0/src/test/resources/samples-override/mtom/WEB-INF/wsdl/TestService.wsdl
===================================================================
--- branches/jbossws-1.0/src/test/resources/samples-override/mtom/WEB-INF/wsdl/TestService.wsdl 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/resources/samples-override/mtom/WEB-INF/wsdl/TestService.wsdl 2006-08-16 10:23:13 UTC (rev 753)
@@ -13,10 +13,8 @@
<import schemaLocation="http://www.w3.org/2005/05/xmlmime" namespace="http://www.w3.org/2005/05/xmlmime"/>
- <element name="imagegif" xmime:contentType="image/gif" type="xmime:base64Binary"/>
<element name="imagejpeg" xmime:contentType="image/jpeg" type="xmime:base64Binary"/>
<element name="textplain" xmime:contentType="text/plain" type="xmime:base64Binary"/>
- <element name="multipart" xmime:contentType="multipart/*" type="xmime:base64Binary"/>
<element name="textxml" xmime:contentType="text/xml" type="xmime:base64Binary"/>
<element name="applxml" xmime:contentType="application/xml" type="xmime:base64Binary"/>
<element name="octets" xmime:contentType="application/octet-stream" type="xmime:base64Binary"/>
@@ -31,14 +29,6 @@
</schema>
</types>
- <message name="XOPTest_sendMimeImageGIF">
- <part name="message" type="xsd:string"/>
- <part name="xoppart" element="tns:imagegif"/>
- </message>
- <message name="XOPTest_sendMimeImageGIFResponse">
- <part name="result" element="tns:imagegif"/>
- </message>
-
<message name="XOPTest_sendMimeImageJPEG">
<part name="message" type="xsd:string"/>
<part name="xoppart" element="tns:imagejpeg"/>
@@ -53,13 +43,6 @@
<message name="XOPTest_sendMimeTextPlainResponse">
<part name="result" element="tns:textplain"/>
</message>
- <message name="XOPTest_sendMimeMultipart">
- <part name="message" type="xsd:string"/>
- <part name="xoppart" element="tns:multipart"/>
- </message>
- <message name="XOPTest_sendMimeMultipartResponse">
- <part name="result" element="tns:multipart"/>
- </message>
<message name="XOPTest_sendMimeTextXML">
<part name="message" type="xsd:string"/>
<part name="xoppart" element="tns:textxml"/>
@@ -84,10 +67,6 @@
</message>
<portType name="XOPTest">
- <operation name="sendMimeImageGIF">
- <input message="tns:XOPTest_sendMimeImageGIF"/>
- <output message="tns:XOPTest_sendMimeImageGIFResponse"/>
- </operation>
<operation name="sendMimeImageJPEG">
<input message="tns:XOPTest_sendMimeImageJPEG"/>
<output message="tns:XOPTest_sendMimeImageJPEGResponse"/>
@@ -96,10 +75,6 @@
<input message="tns:XOPTest_sendMimeTextPlain"/>
<output message="tns:XOPTest_sendMimeTextPlainResponse"/>
</operation>
- <operation name="sendMimeMultipart">
- <input message="tns:XOPTest_sendMimeMultipart"/>
- <output message="tns:XOPTest_sendMimeMultipartResponse"/>
- </operation>
<operation name="sendMimeTextXML">
<input message="tns:XOPTest_sendMimeTextXML"/>
<output message="tns:XOPTest_sendMimeTextXMLResponse"/>
@@ -117,15 +92,6 @@
<binding name="XOPTestBinding" type="tns:XOPTest">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
- <operation name="sendMimeImageGIF">
- <soap:operation soapAction=""/>
- <input>
- <soap:body use="literal" namespace="http://org.jboss.ws/samples/mtom"/>
- </input>
- <output>
- <soap:body use="literal" namespace="http://org.jboss.ws/samples/mtom"/>
- </output>
- </operation>
<operation name="sendMimeImageJPEG">
<soap:operation soapAction=""/>
<input>
@@ -143,16 +109,7 @@
<output>
<soap:body use="literal" namespace="http://org.jboss.ws/samples/mtom"/>
</output>
- </operation>
- <operation name="sendMimeMultipart">
- <soap:operation soapAction=""/>
- <input>
- <soap:body use="literal" namespace="http://org.jboss.ws/samples/mtom"/>
- </input>
- <output>
- <soap:body use="literal" namespace="http://org.jboss.ws/samples/mtom"/>
- </output>
- </operation>
+ </operation>
<operation name="sendMimeTextXML">
<soap:operation soapAction=""/>
<input>
Modified: branches/jbossws-1.0/src/test/resources/xop/doclit/WEB-INF/jaxrpc-mapping.xml
===================================================================
--- branches/jbossws-1.0/src/test/resources/xop/doclit/WEB-INF/jaxrpc-mapping.xml 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/resources/xop/doclit/WEB-INF/jaxrpc-mapping.xml 2006-08-16 10:23:13 UTC (rev 753)
@@ -3,12 +3,7 @@
<package-type>org.jboss.test.ws.xop.doclit</package-type>
<namespaceURI>http://jboss.org/test/ws/xop/doclit</namespaceURI>
</package-mapping>
-
- <!--java-xml-type-mapping>
- <java-type>org.jboss.test.ws.xop.doclit.PingMsg</java-type>
- <root-type-qname xmlns:typeNS='http://jboss.org/test/ws/xop/doclit'>typeNS:PingMsg</root-type-qname>
- <qname-scope>element</qname-scope>
- </java-xml-type-mapping-->
+
<java-xml-type-mapping>
<java-type>org.jboss.test.ws.xop.doclit.PingMsg</java-type>
<anonymous-type-qname xmlns:typeNS='http://jboss.org/test/ws/xop/doclit'>typeNS:>PingMsg</anonymous-type-qname>
@@ -18,23 +13,18 @@
<xml-element-name>message</xml-element-name>
</variable-mapping>
<variable-mapping>
- <java-variable-name>imagejpeg</java-variable-name>
- <xml-element-name>imagejpeg</xml-element-name>
+ <java-variable-name>xopContent</java-variable-name>
+ <xml-element-name>xopContent</xml-element-name>
</variable-mapping>
</java-xml-type-mapping>
- <!--java-xml-type-mapping>
- <java-type>org.jboss.test.ws.xop.doclit.PingMsgResponse</java-type>
- <root-type-qname xmlns:typeNS='http://jboss.org/test/ws/xop/doclit'>typeNS:PingMsgResponse</root-type-qname>
- <qname-scope>element</qname-scope>
- </java-xml-type-mapping-->
<java-xml-type-mapping>
<java-type>org.jboss.test.ws.xop.doclit.PingMsgResponse</java-type>
<anonymous-type-qname xmlns:typeNS='http://jboss.org/test/ws/xop/doclit'>typeNS:>PingMsgResponse</anonymous-type-qname>
<qname-scope>complexType</qname-scope>
<variable-mapping>
- <java-variable-name>imagejpeg</java-variable-name>
- <xml-element-name>imagejpeg</xml-element-name>
+ <java-variable-name>xopContent</java-variable-name>
+ <xml-element-name>xopContent</xml-element-name>
</variable-mapping>
</java-xml-type-mapping>
Modified: branches/jbossws-1.0/src/test/resources/xop/doclit/WEB-INF/wsdl/TestService.wsdl
===================================================================
--- branches/jbossws-1.0/src/test/resources/xop/doclit/WEB-INF/wsdl/TestService.wsdl 2006-08-16 08:49:47 UTC (rev 752)
+++ branches/jbossws-1.0/src/test/resources/xop/doclit/WEB-INF/wsdl/TestService.wsdl 2006-08-16 10:23:13 UTC (rev 753)
@@ -20,14 +20,14 @@
<s:complexType>
<s:sequence>
<s:element name="message" minOccurs="0" maxOccurs="1" type="s:string" />
- <s:element name="imagejpeg" xmime:expectedContentTypes="image/jpeg" type="xmime:base64Binary"/>
+ <s:element name="xopContent" xmime:expectedContentTypes="text/plain" type="xmime:base64Binary"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="PingMsgResponse">
<s:complexType>
<s:sequence>
- <s:element name="imagejpeg" xmime:expectedContentTypes="image/jpeg" type="xmime:base64Binary"/>
+ <s:element name="xopContent" xmime:expectedContentTypes="text/plain" type="xmime:base64Binary"/>
</s:sequence>
</s:complexType>
</s:element>
More information about the jboss-svn-commits
mailing list