Index: /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/CommonClient.java =================================================================== --- /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/CommonClient.java (revision 5800) +++ /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/CommonClient.java (working copy) @@ -57,6 +57,7 @@ import org.jboss.ws.core.utils.HolderUtils; import org.jboss.ws.extensions.addressing.AddressingConstantsImpl; import org.jboss.ws.extensions.wsrm.RMConstant; +import org.jboss.ws.extensions.xop.XOPContext; import org.jboss.ws.metadata.umdm.ClientEndpointMetaData; import org.jboss.ws.metadata.umdm.EndpointMetaData; import org.jboss.ws.metadata.umdm.OperationMetaData; @@ -299,6 +300,8 @@ handlerPass = handlerPass && callRequestHandlerChain(portName, handlerType[1]); handlerPass = handlerPass && callRequestHandlerChain(portName, handlerType[2]); + XOPContext.visitAndRestoreXOPData(); + // Handlers might have replaced the message reqMessage = msgContext.getMessageAbstraction(); Index: /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/jaxrpc/client/CallImpl.java =================================================================== --- /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/jaxrpc/client/CallImpl.java (revision 5800) +++ /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/jaxrpc/client/CallImpl.java (working copy) @@ -547,12 +547,7 @@ { SOAPMessageContextJAXRPC msgContext = (SOAPMessageContextJAXRPC)MessageContextAssociation.peekMessageContext(); HandlerChainBaseImpl handlerChain = (HandlerChainBaseImpl)jaxrpcService.getHandlerChain(portName); - boolean status = (handlerChain != null ? handlerChain.handleRequest(msgContext, type) : true); - - if (type == HandlerType.ENDPOINT) - XOPContext.visitAndRestoreXOPData(); - - return status; + return (handlerChain != null ? handlerChain.handleRequest(msgContext, type) : true); } @Override Index: /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java =================================================================== --- /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java (revision 5800) +++ /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java (working copy) @@ -71,6 +71,7 @@ import org.jboss.ws.core.jaxws.handler.SOAPMessageContextJAXWS; import org.jboss.ws.core.soap.MessageContextAssociation; import org.jboss.ws.core.soap.SOAPMessageImpl; +import org.jboss.ws.extensions.xop.XOPContext; import org.jboss.ws.metadata.config.ConfigurationProvider; import org.jboss.ws.metadata.umdm.ClientEndpointMetaData; import org.jboss.ws.metadata.umdm.EndpointMetaData; @@ -230,6 +231,8 @@ handlerPass = handlerPass && callRequestHandlerChain(portName, handlerType[1]); handlerPass = handlerPass && callRequestHandlerChain(portName, handlerType[2]); + XOPContext.visitAndRestoreXOPData(); + // Handlers might have replaced the message reqMsg = (SOAPMessageImpl)msgContext.getSOAPMessage(); Index: /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/soap/NodeImpl.java =================================================================== --- /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/soap/NodeImpl.java (revision 5800) +++ /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/soap/NodeImpl.java (working copy) @@ -22,8 +22,10 @@ package org.jboss.ws.core.soap; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPException; @@ -66,6 +68,8 @@ protected org.w3c.dom.Node domNode; // A list of soap children private List soapChildren = new ArrayList(); + // A hash with the user data + private Map userData; /** Construct the Node for a given org.w3c.dom.Node * @@ -613,8 +617,10 @@ public Object getUserData(String key) { - // FIXME getUserData - throw new NotImplementedException("getUserData"); + if (userData != null) { + return userData.get(key); + } + return null; } public boolean isDefaultNamespace(String namespaceURI) @@ -654,8 +660,10 @@ public Object setUserData(String key, Object data, UserDataHandler handler) { - // FIXME setUserData - throw new NotImplementedException("setUserData"); + if (userData == null) { + userData = new HashMap(); + } + return userData.put(key, data); } // END org.w3c.dom.Node DOM Level 3 ***************************************************************************** Index: /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/soap/SOAPFactoryImpl.java =================================================================== --- /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/soap/SOAPFactoryImpl.java (revision 5800) +++ /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/core/soap/SOAPFactoryImpl.java (working copy) @@ -33,6 +33,8 @@ import javax.xml.soap.SOAPFault; import org.jboss.logging.Logger; +import org.jboss.ws.Constants; +import org.jboss.ws.extensions.xop.XOPContext; import org.jboss.wsf.common.DOMUtils; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -136,6 +138,9 @@ { SOAPElement soapChild = createElement((Element)child); soapElement.addChildElement(soapChild); + if (Constants.NAME_XOP_INCLUDE.equals(soapChild.getElementQName())) { + XOPContext.inlineXOPData(soapChild); + } } else if (nodeType == Node.TEXT_NODE) { Index: /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/extensions/xop/XOPContext.java =================================================================== --- /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/extensions/xop/XOPContext.java (revision 5800) +++ /opt/develop/jbossws-src/src/src/main/java/org/jboss/ws/extensions/xop/XOPContext.java (working copy) @@ -72,7 +72,8 @@ private static final Logger log = Logger.getLogger(XOPContext.class); private static final String NS_XOP_JBOSSWS = "http://org.jboss.ws/xop"; - + private static final String NS_XOP_JBOSSWS_CONTENT_TYPE = NS_XOP_JBOSSWS + ":content-type"; + /** * Check if the current soap message flagged as a XOP package. * This may differ from the wire format when jaxrpc handlers are in place. @@ -258,11 +259,11 @@ */ public static void restoreXOPDataDOM(SOAPElement xopElement) { - String contentType = xopElement.getAttributeNS(NS_XOP_JBOSSWS, "content-type"); + String contentType = (String) xopElement.getUserData(NS_XOP_JBOSSWS_CONTENT_TYPE); if (contentType != null && contentType.length() > 0) { replaceBase64Representation(xopElement, contentType); - xopElement.removeAttribute(new NameImpl(new QName(NS_XOP_JBOSSWS, "content-type"))); + xopElement.setUserData(NS_XOP_JBOSSWS_CONTENT_TYPE, null, null); } else { @@ -345,7 +346,7 @@ String base64 = SimpleTypeBindings.marshalBase64(data); parent.removeChild(xopIncludeElement); parent.setValue(base64); - parent.setAttributeNS(NS_XOP_JBOSSWS, "content-type", contentType); + parent.setUserData(NS_XOP_JBOSSWS_CONTENT_TYPE, contentType, null); if (log.isDebugEnabled()) log.debug("Created base64 representation for content-type " + contentType);