[jboss-svn-commits] JBossWS SVN: r1119 - in trunk: . src/main/java/org/jboss/ws/binding src/main/java/org/jboss/ws/common src/main/java/org/jboss/ws/deployment src/main/java/org/jboss/ws/jaxrpc src/main/java/org/jboss/ws/jaxrpc/encoding src/main/java/org/jboss/ws/jaxrpc/handler src/main/java/org/jboss/ws/jbossxb src/main/java/org/jboss/ws/metadata/wsdl src/main/java/org/jboss/ws/soap src/main/java/org/jboss/ws/xop src/main/resources/jbossws.sar/META-INF src/test src/test/ant src/test/java/org/jboss/test/ws/interop/microsoft/mtom/utf8 src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit src/test/resources/jaxrpc/marshall-rpclit/WEB-INF src/test/resources/jaxrpc/outparam/WEB-INF src/test/resources/jaxrpc/samples/holder/WEB-INF src/test/resources/jaxrpc/samples-override/mtom/WEB-INF src/test/resources/jaxrpc/samples-override/mtom/WEB-INF/wsdl src/test/resources/jaxrpc/xop/doclit/META-INF src/test/resources/jaxrpc/xop/doclit/WEB-INF src/tes! t/resources/jaxrpc/xop/doclit/WEB-INF/wsdl

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Oct 2 09:05:00 EDT 2006


Author: heiko.braun at jboss.com
Date: 2006-10-02 09:04:13 -0400 (Mon, 02 Oct 2006)
New Revision: 1119

Modified:
   trunk/build.xml
   trunk/src/main/java/org/jboss/ws/binding/SerializerSupport.java
   trunk/src/main/java/org/jboss/ws/common/CommonClient.java
   trunk/src/main/java/org/jboss/ws/common/CommonSOAPBinding.java
   trunk/src/main/java/org/jboss/ws/deployment/JSR109MetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/jaxrpc/CallImpl.java
   trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/Base64Deserializer.java
   trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/Base64Serializer.java
   trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/CalendarSerializer.java
   trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/DateSerializer.java
   trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/HexSerializer.java
   trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/NullValueSerializer.java
   trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/QNameSerializer.java
   trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/SimpleSerializer.java
   trunk/src/main/java/org/jboss/ws/jaxrpc/handler/HandlerDelegateJAXRPC.java
   trunk/src/main/java/org/jboss/ws/jbossxb/SchemaBindingBuilder.java
   trunk/src/main/java/org/jboss/ws/metadata/wsdl/WSDL11Reader.java
   trunk/src/main/java/org/jboss/ws/soap/SOAPContentElement.java
   trunk/src/main/java/org/jboss/ws/soap/SOAPElementImpl.java
   trunk/src/main/java/org/jboss/ws/xop/XOPContext.java
   trunk/src/main/java/org/jboss/ws/xop/XOPMarshallerImpl.java
   trunk/src/main/java/org/jboss/ws/xop/XOPScanner.java
   trunk/src/main/java/org/jboss/ws/xop/XOPUnmarshallerImpl.java
   trunk/src/main/resources/jbossws.sar/META-INF/standard-jaxrpc-client-config.xml
   trunk/src/main/resources/jbossws.sar/META-INF/standard-jaxrpc-endpoint-config.xml
   trunk/src/test/ant/build-interop-jars.xml
   trunk/src/test/ant/build-jars-jaxrpc.xml
   trunk/src/test/build.xml
   trunk/src/test/java/org/jboss/test/ws/interop/microsoft/mtom/utf8/MTOMTestCase.java
   trunk/src/test/java/org/jboss/test/ws/interop/microsoft/mtom/utf8/TestService.java
   trunk/src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom/XOPRpcTestCase.java
   trunk/src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom/XOPTest.java
   trunk/src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom/XOPTestImpl.java
   trunk/src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit/InlineHandler.java
   trunk/src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit/TestServiceImpl.java
   trunk/src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit/TestService_PortType.java
   trunk/src/test/resources/jaxrpc/marshall-rpclit/WEB-INF/webservices.xml
   trunk/src/test/resources/jaxrpc/outparam/WEB-INF/web.xml
   trunk/src/test/resources/jaxrpc/samples-override/mtom/WEB-INF/jaxrpc-mapping.xml
   trunk/src/test/resources/jaxrpc/samples-override/mtom/WEB-INF/wsdl/TestService.wsdl
   trunk/src/test/resources/jaxrpc/samples/holder/WEB-INF/web.xml
   trunk/src/test/resources/jaxrpc/xop/doclit/META-INF/application-client.xml
   trunk/src/test/resources/jaxrpc/xop/doclit/META-INF/jboss-client.xml
   trunk/src/test/resources/jaxrpc/xop/doclit/WEB-INF/jaxrpc-mapping.xml
   trunk/src/test/resources/jaxrpc/xop/doclit/WEB-INF/webservices.xml
   trunk/src/test/resources/jaxrpc/xop/doclit/WEB-INF/wsdl/TestService.wsdl
Log:
merged MTOM revamp from branch 1.0

Modified: trunk/build.xml
===================================================================
--- trunk/build.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/build.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -513,6 +513,9 @@
 
   <!-- Deploy to jboss -->
   <target name="deploy-to-server">
+    <echo>Replacing jbossxb under ${jboss.deploy.home}/client and /lib</echo>    
+    <copy todir="${jboss.deploy.home}/client" file="${thirdparty.dir}/jboss-xml-binding.jar" overwrite="true"/>
+    <copy todir="${jboss.deploy.home}/lib" file="${thirdparty.dir}/jboss-xml-binding.jar" overwrite="true"/>
     <copy todir="${jboss.deploy.home}/client" file="${build.lib.dir}/${jbossws}-client.jar" overwrite="true"/>
     <delete dir="${jboss.deploy.home}/server/${jboss.server.instance}/deploy/${jbossws}.sar"/>
     <mkdir dir="${jboss.deploy.home}/server/${jboss.server.instance}/deploy/${jbossws}.sar"/>

Modified: trunk/src/main/java/org/jboss/ws/binding/SerializerSupport.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/binding/SerializerSupport.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/binding/SerializerSupport.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -54,7 +54,7 @@
 
    /** Wrap the value string in a XML fragment with the given name
     */
-   protected String wrapValueStr(QName xmlName, String valueStr, NamespaceRegistry nsRegistry, NamedNodeMap attributes)
+   protected String wrapValueStr(QName xmlName, String valueStr, NamespaceRegistry nsRegistry, NamedNodeMap attributes, boolean normalize)
    {
       String nsURI = xmlName.getNamespaceURI();
       String localPart = xmlName.getLocalPart();
@@ -98,7 +98,8 @@
       }
       else
       {
-         valueStr = normalize(valueStr);
+         if(normalize)
+            valueStr = normalize(valueStr);
          xmlFragment = "<" + elName + nsAttr + ">" + valueStr + "</" + elName + ">";
       }
 

Modified: trunk/src/main/java/org/jboss/ws/common/CommonClient.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/common/CommonClient.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/common/CommonClient.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -156,7 +156,7 @@
 
    // Get the OperationMetaData for the given operation name
    // If it does not exist, it will be created
-   private OperationMetaData getOperationMetaData(QName opName)
+   public OperationMetaData getOperationMetaData(QName opName)
    {
       if (opName == null)
          throw new IllegalArgumentException("Cannot get OperationMetaData for null");

Modified: trunk/src/main/java/org/jboss/ws/common/CommonSOAPBinding.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/common/CommonSOAPBinding.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/common/CommonSOAPBinding.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -49,6 +49,7 @@
 import org.jboss.logging.Logger;
 import org.jboss.ws.Constants;
 import org.jboss.ws.WSException;
+import org.jboss.ws.xop.XOPContext;
 import org.jboss.ws.binding.BindingException;
 import org.jboss.ws.binding.EndpointInvocation;
 import org.jboss.ws.binding.UnboundHeader;
@@ -768,8 +769,9 @@
          contentElement.addNamespaceDeclaration(Constants.PREFIX_SOAP11_ENC, Constants.URI_SOAP11_ENC);
       }
 
