[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:>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:>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