-      // The object value needs to be set after xmime:contentType
-      if (paramMetaData.isXOP())
+      // When a potential xop parameter is detected and MTOM is enabled
+      // we flag the SOAP message as a XOP package
+      if (paramMetaData.isXOP() && XOPContext.isMTOMEnabled()) 
       {
          log.trace("Add parameter as XOP");
          CommonMessageContext msgContext = MessageContextAssociation.peekMessageContext();
@@ -865,7 +867,10 @@
       if (soapContentElement == null && optional == false)
          throw new WSException("Cannot find child element: " + xmlName);
 
-      if (paramMetaData.isXOP())
+      // When a potential XOP parameter is detected and
+      // the incomming request is actuall XOP encoded we flag
+      // the SOAP message a XOP packaged.
+      if (paramMetaData.isXOP() && XOPContext.isMultipartXOP())
       {
          SOAPMessageImpl soapMessage = (SOAPMessageImpl)MessageContextAssociation.peekMessageContext().getSOAPMessage();
          soapMessage.setXOPMessage(true);

Modified: trunk/src/main/java/org/jboss/ws/deployment/JSR109MetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR109MetaDataBuilder.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR109MetaDataBuilder.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -362,9 +362,11 @@
       WSDLInterfaceOperation wsdlOperation = wsdlOperationPart.getWsdlOperation();
       WSDLTypes wsdlTypes = wsdlOperation.getWsdlInterface().getWsdlDefinitions().getWsdlTypes();
       JBossXSModel schemaModel = WSDLUtils.getSchemaModel(wsdlTypes);
-      XSTypeDefinition xsType = schemaModel.getTypeDefinition(xmlType.getLocalPart(), xmlType.getNamespaceURI());
+      String localPart = xmlType.getLocalPart() != null ? xmlType.getLocalPart() : "";
+      String ns = xmlType.getNamespaceURI() != null ? xmlType.getNamespaceURI() : "";
+      XSTypeDefinition xsType = schemaModel.getTypeDefinition(localPart, ns);
       XOPScanner scanner = new XOPScanner();
-      if(scanner.findXOPTypeDef(xsType)!=null)
+      if(scanner.findXOPTypeDef(xsType)!=null | (localPart.equals("base64Binary")&&ns.equals(Constants.NS_SCHEMA_XSD)))
       {
          // FIXME: read the xmime:contentType from the element declaration
          // See SchemaUtils#findXOPTypeDef(XSTypeDefinition typeDef) for details

Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/CallImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/CallImpl.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/CallImpl.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -46,7 +46,9 @@
 
 import org.jboss.logging.Logger;
 import org.jboss.ws.Constants;
+import org.jboss.ws.xop.XOPContext;
 import org.jboss.ws.binding.UnboundHeader;
+import org.jboss.ws.common.CommonBindingProvider;
 import org.jboss.ws.common.CommonClient;
 import org.jboss.ws.jaxrpc.handler.HandlerChainBaseImpl;
 import org.jboss.ws.jaxrpc.handler.SOAPMessageContextJAXRPC;
@@ -581,7 +583,12 @@
    {
       SOAPMessageContextJAXRPC msgContext = (SOAPMessageContextJAXRPC)MessageContextAssociation.peekMessageContext();
       HandlerChainBaseImpl handlerChain = (HandlerChainBaseImpl)jaxrpcService.getHandlerChain(portName);
-      return (handlerChain != null ? handlerChain.handleRequest(msgContext, type) : true);
+      boolean status = (handlerChain != null ? handlerChain.handleRequest(msgContext, type) : true);
+
+      if (type == HandlerType.ENDPOINT)
+         XOPContext.visitAndRestoreXOPData();
+      
+      return status;
    }
 
    @Override

Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/Base64Deserializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/Base64Deserializer.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/Base64Deserializer.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -29,8 +29,15 @@
 import org.jboss.ws.binding.BindingException;
 import org.jboss.ws.binding.DeserializerSupport;
 import org.jboss.ws.binding.SerializationContext;
+import org.jboss.ws.xop.XOPContext;
+import org.jboss.ws.xop.XOPUnmarshallerImpl;
+import org.jboss.ws.utils.DOMUtils;
+import org.jboss.ws.WSException;
 import org.jboss.xb.binding.SimpleTypeBindings;
+import org.jboss.xb.binding.sunday.xop.XOPUnmarshaller;
+import org.w3c.dom.Element;
 
+import java.io.IOException;
 /**
  * Deserializer for Base64
  *
@@ -49,8 +56,22 @@
       byte[] value = null;
       
       String valueStr = unwrapValueStr(xmlFragment);
-      if (valueStr != null)
+      if(XOPContext.isXOPPackage())
       {
+         try
+         {
+            Element xopInclude = DOMUtils.parse(valueStr);
+            String cid = xopInclude.getAttribute("href");
+            XOPUnmarshaller xopUnmarshaller = new XOPUnmarshallerImpl();
+            value = xopUnmarshaller.getAttachmentAsByteArray(cid);
+         }
+         catch (IOException e)
+         {
+            throw new WSException("Failed to parse xopInclude element");
+         }
+      }
+      else if (valueStr != null)
+      {
          value = SimpleTypeBindings.unmarshalBase64(valueStr);
       }
       return value;

Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/Base64Serializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/Base64Serializer.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/Base64Serializer.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -30,8 +30,12 @@
 import org.jboss.ws.binding.SerializationContext;
 import org.jboss.ws.binding.SerializerSupport;
 import org.jboss.ws.utils.JavaUtils;
+import org.jboss.ws.xop.XOPContext;
+import org.jboss.ws.xop.XOPMarshallerImpl;
 import org.jboss.xb.binding.NamespaceRegistry;
 import org.jboss.xb.binding.SimpleTypeBindings;
+import org.jboss.xb.binding.sunday.xop.XOPMarshaller;
+import org.jboss.xb.binding.sunday.xop.XOPObject;
 import org.w3c.dom.NamedNodeMap;
 
 /**
@@ -49,11 +53,24 @@
    {
       log.debug("serialize: [xmlName=" + xmlName + ",xmlType=" + xmlType + "]");
 
-      value = JavaUtils.getPrimitiveValue(value);
-      String valueStr = SimpleTypeBindings.marshalBase64((byte[])value);
+      String xmlFragment = null;
+      NamespaceRegistry nsRegistry = serContext.getNamespaceRegistry();
 
-      NamespaceRegistry nsRegistry = serContext.getNamespaceRegistry();
-      String xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes);
+      if(XOPContext.isXOPPackage())
+      {
+         XOPMarshaller xopMarshaller = new XOPMarshallerImpl();
+         XOPObject xopObject = new XOPObject(value);
+         xopObject.setContentType("application/octet-stream");
+         String cid = xopMarshaller.addMtomAttachment(xopObject, xmlName.getNamespaceURI(), xmlType.getLocalPart() );
+         String xopInclude = "<xop:Include xmlns:xop='http://www.w3.org/2004/08/xop/include' href='"+cid+"'/>";
+         xmlFragment = wrapValueStr(xmlName, xopInclude, nsRegistry, attributes, false);
+      }
+      else
+      {
+         value = JavaUtils.getPrimitiveValue(value);
+         String valueStr = SimpleTypeBindings.marshalBase64((byte[])value);
+         xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes, true);
+      }
       return xmlFragment;
    }
 }

Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/CalendarSerializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/CalendarSerializer.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/CalendarSerializer.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -52,7 +52,7 @@
       String valueStr = SimpleTypeBindings.marshalDateTime((Calendar)value);
 
       NamespaceRegistry nsRegistry = serContext.getNamespaceRegistry();
-      String xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes);
+      String xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes, true);
       return xmlFragment;
    }
 }

Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/DateSerializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/DateSerializer.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/DateSerializer.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -62,7 +62,7 @@
       String valueStr = SimpleTypeBindings.marshalDateTime((Calendar)value);
 
       NamespaceRegistry nsRegistry = serContext.getNamespaceRegistry();
-      String xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes);
+      String xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes, true);
       return xmlFragment;
    }
 }

Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/HexSerializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/HexSerializer.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/HexSerializer.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -54,7 +54,7 @@
       String valueStr = SimpleTypeBindings.marshalHexBinary((byte[])value);
 
       NamespaceRegistry nsRegistry = serContext.getNamespaceRegistry();
-      String xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes);
+      String xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes, true);
       return xmlFragment;
    }
 }

Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/NullValueSerializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/NullValueSerializer.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/NullValueSerializer.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -62,7 +62,7 @@
 
       NamespaceRegistry nsRegistry = serContext.getNamespaceRegistry();
       nsRegistry.registerURI(Constants.NS_SCHEMA_XSI, Constants.PREFIX_XSI);
-      String xmlFragment = wrapValueStr(xmlName, null, nsRegistry, attributes);
+      String xmlFragment = wrapValueStr(xmlName, null, nsRegistry, attributes, true);
       return xmlFragment;
    }
 }

Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/QNameSerializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/QNameSerializer.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/QNameSerializer.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -61,7 +61,7 @@
       }
 
       String valueStr = SimpleTypeBindings.marshalQName(qnameValue, nsRegistry);
-      String xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes);
+      String xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes, true);
 
       // Insert the NS declaration for the qnameValue
       if (nsURI.length() > 0)

Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/SimpleSerializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/SimpleSerializer.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/SimpleSerializer.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -68,7 +68,7 @@
          valueStr = SimpleTypeBindings.marshal(xmlType.getLocalPart(), value, nsRegistry);
       }
 
-      String xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes);
+      String xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes, true);
       return xmlFragment;
    }
 }

Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/handler/HandlerDelegateJAXRPC.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/handler/HandlerDelegateJAXRPC.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/handler/HandlerDelegateJAXRPC.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -23,27 +23,23 @@
 
 // $Id$
 
-import java.util.ArrayList;
-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.handler.HandlerChain;
-import javax.xml.rpc.handler.HandlerInfo;
-
 import org.jboss.logging.Logger;
 import org.jboss.ws.WSException;
+import org.jboss.ws.xop.XOPContext;
 import org.jboss.ws.metadata.HandlerMetaData;
+import org.jboss.ws.metadata.HandlerMetaData.HandlerInitParam;
+import org.jboss.ws.metadata.HandlerMetaData.HandlerType;
 import org.jboss.ws.metadata.HandlerMetaDataJAXRPC;
 import org.jboss.ws.metadata.ServerEndpointMetaData;
-import org.jboss.ws.metadata.HandlerMetaData.HandlerType;
-import org.jboss.ws.metadata.HandlerMetaData.HandlerInitParam;
 import org.jboss.ws.server.HandlerDelegate;
 import org.jboss.ws.server.ServiceEndpointInfo;
 import org.jboss.ws.soap.MessageContextAssociation;
 
+import javax.xml.namespace.QName;
+import javax.xml.rpc.handler.HandlerChain;
+import javax.xml.rpc.handler.HandlerInfo;
+import java.util.*;
+
 /** Delegates to JAXRPC handlers
  *
  * @author Thomas.Diesler at jboss.org
@@ -115,7 +111,12 @@
       else if (type == HandlerType.POST)
          handlerChain = postHandlerChain;
       
-      return (handlerChain != null ? handlerChain.handleResponse(msgContext) : true);
+      boolean status = (handlerChain != null ? handlerChain.handleResponse(msgContext) : true);
+
+      if(type == HandlerType.ENDPOINT)
+         XOPContext.visitAndRestoreXOPData();
+
+      return status;
    }
 
    public boolean callFaultHandlerChain(ServiceEndpointInfo seInfo, HandlerType type, Exception ex)
@@ -130,7 +131,12 @@
       else if (type == HandlerType.POST)
          handlerChain = postHandlerChain;
       
-      return (handlerChain != null ? handlerChain.handleFault(msgContext) : true);
+      boolean status = (handlerChain != null ? handlerChain.handleFault(msgContext) : true);
+
+      if(type == HandlerType.ENDPOINT)
+         XOPContext.visitAndRestoreXOPData();
+
+      return status;
    }
 
    /**

Modified: trunk/src/main/java/org/jboss/ws/jbossxb/SchemaBindingBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jbossxb/SchemaBindingBuilder.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/jbossxb/SchemaBindingBuilder.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -23,37 +23,31 @@
 
 // $Id$
 
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.namespace.QName;
-import javax.xml.soap.SOAPElement;
-import javax.xml.soap.SOAPException;
-import javax.xml.soap.SOAPFactory;
-
 import org.apache.xerces.xs.XSModel;
 import org.jboss.logging.Logger;
-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.utils.JBossWSEntityResolver;
+import org.jboss.util.xml.JBossEntityResolver;
 import org.jboss.ws.Constants;
 import org.jboss.ws.WSException;
-import org.jboss.ws.xop.XOPValueAdapter;
+import org.jboss.ws.metadata.jaxrpcmapping.*;
+import org.jboss.ws.utils.JBossWSEntityResolver;
 import org.jboss.xb.binding.metadata.ClassMetaData;
 import org.jboss.xb.binding.metadata.PackageMetaData;
 import org.jboss.xb.binding.metadata.PropertyMetaData;
 import org.jboss.xb.binding.metadata.ValueMetaData;
 import org.jboss.xb.binding.sunday.unmarshalling.*;
 import org.jboss.xb.binding.sunday.unmarshalling.impl.runtime.RtElementHandler;
-import org.jboss.util.xml.JBossEntityResolver;
 import org.w3c.dom.Element;
 import org.w3c.dom.Text;
 import org.xml.sax.Attributes;
 
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPFactory;
+import java.util.ArrayList;
+import java.util.Iterator;
+
 /**
  * Create SchemaBinding from XSModel and jaxrpc-mapping.
  *
@@ -297,20 +291,6 @@
          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: trunk/src/main/java/org/jboss/ws/metadata/wsdl/WSDL11Reader.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/wsdl/WSDL11Reader.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/metadata/wsdl/WSDL11Reader.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -106,7 +106,7 @@
 
    // Temporary files used by this reader.
    private List<File> tempFiles = new ArrayList<File>();
-   
+
    /**
     * Takes a WSDL11 Definition element and converts into
     * our object graph that has been developed for WSDL20
@@ -131,7 +131,7 @@
          processUnreachableBindings(srcWsdl);
 
       cleanupTemporaryFiles();
-      
+
       return destWsdl;
    }
 
@@ -142,7 +142,7 @@
         current.delete();
      }
    }
-   
+
    // process all bindings not within service separetly
    private void processUnreachableBindings(Definition srcWsdl)
    {
@@ -737,7 +737,7 @@
          PortType srcPortType = srcBinding.getPortType();
          if (srcPortType == null)
             throw new WSException("Cannot find port type for binding: " + ncName);
-         
+
          processPortType(srcWsdl, srcPortType);
 
          WSDLBinding destBinding = new WSDLBinding(destWsdl);
@@ -1121,7 +1121,7 @@
       {
          ExtensibilityElement extElement = (ExtensibilityElement)it.next();
          QName elementType = extElement.getElementType();
-         
+
          if (extElement instanceof SOAPAddress)
          {
             SOAPAddress addr = (SOAPAddress)extElement;

Modified: trunk/src/main/java/org/jboss/ws/soap/SOAPContentElement.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/soap/SOAPContentElement.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/soap/SOAPContentElement.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -23,21 +23,7 @@
 
 // $Id$
 
-import java.io.IOException;
-import java.io.Writer;
-import java.lang.reflect.Array;
-import java.lang.reflect.Method;
-import java.util.Iterator;
-
-import javax.activation.DataHandler;
-import javax.xml.namespace.QName;
-import javax.xml.soap.Name;
-import javax.xml.soap.SOAPElement;
-import javax.xml.soap.SOAPException;
-
 import org.jboss.logging.Logger;
-import org.jboss.ws.utils.DOMUtils;
-import org.jboss.ws.utils.DOMWriter;
 import org.jboss.ws.Constants;
 import org.jboss.ws.WSException;
 import org.jboss.ws.binding.BindingException;
@@ -51,16 +37,23 @@
 import org.jboss.ws.jaxrpc.encoding.SerializerFactoryBase;
 import org.jboss.ws.metadata.ParameterMetaData;
 import org.jboss.ws.metadata.UnifiedMetaData;
+import org.jboss.ws.utils.DOMUtils;
+import org.jboss.ws.utils.DOMWriter;
 import org.jboss.ws.utils.JavaUtils;
 import org.jboss.ws.xop.XOPContext;
-import org.w3c.dom.Attr;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.TypeInfo;
+import org.w3c.dom.*;
 
+import javax.activation.DataHandler;
+import javax.xml.namespace.QName;
+import javax.xml.soap.Name;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPException;
+import java.io.IOException;
+import java.io.Writer;
+import java.lang.reflect.Array;
+import java.lang.reflect.Method;
+import java.util.Iterator;
+
 /**
  * A SOAPElement that gives access to its content as XML fragment or Java object.
  *
@@ -972,53 +965,72 @@
       }
    }
 
-   public void writeElement(Writer writer)
-   {
+   public void writeElement(Writer writer) {
       try
       {
-         if (isDOMValid)
+         handleMTOMTransitions();
+
+         if(isDOMValid)
          {
-            if (isXOPParameter() && XOPContext.isMTOMEnabled())
-            {
-               // When the DOM representation is valid (i.e. XOP is inlined),
-               // and 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);
-            }
             new DOMWriter(writer).print(this);
          }
          else
          {
-            if (isXOPParameter() && XOPContext.isMTOMEnabled() == false)
-            {
-               // When the DOM representation is not valid (i.e. XOP is not inlined),
-               // and MTOM is not enabled we need to inlined the xop:Include element. 
-               // This happens when we expand to DOM
+            writer.write( getXMLFragment() );
+         }
 
-               log.debug("Expand to DOM, MTOM not enabled");
-               expandToDOM();
-               new DOMWriter(writer).print(this);
-            }
-            else
-            {
-               writer.write(getXMLFragment());
-            }
-         }
       }
-      catch (RuntimeException rte)
+      catch (Exception e)
       {
-         throw rte;
+         throw new WSException("Failed to write SOAPContentElement ", e);
       }
-      catch (Exception ex)
+   }
+
+   /**
+    * 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,
+    * then we always enforce the inlined 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.
+    */
+   public void handleMTOMTransitions() {
+
+      boolean mtomEnabled = isXOPParameter() && XOPContext.isMTOMEnabled();
+
+      if( paramMetaData != null && mtomEnabled == false )
       {
-         throw new WSException(ex);
+         // 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("MTOM disabled: Enforce dom-valid state");
+         CommonMessageContext msgContext = MessageContextAssociation.peekMessageContext();
+         msgContext.setProperty(CommonMessageContext.ALLOW_EXPAND_TO_DOM, Boolean.TRUE);
+         expandToDOM();
       }
+      else if(isDOMValid && mtomEnabled )
+      {
+         // When the DOM representation is valid,
+         // and MTOM is enabled we need to convert the inlined
+         // element back to an xop:Include element and create the attachment part
+
+         log.debug("MTOM enabled: Restore XOP data");
+         XOPContext.restoreXOPDataDOM(this);
+      }
+
    }
 
    private boolean isXOPParameter()
    {
       return paramMetaData != null && paramMetaData.isXOP();
    }
+   public void accept(SAAJVisitor visitor) {
+      visitor.visitSOAPContentElement(this);
+   }
 }

Modified: trunk/src/main/java/org/jboss/ws/soap/SOAPElementImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/soap/SOAPElementImpl.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/soap/SOAPElementImpl.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -59,7 +59,7 @@
  *
  * @author Thomas.Diesler at jboss.org
  */
-public class SOAPElementImpl extends NodeImpl implements SOAPElement
+public class SOAPElementImpl extends NodeImpl implements SOAPElement, SAAJVisitable
 {
    // provide logging
    private static Logger log = Logger.getLogger(SOAPElementImpl.class);
@@ -670,6 +670,9 @@
       throw new NotImplementedException("setIdAttributeNS");
    }
 
+   public void accept(SAAJVisitor visitor) {
+      visitor.visitSOAPElement(this);  
+   }
    /**
     * The default implementation uses a DOMWriter.
     * SOAPContentElements overwrite this to optimize DOM callbacks.

Modified: trunk/src/main/java/org/jboss/ws/xop/XOPContext.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/xop/XOPContext.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/xop/XOPContext.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -21,19 +21,7 @@
 */
 package org.jboss.ws.xop;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.Iterator;
-
-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 org.jboss.logging.Logger;
-import org.jboss.ws.utils.DOMUtils;
 import org.jboss.ws.Constants;
 import org.jboss.ws.WSException;
 import org.jboss.ws.common.CommonMessageContext;
@@ -41,22 +29,31 @@
 import org.jboss.ws.soap.MessageContextAssociation;
 import org.jboss.ws.soap.NameImpl;
 import org.jboss.ws.soap.SOAPMessageImpl;
+import org.jboss.ws.soap.SOAPElementImpl;
+import org.jboss.ws.utils.DOMUtils;
 import org.jboss.ws.utils.JavaUtils;
 import org.jboss.ws.utils.MimeUtils;
-import org.jboss.ws.utils.ThreadLocalAssociation;
 import org.jboss.xb.binding.SimpleTypeBindings;
 import org.jboss.xb.binding.sunday.xop.XOPMarshaller;
 import org.jboss.xb.binding.sunday.xop.XOPObject;
 
+import javax.activation.DataHandler;
+import javax.xml.namespace.QName;
+import javax.xml.soap.AttachmentPart;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPBody;
+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>
+ * 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 org.jboss.ws.soap.SOAPContentElement#handleMTOMTransitions() 
  * @see XOPUnmarshallerImpl
  * @see XOPMarshallerImpl
  *
@@ -84,6 +81,32 @@
    }
 
    /**
+    * Check if the wire format is actually a xop encoded multipart message
+    */
+   public static boolean isMultipartXOP()
+   {
+      boolean isMultippartXOP = false;
+      CommonMessageContext msgContext = MessageContextAssociation.peekMessageContext();
+      if(msgContext!=null) {
+         SOAPMessageImpl soapMessage = (SOAPMessageImpl)msgContext.getSOAPMessage();
+         String[] contentType = soapMessage.getMimeHeaders().getHeader("content-type");
+         if(contentType!=null)
+         {
+            for(String value : contentType)
+            {
+               if(value.indexOf("application/xop+xml") != -1)
+               {
+                  isMultippartXOP = true;
+                  break;
+               }
+            }
+         }
+      }
+
+      return isMultippartXOP;
+   }
+
+   /**
     * 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.
@@ -95,6 +118,12 @@
       return Boolean.TRUE.equals(mtomEnabled) || mtomEnabled == null;
    }
 
+   public static void setMTOMEnabled(boolean b)
+   {
+      CommonMessageContext msgContext = MessageContextAssociation.peekMessageContext();
+      msgContext.setProperty(StubExt.PROPERTY_MTOM_ENABLED, Boolean.valueOf(b));
+   }
+
    /**
     * Replace all <code>xop:Include</code> elements with it's base64 representation.
     * This happens when the associated SOAPContentElement transitions to state dom-valid.<br>
@@ -132,12 +161,46 @@
    }
 
    /**
+    * When handlers jump in, the SOAPMessage flag that indicates
+    * a xop encoded message (derived from wire format) becomes stale.
+    *
+    * @param isXOPMessage
+    */
+   private static void setXOPMessage(boolean isXOPMessage)
+   {
+      CommonMessageContext msgContext = MessageContextAssociation.peekMessageContext();
+      SOAPMessageImpl soapMsg = (SOAPMessageImpl)msgContext.getSOAPMessage();
+      soapMsg.setXOPMessage(isXOPMessage);
+   }
+
+   /**
+    * Visit the soap object model elements and restore xop data.
+    */
+   public static void visitAndRestoreXOPData()
+   {
+      try
+      {
+         if(!isXOPPackage() && isMTOMEnabled())
+         {
+            CommonMessageContext msgContext = MessageContextAssociation.peekMessageContext();
+            SOAPBody body = msgContext.getSOAPMessage().getSOAPBody();
+            RestoreXOPElementVisitor visitor = new RestoreXOPElementVisitor();
+            visitor.visitXOPElements((SOAPElementImpl)body);
+         }
+      }
+      catch (SOAPException e)
+      {
+         throw new WSException("Failed to restore XOP data", e);
+      }
+   }
+
+   /**
     * 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 restoreXOPData(SOAPElement xopElement)
+   public static void restoreXOPDataDOM(SOAPElement xopElement)
    {
       String contentType = xopElement.getAttributeNS(NS_XOP_JBOSSWS, "content-type");
       if(contentType != null && contentType.length()>0)
@@ -151,7 +214,7 @@
          while(it.hasNext())
          {
             SOAPElement childElement = (SOAPElement)it.next();
-            restoreXOPData(childElement);
+            restoreXOPDataDOM(childElement);
          }
       }
    }
@@ -171,7 +234,7 @@
       xopObject.setContentType(contentType);
 
       XOPMarshaller xopMarshaller = new XOPMarshallerImpl();
-      String cid = xopMarshaller.addMtomAttachment(xopObject, xopElement.getNamespaceURI(), xopElement.getLocalName());      
+      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();
@@ -181,7 +244,7 @@
       {
          SOAPElement xopInclude = xopElement.addChildElement(Constants.NAME_XOP_INCLUDE);
          xopInclude.setAttribute("href", cid);
-         log.debug("Restored xop:Include element on {" + xopElement.getNamespaceURI()+"}"+xopElement.getLocalName());
+         log.debug("Restored xop:Include element on [xmlName="+xopElement.getLocalName()+"]");
       }
       catch (SOAPException e)
       {
@@ -225,7 +288,7 @@
       log.debug("Created base64 representation for content-type " + contentType);
 
       // cleanup the attachment part
-      CommonMessageContext msgContext = (CommonMessageContext)MessageContextAssociation.peekMessageContext();
+      CommonMessageContext msgContext = MessageContextAssociation.peekMessageContext();
       SOAPMessageImpl soapMessage = (SOAPMessageImpl)msgContext.getSOAPMessage();
 
       if(cid.startsWith("cid:")) cid = cid.substring(4);
@@ -237,6 +300,11 @@
 
       log.debug("Removed attachment part " + cid);
 
+      // leave soap object model in a valid state
+      setXOPMessage(false);
+
+      //log.warn("Further MTOM processing disabled. The XOP encoding will not be restored.");
+      //setMTOMEnabled(false);
    }
 
    /**
@@ -275,15 +343,10 @@
       {
          dataHandler = new DataHandler(o, xopObject.getContentType());
       }
-      else if(! getContentTypeForClazz(o.getClass()).equals("application/octet-stream"))
+      else
       {
          dataHandler = new DataHandler(o, getContentTypeForClazz(o.getClass()));
       }
-      else
-      {
-         DataSource ds = new SimpleDataSource(o, "application/octet-stream");
-         dataHandler = new DataHandler(ds);
-      }
 
       return dataHandler;
    }

Modified: trunk/src/main/java/org/jboss/ws/xop/XOPMarshallerImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/xop/XOPMarshallerImpl.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/xop/XOPMarshallerImpl.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -29,6 +29,8 @@
 import org.jboss.ws.soap.attachment.MimeConstants;
 import org.jboss.ws.soap.attachment.ContentHandlerRegistry;
 import org.jboss.ws.common.CommonMessageContext;
+import org.jboss.ws.utils.IOUtils;
+import org.jboss.ws.WSException;
 import org.jboss.xb.binding.sunday.xop.XOPMarshaller;
 import org.jboss.xb.binding.sunday.xop.XOPObject;
 

Modified: trunk/src/main/java/org/jboss/ws/xop/XOPScanner.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/xop/XOPScanner.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/xop/XOPScanner.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -49,19 +49,26 @@
 
    // avoid circular scans
    private List<String> scannedItems = new ArrayList<String>();
+   private static final String BASE64_BINARY = "base64Binary";
 
    /**
     * Query a complex type for nested XOP type definitions.
     */
    public XSTypeDefinition findXOPTypeDef(XSTypeDefinition typeDef)
-   {
+   {      
+      if(typeDef==null)
+         return typeDef;
       XSTypeDefinition result = null;
+      String name = typeDef.getName();
+      String namespace = typeDef.getNamespace()!=null ? typeDef.getNamespace():"";
 
-      if(typeDef instanceof XSComplexTypeDefinition)
+      if(typeDef instanceof XSSimpleTypeDefinition && BASE64_BINARY.equals(name))
       {
+         return typeDef;
+      }
+      else if(typeDef instanceof XSComplexTypeDefinition)
+      {
          XSComplexTypeDefinition complexTypeDef = (XSComplexTypeDefinition)typeDef;
-         String name = complexTypeDef.getName();
-         String namespace = complexTypeDef.getNamespace()!=null ? complexTypeDef.getNamespace():"";
          if(name!=null)
          {
             String typeKey = namespace+":"+name;
@@ -81,7 +88,7 @@
          if (complexTypeDef.getSimpleType() != null)
          {
             String typeName = complexTypeDef.getSimpleType().getName();
-            if ("base64Binary".equals(typeName))
+            if (BASE64_BINARY.equals(typeName))
                return complexTypeDef;
          }
          else

Modified: trunk/src/main/java/org/jboss/ws/xop/XOPUnmarshallerImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/xop/XOPUnmarshallerImpl.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/java/org/jboss/ws/xop/XOPUnmarshallerImpl.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -32,6 +32,7 @@
 import javax.xml.soap.SOAPException;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 
 /**
  * The XOPUnmarshallerImpl allows callbacks from the binding layer towards the
@@ -62,18 +63,34 @@
    {
       try
       {
-         // 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());
+         Object content = part.getDataHandler().getContent();
+
+         // TODO: XB should actually be able to process any content        
+         if(content instanceof InputStream)
+         {
+            ByteArrayOutputStream bout = new ByteArrayOutputStream();
+            part.getDataHandler().writeTo(bout);
+            content = bout.toByteArray();
+         }
+         else
+         {
+            throw new WSException("Unsupported content type " + content);
+         }
+
+         XOPObject xopObject = new XOPObject(content);
          xopObject.setContentType(part.getDataHandler().getContentType());
 
          return xopObject;
       }
-      catch (SOAPException ex)
+      catch(SOAPException e)
       {
-         throw new WSException(ex);
+         throw new WSException("Failed to access attachment part", e);
       }
+      catch(IOException e)
+      {
+         throw new WSException("Failed to extract attachment data", e);
+      }
    }
 
    public byte[] getAttachmentAsByteArray(String cid)

Modified: trunk/src/main/resources/jbossws.sar/META-INF/standard-jaxrpc-client-config.xml
===================================================================
--- trunk/src/main/resources/jbossws.sar/META-INF/standard-jaxrpc-client-config.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/resources/jbossws.sar/META-INF/standard-jaxrpc-client-config.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -9,7 +9,18 @@
     <config-name>Standard Client</config-name>
   </client-config>
   
-  <client-config>
+   <client-config>
+      <config-name>Standard MTOM disabled client</config-name>
+      <post-handler-chain>
+         <handler-chain-name>MTOM handler</handler-chain-name>
+         <handler>
+            <j2ee:handler-name>DisableMTOMHandler</j2ee:handler-name>
+            <j2ee:handler-class>org.jboss.ws.xop.DisableMTOMHandler</j2ee:handler-class>
+         </handler>
+      </post-handler-chain>
+   </client-config>
+
+   <client-config>
     <config-name>Standard WSAddressing Client</config-name>
     <post-handler-chain>
       <handler-chain-name>WSAddressing Handlers</handler-chain-name>

Modified: trunk/src/main/resources/jbossws.sar/META-INF/standard-jaxrpc-endpoint-config.xml
===================================================================
--- trunk/src/main/resources/jbossws.sar/META-INF/standard-jaxrpc-endpoint-config.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/main/resources/jbossws.sar/META-INF/standard-jaxrpc-endpoint-config.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -9,7 +9,18 @@
     <config-name>Standard Endpoint</config-name>
   </endpoint-config>
   
-  <endpoint-config>
+   <endpoint-config>
+      <config-name>Standard MTOM disabled endpoint</config-name>
+      <pre-handler-chain>
+         <handler-chain-name>MTOM handlers</handler-chain-name>
+         <handler>
+            <j2ee:handler-name>DisableMTOMHandler</j2ee:handler-name>
+            <j2ee:handler-class>org.jboss.ws.xop.DisableMTOMHandler</j2ee:handler-class>
+         </handler>
+      </pre-handler-chain>
+   </endpoint-config>
+
+   <endpoint-config>
     <config-name>Standard WSAddressing Endpoint</config-name>
     <pre-handler-chain>
       <handler-chain-name>WSAddressing Handlers</handler-chain-name>

Modified: trunk/src/test/ant/build-interop-jars.xml
===================================================================
--- trunk/src/test/ant/build-interop-jars.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/ant/build-interop-jars.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -418,7 +418,6 @@
             <include name="webservices.xml"/>
             <include name="wsdl/**.*"/>
             <include name="jboss-web.xml"/>
-            <include name="jboss-wsse-server.xml"/>
          </webinf>
          <fileset dir="${test.resources.dir}/interop/microsoft/mtom/utf8">
             <include name="*.*"/>
@@ -441,6 +440,54 @@
             <include name="scenarios.xml"/>
          </metainf>
       </jar>
+      <!-- mtom-utf8_wsse-sign.war -->
+      <war warfile="${build.test.dir}/libs/jbossws-interop-mtomUTF8_wsse.war"
+           webxml="${test.resources.dir}/interop/microsoft/mtom/utf8/wsse/WEB-INF/web.xml">
+         <classes dir="${build.test.dir}/classes">
+            <include name="org/jboss/test/ws/interop/microsoft/mtom/utf8/**/*.class"/>
+            <include name="org/jboss/test/ws/interop/microsoft/*.class"/>
+         </classes>
+
+         <webinf dir="${test.resources.dir}/interop/microsoft/mtom/utf8/WEB-INF">
+            <include name="jaxrpc-mapping.xml"/>
+            <include name="webservices.xml"/>
+            <include name="wsdl/**.*"/>
+         </webinf>
+          <webinf dir="${test.resources.dir}/interop/microsoft/security/wsse10Shared/META-INF">
+            <include name="alice.jks"/>
+            <include name="wsse10.truststore"/>
+         </webinf>
+
+         <webinf dir="${test.resources.dir}/interop/microsoft/mtom/utf8/wsse/WEB-INF">
+            <include name="jboss-wsse-server.xml"/>
+            <include name="jboss-web.xml"/>
+         </webinf>
+         <fileset dir="${test.resources.dir}/interop/microsoft/mtom/utf8">
+            <include name="*.*"/>
+         </fileset>
+      </war>
+
+      <!-- mtom-utf8_wsse-sign client -->
+      <jar jarfile="${build.test.dir}/libs/jbossws-interop-mtomUTF8_wsse-client.jar">
+         <fileset dir="${build.test.dir}/classes">
+            <include name="org/jboss/test/ws/interop/microsoft/mtom/utf8/**/*.class"/>
+            <include name="org/jboss/test/ws/interop/microsoft/*.class"/>
+         </fileset>
+         <metainf dir="${test.resources.dir}/interop/microsoft/mtom/utf8/WEB-INF">
+            <include name="jaxrpc-mapping.xml"/>
+            <include name="wsdl/**"/>
+         </metainf>
+         <metainf dir="${test.resources.dir}/interop/microsoft/security/wsse10Shared/META-INF">
+            <include name="alice.jks"/>
+            <include name="wsse10.truststore"/>
+         </metainf>
+         <metainf dir="${test.resources.dir}/interop/microsoft/mtom/utf8/wsse/META-INF">
+            <include name="jboss-client.xml"/>
+            <include name="jboss-wsse-client.xml"/>
+            <include name="application-client.xml"/>
+            <include name="scenarios.xml"/>
+         </metainf>
+      </jar>
    </target>
 
 </project>
\ No newline at end of file

Modified: trunk/src/test/ant/build-jars-jaxrpc.xml
===================================================================
--- trunk/src/test/ant/build-jars-jaxrpc.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/ant/build-jars-jaxrpc.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -1876,6 +1876,7 @@
     <war warfile="${build.test.dir}/libs/jaxrpc-xop-doclit.war" webxml="${build.test.dir}/resources/jaxrpc/xop/doclit/WEB-INF/web.xml">
       <classes dir="${build.test.dir}/classes">
         <include name="org/jboss/test/ws/jaxrpc/xop/doclit/*.class"/>
+            <include name="org/jboss/test/ws/jaxrpc/xop/shared/*.class"/>
         <exclude name="org/jboss/test/ws/jaxrpc/xop/doclit/*TestCase.class"/>
       </classes>
       <webinf dir="${build.test.dir}/resources/jaxrpc/xop/doclit/WEB-INF">
@@ -1887,6 +1888,7 @@
     <jar destfile="${build.test.dir}/libs/jaxrpc-xop-doclit-client.jar">
       <fileset dir="${build.test.dir}/classes">
         <include name="org/jboss/test/ws/jaxrpc/xop/doclit/*.class"/>
+            <include name="org/jboss/test/ws/jaxrpc/xop/shared/*.class"/>
         <exclude name="org/jboss/test/ws/jaxrpc/xop/doclit/*TestCase.class"/>
       </fileset>
       <metainf dir="${build.test.dir}/resources/jaxrpc/xop/doclit/META-INF">
@@ -1898,6 +1900,99 @@
         <include name="jaxrpc-mapping.xml"/>
       </metainf>
     </jar>
+      <!-- jaxrpc-xop-doclit with handlers -->
+      <war warfile="${build.test.dir}/libs/jaxrpc-xop-doclit_handler.war" webxml="${build.test.dir}/resources/jaxrpc/xop/doclit/WEB-INF/web.xml">
+         <classes dir="${build.test.dir}/classes">
+            <include name="org/jboss/test/ws/jaxrpc/xop/doclit/*.class"/>
+            <include name="org/jboss/test/ws/jaxrpc/xop/shared/*.class"/>
+            <exclude name="org/jboss/test/ws/jaxrpc/xop/doclit/*TestCase.class"/>
+         </classes>
+         <webinf dir="${build.test.dir}/resources/jaxrpc/xop/doclit/WEB-INF">
+            <include name="jaxrpc-mapping.xml"/>
+            <include name="wsdl/**"/>
+         </webinf>
+          <webinf dir="${build.test.dir}/resources/jaxrpc/xop/doclit/handlerconfig/WEB-INF">
+            <include name="webservices.xml"/>
+         </webinf>
+      </war>
+
+      <jar destfile="${build.test.dir}/libs/jaxrpc-xop-doclit_handler-client.jar">
+         <fileset dir="${build.test.dir}/classes">
+            <include name="org/jboss/test/ws/jaxrpc/xop/doclit/*.class"/>
+            <include name="org/jboss/test/ws/jaxrpc/xop/shared/*.class"/>
+            <exclude name="org/jboss/test/ws/jaxrpc/xop/doclit/*TestCase.class"/>
+         </fileset>
+         <metainf dir="${build.test.dir}/resources/jaxrpc/xop/doclit/handlerconfig/META-INF">
+            <include name="application-client.xml"/>
+            <include name="jboss-client.xml"/>
+         </metainf>
+         <metainf dir="${build.test.dir}/resources/jaxrpc/xop/doclit/WEB-INF">
+            <include name="wsdl/**"/>
+            <include name="jaxrpc-mapping.xml"/>
+         </metainf>
+      </jar>
+
+      <!-- jaxrpc-xop-rpclit without handlers -->
+      <war warfile="${build.test.dir}/libs/jaxrpc-xop-rpclit.war" webxml="${build.test.dir}/resources/jaxrpc/xop/rpclit/WEB-INF/web.xml">
+         <classes dir="${build.test.dir}/classes">
+            <include name="org/jboss/test/ws/jaxrpc/xop/rpclit/*.class"/>
+            <include name="org/jboss/test/ws/jaxrpc/xop/shared/*.class"/>
+            <exclude name="org/jboss/test/ws/jaxrpc/xop/rpclit/*TestCase.class"/>
+         </classes>
+         <webinf dir="${build.test.dir}/resources/jaxrpc/xop/rpclit/WEB-INF">
+            <include name="webservices.xml"/>
+            <include name="jaxrpc-mapping.xml"/>
+            <include name="wsdl/**"/>
+         </webinf>
+      </war>
+
+      <jar destfile="${build.test.dir}/libs/jaxrpc-xop-rpclit-client.jar">
+         <fileset dir="${build.test.dir}/classes">
+            <include name="org/jboss/test/ws/jaxrpc/xop/rpclit/*.class"/>
+            <include name="org/jboss/test/ws/jaxrpc/xop/shared/*.class"/>
+            <exclude name="org/jboss/test/ws/jaxrpc/xop/rpclit/*TestCase.class"/>
+         </fileset>
+         <metainf dir="${build.test.dir}/resources/jaxrpc/xop/rpclit/META-INF">
+            <include name="application-client.xml"/>
+            <include name="jboss-client.xml"/>
+         </metainf>
+         <metainf dir="${build.test.dir}/resources/jaxrpc/xop/rpclit/WEB-INF">
+            <include name="wsdl/**"/>
+            <include name="jaxrpc-mapping.xml"/>
+         </metainf>
+      </jar>
+
+      <!-- jaxrpc-xop-rpclit with handlers -->
+      <war warfile="${build.test.dir}/libs/jaxrpc-xop-rpclit_handler.war" webxml="${build.test.dir}/resources/jaxrpc/xop/rpclit/WEB-INF/web.xml">
+         <classes dir="${build.test.dir}/classes">
+            <include name="org/jboss/test/ws/jaxrpc/xop/rpclit/*.class"/>
+            <include name="org/jboss/test/ws/jaxrpc/xop/shared/*.class"/>
+            <exclude name="org/jboss/test/ws/jaxrpc/xop/rpclit/*TestCase.class"/>
+         </classes>
+         <webinf dir="${build.test.dir}/resources/jaxrpc/xop/rpclit/WEB-INF">
+            <include name="jaxrpc-mapping.xml"/>
+            <include name="wsdl/**"/>
+         </webinf>
+          <webinf dir="${build.test.dir}/resources/jaxrpc/xop/rpclit/handlerconfig/WEB-INF">
+            <include name="webservices.xml"/>
+         </webinf>
+      </war>
+
+      <jar destfile="${build.test.dir}/libs/jaxrpc-xop-rpclit_handler-client.jar">
+         <fileset dir="${build.test.dir}/classes">
+            <include name="org/jboss/test/ws/jaxrpc/xop/rpclit/*.class"/>
+            <include name="org/jboss/test/ws/jaxrpc/xop/shared/*.class"/>
+            <exclude name="org/jboss/test/ws/jaxrpc/xop/rpclit/*TestCase.class"/>
+         </fileset>
+         <metainf dir="${build.test.dir}/resources/jaxrpc/xop/rpclit/handlerconfig/META-INF">
+            <include name="application-client.xml"/>
+            <include name="jboss-client.xml"/>
+         </metainf>
+         <metainf dir="${build.test.dir}/resources/jaxrpc/xop/rpclit/WEB-INF">
+            <include name="wsdl/**"/>
+            <include name="jaxrpc-mapping.xml"/>
+         </metainf>
+      </jar>
   </target>
   
 </project>

Modified: trunk/src/test/build.xml
===================================================================
--- trunk/src/test/build.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/build.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -115,7 +115,7 @@
     <condition property="jbossws.deployed">
       <filesmatch file1="${jboss.client}/${jbossws.client.jar}" file2="${build.lib.dir}/${jbossws.client.jar}"/>
  	 	</condition>
- 	 	<fail message="jbossws not delpoyed, run 'ant deploy-jbossws'" unless="jbossws.deployed"/>
+ 	 	<fail message="jbossws not deployed, run 'ant deploy-jbossws'" unless="jbossws.deployed"/>
  	 		    
     <!-- Define excluded tests -->
     <property name="jbossws.target.server.${jbossws.target.server}" value="true"/>
@@ -132,12 +132,12 @@
       <pathelement location="${jboss.client}/commons-logging.jar"/>
       <pathelement location="${jboss.client}/javassist.jar"/>
       <pathelement location="${jboss.client}/jaxb-api.jar"/>
-      <pathelement location="${jboss.client}/jaxb-impl.jar"/>
+      <pathelement location="${jboss.client}/jboss-xml-binding.jar"/>
+
       <pathelement location="${jboss.client}/jboss-common.jar"/>
       <pathelement location="${jboss.client}/jbossall-client.jar"/>
       <pathelement location="${jboss.client}/jbossretro-rt.jar"/>
       <pathelement location="${jboss.client}/jboss-backport-concurrent.jar"/>
-      <pathelement location="${jboss.client}/jboss-xml-binding.jar"/>
       <pathelement location="${jboss.client}/${jbossws.client.jar}"/>
       <pathelement location="${jboss.client}/log4j.jar"/>
       <pathelement location="${jboss.client}/mail.jar"/>
@@ -406,7 +406,7 @@
   -->
   <target name="one-test" depends="init" if="test" description="Run a single unit test">
     <junit printsummary="yes" showoutput="yes" dir="${build.test.dir}">
-      <!-- jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006"/ -->
+      <!--jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006"/-->
       <jvmarg value="-Djava.security.manager"/>
       <sysproperty key="java.security.policy" value="${test.etc.dir}/tst.policy"/>
       <sysproperty key="jboss.home" value="${jboss.home}"/>

Modified: trunk/src/test/java/org/jboss/test/ws/interop/microsoft/mtom/utf8/MTOMTestCase.java
===================================================================
--- trunk/src/test/java/org/jboss/test/ws/interop/microsoft/mtom/utf8/MTOMTestCase.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/java/org/jboss/test/ws/interop/microsoft/mtom/utf8/MTOMTestCase.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -88,9 +88,74 @@
     */
    public void testScenario_3_1() throws Exception
    {
-      String s = "Hello World";
+      String s = "testScenario_3_1";
       EchoBinaryAsStringResponse response = port.echoBinaryAsString( new EchoBinaryAsString(s.getBytes()));
       assertNotNull(response);
       assertEquals(response.getEchoBinaryAsStringResult(), s);
    }
+
+   /**
+    * Scenario #3.2. Echo String As Binary.
+    *
+    * Request has a string that returned back as XOPed binary blob.
+    */
+   public void testScenario_3_2() throws Exception
+   {
+      String s = "testScenario_3_2";
+      EchoStringAsBinaryResponse response = port.echoStringAsBinary( new EchoStringAsBinary(s));
+      assertNotNull(response);
+      assertEquals( new String(response.getEchoStringAsBinaryResult(), "UTF-8"), s);
+   }
+
+   /**
+    * Scenario #3.3. Echo Array of Binaries As Array Of Strings
+    *
+    * Request contains array, each array element has type base64Binary, XOPed,
+    * contains unique utf-8 encoded strings.
+    * Response has array of strings matching those in the request
+    */
+   public void testScenario_3_3() throws Exception
+   {
+      System.out.println("FIXME: testScenario_3_3");
+   }
+
+   /**
+    * Scenario #3.4. Echo Binary Field As String
+    *
+    * Echo complex type with a binary field Request contains a structure,
+    * one of the fields is binary, contains a string UTF-8 encoded.
+    * Response contains a string from the binary field from the request.
+    */
+   public void testScenario_3_4() throws Exception
+   {
+      String s = "testScenario_3_4";
+      EchoBinaryFieldAsStringResponse response = port.echoBinaryFieldAsString(
+          new EchoBinaryFieldAsString(
+              new MtomTestStruct(s.getBytes(), "Hello World")
+          )
+      );
+      assertNotNull(response);
+      assertEquals( response.getEchoBinaryFieldAsStringResult(), s);
+   }
+
+   /**
+    * Scenario #3.5. Echo Binary Passed In a Header As String
+    *
+    * Request message contains a Header element of the type base64Binary,
+    * content is XOPed. Binary contains utf-8 encoded text.
+    * Response message contains the passed string in the body
+    */
+   public void testScenario_3_5() throws Exception
+   {
+      System.out.println("FIXME: testScenario_3_5");
+   }
+
+   /**
+    * Scenario #3.6. Composition with UTF-16 encoding
+    *
+    */
+   public void testScenario_3_6() throws Exception
+   {
+      System.out.println("FIXME: testScenario_3_6");
+   }
 }

Modified: trunk/src/test/java/org/jboss/test/ws/interop/microsoft/mtom/utf8/TestService.java
===================================================================
--- trunk/src/test/java/org/jboss/test/ws/interop/microsoft/mtom/utf8/TestService.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/java/org/jboss/test/ws/interop/microsoft/mtom/utf8/TestService.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -48,18 +48,21 @@
    }
 
    public EchoStringAsBinaryResponse echoStringAsBinary(EchoStringAsBinary parameters) throws RemoteException {
-      return null;
+      return new EchoStringAsBinaryResponse(parameters.getS().getBytes());
    }
 
-   public EchoBinaryArrayAsStringArrayResponse echoBinaryArrayAsStringArray(EchoBinaryArrayAsStringArray parameters) throws RemoteException {
-      return null;
+   public EchoBinaryArrayAsStringArrayResponse echoBinaryArrayAsStringArray(EchoBinaryArrayAsStringArray parameters)
+       throws RemoteException {
+      throw new RemoteException("Not implemented");
    }
 
    public EchoBinaryFieldAsStringResponse echoBinaryFieldAsString(EchoBinaryFieldAsString parameters) throws RemoteException {
-      return null;
+      return new EchoBinaryFieldAsStringResponse(
+          new String(parameters.getS().getArray())
+      );
    }
 
    public OutputMessageContract echoBinaryHeaderAsString(InputMessageContract parameters) throws RemoteException {
-      return null;
+      throw new RemoteException("Not implemented");
    }
 }

Modified: trunk/src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom/XOPRpcTestCase.java
===================================================================
--- trunk/src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom/XOPRpcTestCase.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom/XOPRpcTestCase.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -22,7 +22,6 @@
 package org.jboss.test.ws.jaxrpc.samples.mtom;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.net.URL;
 
 import javax.activation.DataHandler;
@@ -31,14 +30,13 @@
 import javax.xml.namespace.QName;
 import javax.xml.rpc.Service;
 import javax.xml.rpc.Stub;
-import javax.xml.transform.Source;
-import javax.xml.transform.stream.StreamSource;
 
 import junit.framework.Test;
 
 import org.jboss.test.ws.JBossWSTest;
 import org.jboss.test.ws.JBossWSTestSetup;
 import org.jboss.ws.jaxrpc.ServiceFactoryImpl;
+import org.jboss.ws.utils.IOUtils;
 
 /**
  * Test SOAP with XOP through the JAXRPC dynamic proxy layer.
@@ -86,47 +84,67 @@
    }
 
    /**
-    * Send unknown file as 'application/octet-stream'.
-    * Uses a DataHandler both for the endpint parameter and the return type.
+    * Send a byte[] XOP encoded.
+    *
     */
    public void testSimpleBinary() throws Exception
    {
-      DataHandler value = port.sendOctets("Some text message", new DataHandler(
+      DataHandler dh = new DataHandler(
           new FileDataSource("resources/jaxrpc/samples/mtom/disguised_jpeg.xcf")
-      ));
-      assertNotNull(value);
-      assertTrue("Wrong content type", value.getContentType().equals("application/octet-stream"));
+      );
+      byte[] bytesIn = IOUtils.convertToBytes(dh);
+      byte[] bytesOut = port.sendOctets("Some text message", bytesIn);
+      assertNotNull(bytesOut);
+      assertTrue("Content length is different", bytesIn.length == bytesOut.length);
    }
 
    /**
+    * Send a inlined message and expect a xop encoded response.
+    */
+   public void testMTOMDisabledClientside() throws Exception
+   {
+      URL url = new File("resources/jaxrpc/samples/mtom/attach.jpeg").toURL();
+
+      // disable MTOM
+      ((Stub)port)._setProperty("org.jboss.ws.mtom.enabled", Boolean.FALSE);
+
+      DataHandler dh = new DataHandler(url);
+      byte[] bytesIn = IOUtils.convertToBytes(dh);
+      byte[] bytesOut = port.sendOctets("MTOM disabled request", bytesIn);
+      assertNotNull(bytesOut);
+      assertTrue("Content length is different", bytesIn.length == bytesOut.length);
+      assertEquals(bytesIn, bytesOut);
+   }
+
+   /**
     * Send a multipart message with a 'image/jpeg' attachment part.
     * Uses a DataHandler as endpoint parameter and return type.
     */
-   public void testAbstractParameterTypes() throws Exception
+   /*public void testAbstractParameterTypes() throws Exception
    {
       URL url = new File("resources/jaxrpc/samples/mtom/attach.jpeg").toURL();
       DataHandler value = port.sendMimeImageJPEG("Some text message", new DataHandler(url));
       assertNotNull(value);
       assertTrue("Wrong return content-type returned", value.getContentType().equals("image/jpeg"));
-   }
+   } */
 
    /**
     * Send a multipart message with a 'text/plain' attachment part.
     * Uses java.lang.String as endpoint parameter and return type.
     */
-   public void testConcreteParameterTypes() throws Exception
+   /*public void testConcreteParameterTypes() throws Exception
    {
       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 'text/xml' attachment part.
     * Uses a DataHandler as endpoint parameter, but javax.xml.transform.Source as return value.
     */
-   public void testParameterConversion() throws Exception
+   /*public void testParameterConversion() throws Exception
    {
       FileInputStream stream = new FileInputStream("resources/jaxrpc/samples/mtom/attach.xml");
       StreamSource source = new StreamSource(stream);
@@ -134,12 +152,13 @@
       Source value = port.sendMimeTextXML("Some text message", new DataHandler(source, "text/xml"));
       assertNotNull(value);
       assertTrue("Wrong return value type", value instanceof Source);
-   }
+   } */
 
    /**
     * 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 testParameterConversionReverse() throws Exception
    {
       FileInputStream stream = new FileInputStream("resources/jaxrpc/samples/mtom/attach.xml");
@@ -148,23 +167,5 @@
       DataHandler value = port.sendMimeApplicationXML("Some text message", source);
       assertNotNull(value);
       assertTrue("Wrong return value content-type", value.getContentType().equals("application/xml"));
-   }
-
-   /**
-    * Send a inlined message and expect a multipart response.
-    */
-   public void testMTOMDisabledClientSide() throws Exception
-   {
-      /*URL url = new File("resources/jaxrpc/samples/mtom/attach.jpeg").toURL();
-
-      // 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 content-type returned", value.getContentType().equals("image/jpeg"));
-      */
-
-      System.out.println("FIXME: testMTOMDisabledClientSide");
-   }
+   } */
 }

Modified: trunk/src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom/XOPTest.java
===================================================================
--- trunk/src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom/XOPTest.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom/XOPTest.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -58,5 +58,5 @@
     */
    DataHandler sendMimeApplicationXML(String message, Source xoppart) throws RemoteException;
 
-   DataHandler sendOctets(String message, DataHandler xoppart) throws RemoteException;
+   byte[] sendOctets(String message, byte[] xoppart) throws RemoteException;
 }

Modified: trunk/src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom/XOPTestImpl.java
===================================================================
--- trunk/src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom/XOPTestImpl.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/java/org/jboss/test/ws/jaxrpc/samples/mtom/XOPTestImpl.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -95,9 +95,7 @@
       return new DataHandler(xoppart, "application/xml");
    }
 
-   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());
+   public byte[] sendOctets(String message, byte[] xoppart) throws RemoteException {
       return xoppart;
    }
 

Modified: trunk/src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit/InlineHandler.java
===================================================================
--- trunk/src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit/InlineHandler.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit/InlineHandler.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -1,22 +1,46 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
 package org.jboss.test.ws.jaxrpc.xop.doclit;
 
-import javax.xml.namespace.QName;
+import org.jboss.logging.Logger;
+import org.jboss.ws.soap.NameImpl;
+
 import javax.xml.rpc.handler.GenericHandler;
+import javax.xml.rpc.handler.HandlerInfo;
 import javax.xml.rpc.handler.MessageContext;
 import javax.xml.rpc.handler.soap.SOAPMessageContext;
+import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPMessage;
 import javax.xml.soap.SOAPBody;
 import javax.xml.soap.SOAPElement;
-import javax.xml.soap.SOAPMessage;
 
-import org.jboss.logging.Logger;
-import org.jboss.ws.soap.NameImpl;
-
 /**
  * @author Heiko Braun <heiko.braun at jboss.com>
- * @since Jun 16, 2006
+ * @version $Id$
+ * @since Sep 25, 2006
  */
 public class InlineHandler extends GenericHandler
 {
+   HandlerInfo config;
 
    private static Logger log = Logger.getLogger(InlineHandler.class);
 
@@ -25,6 +49,10 @@
       return new QName[0];
    }
 
+   public void init(HandlerInfo config) {
+      this.config = config;
+   }
+
    public boolean handleRequest(MessageContext messageContext)
    {
       dumpMessage(messageContext);
@@ -52,7 +80,7 @@
       }
       catch (Exception e)
       {
-         log.error(e);
+         log.error("Failed to access inline XOP values", e);
       }
    }
 }

Modified: trunk/src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit/TestServiceImpl.java
===================================================================
--- trunk/src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit/TestServiceImpl.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit/TestServiceImpl.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -1,13 +1,29 @@
 package org.jboss.test.ws.jaxrpc.xop.doclit;
 
+import org.jboss.ws.soap.MessageContextAssociation;
+import org.jboss.ws.common.CommonMessageContext;
+import org.jboss.ws.jaxrpc.StubExt;
+import org.jboss.test.ws.jaxrpc.xop.shared.PingMsg;
+import org.jboss.test.ws.jaxrpc.xop.shared.PingMsgResponse;
+import org.jboss.test.ws.jaxrpc.xop.shared.MTOMServiceBase;
+
 import java.rmi.RemoteException;
+import java.util.StringTokenizer;
 
 /**
+ * MTOM test service impl.
+ * The 'message' param value determines wether or not the response
+ * should be XOP encoded or not.
+ *
  * @author Heiko Braun, <heiko at openj.net>
  * @since 11-Apr-2006
  */
-public class TestServiceImpl implements TestService_PortType {
-    public PingMsgResponse ping(PingMsg pingMsg) throws RemoteException {
-        return new PingMsgResponse(pingMsg.getXopContent());
-    }
+public class TestServiceImpl extends MTOMServiceBase implements TestService_PortType {
+
+   public PingMsgResponse ping(PingMsg pingMsg) throws RemoteException {
+
+      toggleXOP(pingMsg.getMessage());
+      return new PingMsgResponse(pingMsg.getXopContent());
+      
+   }
 }

Modified: trunk/src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit/TestService_PortType.java
===================================================================
--- trunk/src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit/TestService_PortType.java	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/java/org/jboss/test/ws/jaxrpc/xop/doclit/TestService_PortType.java	2006-10-02 13:04:13 UTC (rev 1119)
@@ -5,8 +5,7 @@
 //Auto Generated by jbossws - Please do not edit!!!
 
 package org.jboss.test.ws.jaxrpc.xop.doclit;
-public interface  TestService_PortType extends java.rmi.Remote
+public interface TestService_PortType extends java.rmi.Remote
 {
-
-  public org.jboss.test.ws.jaxrpc.xop.doclit.PingMsgResponse  ping(org.jboss.test.ws.jaxrpc.xop.doclit.PingMsg pingMsg) throws  java.rmi.RemoteException;
+   public org.jboss.test.ws.jaxrpc.xop.shared.PingMsgResponse  ping(org.jboss.test.ws.jaxrpc.xop.shared.PingMsg pingMsg) throws  java.rmi.RemoteException;
 }

Modified: trunk/src/test/resources/jaxrpc/marshall-rpclit/WEB-INF/webservices.xml
===================================================================
--- trunk/src/test/resources/jaxrpc/marshall-rpclit/WEB-INF/webservices.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/resources/jaxrpc/marshall-rpclit/WEB-INF/webservices.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -17,6 +17,10 @@
       <service-impl-bean>
         <servlet-link>StandardTypes</servlet-link>
       </service-impl-bean>
+       <handler>
+          <handler-name>MTOM disabled handler</handler-name>
+          <handler-class>org.jboss.ws.xop.DisableMTOMHandler</handler-class>
+       </handler>
     </port-component>
   </webservice-description>
 </webservices>

Modified: trunk/src/test/resources/jaxrpc/outparam/WEB-INF/web.xml
===================================================================
--- trunk/src/test/resources/jaxrpc/outparam/WEB-INF/web.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/resources/jaxrpc/outparam/WEB-INF/web.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -5,6 +5,10 @@
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
   version="2.4">
 
+   <context-param>
+      <param-name>jbossws-config-name</param-name>>
+      <param-value>Standard MTOM disabled endpoint</param-value>
+   </context-param>
   <servlet>
     <servlet-name>OutParamTestService</servlet-name>
     <servlet-class>org.jboss.test.ws.jaxrpc.outparam.OutParamTestServiceBean</servlet-class>

Modified: trunk/src/test/resources/jaxrpc/samples/holder/WEB-INF/web.xml
===================================================================
--- trunk/src/test/resources/jaxrpc/samples/holder/WEB-INF/web.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/resources/jaxrpc/samples/holder/WEB-INF/web.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -5,6 +5,10 @@
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
   version="2.4">
 
+   <context-param>
+      <param-name>jbossws-config-name</param-name>>
+      <param-value>Standard MTOM disabled endpoint</param-value>
+   </context-param>
   <servlet>
     <servlet-name>TestService</servlet-name>
     <servlet-class>org.jboss.test.ws.jaxrpc.samples.holder.HolderTestServiceBean</servlet-class>

Modified: trunk/src/test/resources/jaxrpc/samples-override/mtom/WEB-INF/jaxrpc-mapping.xml
===================================================================
--- trunk/src/test/resources/jaxrpc/samples-override/mtom/WEB-INF/jaxrpc-mapping.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/resources/jaxrpc/samples-override/mtom/WEB-INF/jaxrpc-mapping.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -162,7 +162,7 @@
         <!-- BEGIN manual modification -->
         <method-param-parts-mapping>
            <param-position>1</param-position>
-           <param-type>javax.activation.DataHandler</param-type>
+           <param-type>java.lang.Object</param-type>
            <wsdl-message-mapping>
               <wsdl-message xmlns:wsdlMsgNS="http://org.jboss.ws/samples/mtom">wsdlMsgNS:XOPTest_sendMimeApplicationXML</wsdl-message>
               <wsdl-message-part-name>xoppart</wsdl-message-part-name>

Modified: trunk/src/test/resources/jaxrpc/samples-override/mtom/WEB-INF/wsdl/TestService.wsdl
===================================================================
--- trunk/src/test/resources/jaxrpc/samples-override/mtom/WEB-INF/wsdl/TestService.wsdl	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/resources/jaxrpc/samples-override/mtom/WEB-INF/wsdl/TestService.wsdl	2006-10-02 13:04:13 UTC (rev 1119)
@@ -17,7 +17,7 @@
          <element name="textplain" xmime:contentType="text/plain" 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"/>
+         <element name="octets" type="xsd:base64Binary"/>
 
          <complexType name="XOPBinary" >
             <simpleContent>

Modified: trunk/src/test/resources/jaxrpc/xop/doclit/META-INF/application-client.xml
===================================================================
--- trunk/src/test/resources/jaxrpc/xop/doclit/META-INF/application-client.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/resources/jaxrpc/xop/doclit/META-INF/application-client.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -1,24 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <application-client xmlns="http://java.sun.com/xml/ns/j2ee"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application-client_1_4.xsd"
-  version="1.4">
+                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application-client_1_4.xsd"
+                    version="1.4">
 
-  <display-name>JAXRPC simple tests</display-name>
+   <display-name>XOP DOC/Lit without handlers</display-name>
 
-  <service-ref>
-    <service-ref-name>service/TestService</service-ref-name>
-    <service-interface>javax.xml.rpc.Service</service-interface>
-    <wsdl-file>use overwrite in jboss-client.xml</wsdl-file>
-    <jaxrpc-mapping-file>META-INF/jaxrpc-mapping.xml</jaxrpc-mapping-file>
-    <port-component-ref>
-      <service-endpoint-interface>org.jboss.test.ws.jaxrpc.xop.doclit.TestService_PortType</service-endpoint-interface>
-    </port-component-ref>
-      <handler>
-         <handler-name>XOPInlineHandler</handler-name>
-         <handler-class>org.jboss.test.ws.jaxrpc.xop.doclit.InlineHandler</handler-class>
-      </handler>
+   <service-ref>
+      <service-ref-name>service/XOPTestCase</service-ref-name>
+      <service-interface>javax.xml.rpc.Service</service-interface>
+      <wsdl-file>use overwrite in jboss-client.xml</wsdl-file>
+      <jaxrpc-mapping-file>META-INF/jaxrpc-mapping.xml</jaxrpc-mapping-file>
+      <port-component-ref>
+         <service-endpoint-interface>org.jboss.test.ws.jaxrpc.xop.doclit.TestService_PortType</service-endpoint-interface>
+      </port-component-ref>
   </service-ref>
 
 </application-client>

Modified: trunk/src/test/resources/jaxrpc/xop/doclit/META-INF/jboss-client.xml
===================================================================
--- trunk/src/test/resources/jaxrpc/xop/doclit/META-INF/jboss-client.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/resources/jaxrpc/xop/doclit/META-INF/jboss-client.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -8,7 +8,7 @@
   <jndi-name>jbossws-client</jndi-name>
 
   <service-ref>
-    <service-ref-name>service/TestService</service-ref-name>
+    <service-ref-name>service/XOPTestCase</service-ref-name>
     <wsdl-override>http://@jbosstest.host.name@:8080/jaxrpc-xop-doclit?wsdl</wsdl-override>
   </service-ref>
 

Modified: trunk/src/test/resources/jaxrpc/xop/doclit/WEB-INF/jaxrpc-mapping.xml
===================================================================
--- trunk/src/test/resources/jaxrpc/xop/doclit/WEB-INF/jaxrpc-mapping.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/resources/jaxrpc/xop/doclit/WEB-INF/jaxrpc-mapping.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -5,7 +5,7 @@
    </package-mapping>
    
    <java-xml-type-mapping>
-      <java-type>org.jboss.test.ws.jaxrpc.xop.doclit.PingMsg</java-type>
+      <java-type>org.jboss.test.ws.jaxrpc.xop.shared.PingMsg</java-type>
       <anonymous-type-qname xmlns:typeNS='http://jboss.org/test/ws/xop/doclit'>typeNS:&gt;PingMsg</anonymous-type-qname>
       <qname-scope>complexType</qname-scope>
       <variable-mapping>
@@ -19,7 +19,7 @@
    </java-xml-type-mapping>
 
    <java-xml-type-mapping>
-      <java-type>org.jboss.test.ws.jaxrpc.xop.doclit.PingMsgResponse</java-type>
+      <java-type>org.jboss.test.ws.jaxrpc.xop.shared.PingMsgResponse</java-type>
       <anonymous-type-qname xmlns:typeNS='http://jboss.org/test/ws/xop/doclit'>typeNS:&gt;PingMsgResponse</anonymous-type-qname>
       <qname-scope>complexType</qname-scope>
       <variable-mapping>
@@ -46,7 +46,7 @@
          <wsdl-operation>ping</wsdl-operation>
          <method-param-parts-mapping>
             <param-position>0</param-position>
-            <param-type>org.jboss.test.ws.jaxrpc.xop.doclit.PingMsg</param-type>
+            <param-type>org.jboss.test.ws.jaxrpc.xop.shared.PingMsg</param-type>
             <wsdl-message-mapping>
                <wsdl-message xmlns:wsdlMsgNS='http://jboss.org/test/ws/xop/doclit'>wsdlMsgNS:PingIn</wsdl-message>
                <wsdl-message-part-name>parameters</wsdl-message-part-name>
@@ -54,7 +54,7 @@
             </wsdl-message-mapping>
          </method-param-parts-mapping>
          <wsdl-return-value-mapping>
-            <method-return-value>org.jboss.test.ws.jaxrpc.xop.doclit.PingMsgResponse</method-return-value>
+            <method-return-value>org.jboss.test.ws.jaxrpc.xop.shared.PingMsgResponse</method-return-value>
             <wsdl-message xmlns:wsdlMsgNS='http://jboss.org/test/ws/xop/doclit'>wsdlMsgNS:PingOut</wsdl-message>
             <wsdl-message-part-name>parameters</wsdl-message-part-name>
          </wsdl-return-value-mapping>

Modified: trunk/src/test/resources/jaxrpc/xop/doclit/WEB-INF/webservices.xml
===================================================================
--- trunk/src/test/resources/jaxrpc/xop/doclit/WEB-INF/webservices.xml	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/resources/jaxrpc/xop/doclit/WEB-INF/webservices.xml	2006-10-02 13:04:13 UTC (rev 1119)
@@ -1,26 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <webservices xmlns="http://java.sun.com/xml/ns/j2ee"
-  xmlns:impl="http://jboss.org/test/ws/xop/doclit"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
-  version="1.1">
+             xmlns:impl="http://jboss.org/test/ws/xop/doclit"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
+             version="1.1">
 
-  <webservice-description>
-    <webservice-description-name>TestService</webservice-description-name>
-    <wsdl-file>WEB-INF/wsdl/TestService.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>WEB-INF/jaxrpc-mapping.xml</jaxrpc-mapping-file>
-    <port-component>
-      <port-component-name>TestServicePort</port-component-name>
-      <wsdl-port>impl:TestServicePort</wsdl-port>
-      <service-endpoint-interface>org.jboss.test.ws.jaxrpc.xop.doclit.TestService_PortType</service-endpoint-interface>
-         <handler>
-            <handler-name>XOPInlineHandler</handler-name>
-            <handler-class>org.jboss.test.ws.jaxrpc.xop.doclit.InlineHandler</handler-class>
-         </handler>
-      <service-impl-bean>
-        <servlet-link>TestService</servlet-link>
-      </service-impl-bean>    
-    </port-component>
-  </webservice-description>
+   <webservice-description>
+      <webservice-description-name>XOP DOC/Lit without handlers</webservice-description-name>
+      <wsdl-file>WEB-INF/wsdl/TestService.wsdl</wsdl-file>
+      <jaxrpc-mapping-file>WEB-INF/jaxrpc-mapping.xml</jaxrpc-mapping-file>
+      <port-component>
+         <port-component-name>TestServicePort</port-component-name>
+         <wsdl-port>impl:TestServicePort</wsdl-port>
+         <service-endpoint-interface>org.jboss.test.ws.jaxrpc.xop.doclit.TestService_PortType</service-endpoint-interface>
+         <service-impl-bean>
+            <servlet-link>TestService</servlet-link>
+         </service-impl-bean>
+      </port-component>
+   </webservice-description>
 </webservices>

Modified: trunk/src/test/resources/jaxrpc/xop/doclit/WEB-INF/wsdl/TestService.wsdl
===================================================================
--- trunk/src/test/resources/jaxrpc/xop/doclit/WEB-INF/wsdl/TestService.wsdl	2006-10-02 13:02:01 UTC (rev 1118)
+++ trunk/src/test/resources/jaxrpc/xop/doclit/WEB-INF/wsdl/TestService.wsdl	2006-10-02 13:04:13 UTC (rev 1119)
@@ -20,14 +20,14 @@
             <s:complexType>
                <s:sequence>
                   <s:element name="message" minOccurs="0" maxOccurs="1" type="s:string" />
-                  <s:element name="xopContent" xmime:expectedContentTypes="text/plain" type="xmime:base64Binary"/>
+                  <s:element name="xopContent" minOccurs="0" maxOccurs="1" type="s:base64Binary"/>
                </s:sequence>
             </s:complexType>
          </s:element>
          <s:element name="PingMsgResponse">
             <s:complexType>
                <s:sequence>
-                  <s:element name="xopContent" xmime:expectedContentTypes="text/plain" type="xmime:base64Binary"/>
+                  <s:element name="xopContent" minOccurs="0" maxOccurs="1" xmime:expectedContentTypes="text/plain" type="xmime:base64Binary"/>                  
                </s:sequence>
             </s:complexType>
          </s:element>




More information about the jboss-svn-commits mailing list