Author: heiko.braun(a)jboss.com
Date: 2007-04-10 12:20:15 -0400 (Tue, 10 Apr 2007)
New Revision: 2785
Added:
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchBinding.java
Modified:
trunk/jbossws-core/src/java/org/jboss/ws/core/HTTPMessageImpl.java
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchHTTPBinding.java
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchSOAPBinding.java
trunk/jbossws-core/src/java/org/jboss/ws/metadata/config/EndpointFeature.java
trunk/jbossws-core/src/java/org/jboss/ws/metadata/umdm/EndpointMetaData.java
trunk/jbossws-core/src/resources/jbossws.sar/META-INF/standard-jaxws-client-config.xml
Log:
Fix dispatch validation
Modified: trunk/jbossws-core/src/java/org/jboss/ws/core/HTTPMessageImpl.java
===================================================================
--- trunk/jbossws-core/src/java/org/jboss/ws/core/HTTPMessageImpl.java 2007-04-10 15:56:19
UTC (rev 2784)
+++ trunk/jbossws-core/src/java/org/jboss/ws/core/HTTPMessageImpl.java 2007-04-10 16:20:15
UTC (rev 2785)
@@ -68,6 +68,13 @@
initDefaultMimeHeaders();
}
+ // TCL requirement
+ public boolean doValidate()
+ {
+ this.xmlFragment.toElement();
+ return true;
+ }
+
private void initDefaultMimeHeaders()
{
mimeHeaders.setHeader(MimeConstants.CONTENT_TYPE, MimeConstants.TYPE_XML_UTF8);
Added: trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchBinding.java
===================================================================
--- trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchBinding.java
(rev 0)
+++
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchBinding.java 2007-04-10
16:20:15 UTC (rev 2785)
@@ -0,0 +1,47 @@
+/*
+ * 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.ws.core.jaxws.client;
+
+import org.jboss.ws.metadata.config.Configurable;
+
+import java.util.Observable;
+
+public abstract class DispatchBinding implements Configurable
+{
+ protected boolean validateDispatch;
+
+ public boolean isValidateDispatch()
+ {
+ return validateDispatch;
+ }
+
+ public void setValidateDispatch(boolean validateDispatch)
+ {
+ this.validateDispatch = validateDispatch;
+ }
+
+
+ public void update(Observable o, Object arg)
+ {
+ // todo
+ }
+}
Property changes on:
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchBinding.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified:
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchHTTPBinding.java
===================================================================
---
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchHTTPBinding.java 2007-04-10
15:56:19 UTC (rev 2784)
+++
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchHTTPBinding.java 2007-04-10
16:20:15 UTC (rev 2785)
@@ -23,21 +23,18 @@
// $Id$
-import java.io.ByteArrayOutputStream;
+import org.jboss.logging.Logger;
+import org.jboss.ws.core.HTTPMessageImpl;
+import org.jboss.ws.core.MessageAbstraction;
+import org.jboss.ws.core.jaxrpc.binding.BufferedStreamResult;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.Source;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.ws.WebServiceException;
import javax.xml.ws.Service.Mode;
+import javax.xml.ws.WebServiceException;
-import org.jboss.logging.Logger;
-import org.jboss.ws.core.HTTPMessageImpl;
-import org.jboss.ws.core.MessageAbstraction;
-import org.jboss.ws.core.jaxrpc.binding.BufferedStreamResult;
-
/**
* The Dispatch interface provides support for the dynamic invocation of a service
endpoint operations.
* The javax.xml.ws.Service interface acts as a factory for the creation of Dispatch
instances.
@@ -45,7 +42,7 @@
* @author Thomas.Diesler(a)jboss.com
* @since 04-Jul-2006
*/
-public class DispatchHTTPBinding
+public class DispatchHTTPBinding extends DispatchBinding
{
// provide logging
private final Logger log = Logger.getLogger(DispatchHTTPBinding.class);
@@ -70,6 +67,8 @@
{
Source source = (Source)obj;
reqMsg = new HTTPMessageImpl(source);
+ if(validateDispatch)
+ reqMsg.doValidate();
}
else if (jaxbContext != null)
{
Modified: trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java
===================================================================
---
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java 2007-04-10
15:56:19 UTC (rev 2784)
+++
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java 2007-04-10
16:20:15 UTC (rev 2785)
@@ -45,11 +45,13 @@
import org.jboss.logging.Logger;
import org.jboss.util.NotImplementedException;
import org.jboss.ws.core.MessageAbstraction;
+import org.jboss.ws.core.ConfigProvider;
import org.jboss.ws.core.client.HTTPRemotingConnection;
import org.jboss.ws.core.client.RemotingConnection;
import org.jboss.ws.core.client.SOAPRemotingConnection;
import org.jboss.ws.core.jaxws.binding.BindingProviderImpl;
import org.jboss.ws.metadata.umdm.EndpointMetaData;
+import org.jboss.ws.metadata.config.ConfigurationProvider;
/**
* The Dispatch interface provides support for the dynamic invocation of a service
endpoint operations.
@@ -152,9 +154,9 @@
public void invokeOneWay(T msg)
{
- MessageAbstraction reqMsg = getRequestMessage(msg);
try
{
+ MessageAbstraction reqMsg = getRequestMessage(msg);
String targetAddress = epMetaData.getEndpointAddress();
getRemotingConnection().invoke(reqMsg, targetAddress, true);
}
@@ -232,11 +234,13 @@
if (HTTPBinding.HTTP_BINDING.equals(bindingID))
{
DispatchHTTPBinding helper = new DispatchHTTPBinding(mode, type, jaxbContext);
+ ((ConfigurationProvider)epMetaData).configure(helper);
message = helper.getRequestMessage(obj);
}
else
{
DispatchSOAPBinding helper = new DispatchSOAPBinding(mode, type, jaxbContext);
+ ((ConfigurationProvider)epMetaData).configure(helper);
message = helper.getRequestMessage(obj);
}
return message;
Modified:
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchSOAPBinding.java
===================================================================
---
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchSOAPBinding.java 2007-04-10
15:56:19 UTC (rev 2784)
+++
trunk/jbossws-core/src/java/org/jboss/ws/core/jaxws/client/DispatchSOAPBinding.java 2007-04-10
16:20:15 UTC (rev 2785)
@@ -23,57 +23,48 @@
// $Id$
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.StringReader;
+import org.jboss.logging.Logger;
+import org.jboss.ws.core.MessageAbstraction;
+import org.jboss.ws.core.soap.*;
+import org.jboss.ws.core.utils.DOMWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.namespace.QName;
-import javax.xml.soap.MessageFactory;
-import javax.xml.soap.SOAPBody;
-import javax.xml.soap.SOAPElement;
-import javax.xml.soap.SOAPEnvelope;
-import javax.xml.soap.SOAPMessage;
+import javax.xml.soap.*;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
+import javax.xml.ws.Service.Mode;
import javax.xml.ws.WebServiceException;
-import javax.xml.ws.Service.Mode;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.StringReader;
-import org.jboss.logging.Logger;
-import org.jboss.ws.core.MessageAbstraction;
-import org.jboss.ws.core.soap.SOAPBodyElementDoc;
-import org.jboss.ws.core.soap.SOAPBodyImpl;
-import org.jboss.ws.core.soap.SOAPContentElement;
-import org.jboss.ws.core.soap.SOAPMessageImpl;
-import org.jboss.ws.core.soap.XMLFragment;
-import org.jboss.ws.core.utils.DOMWriter;
-
/**
* A helper that
*
* @author Thomas.Diesler(a)jboss.com
* @since 02-Apr-2007
*/
-public class DispatchSOAPBinding
+public class DispatchSOAPBinding extends DispatchBinding
{
// provide logging
private final Logger log = Logger.getLogger(DispatchSOAPBinding.class);
private JAXBContext jaxbContext;
private Class type;
- private Mode mode;
-
+ private Mode mode;
+
public DispatchSOAPBinding(Mode mode, Class type, JAXBContext jaxbContext)
{
this.mode = mode;
this.type = type;
this.jaxbContext = jaxbContext;
- }
+ }
public MessageAbstraction getRequestMessage(Object obj)
{
@@ -94,7 +85,16 @@
SOAPBodyImpl soapBody = (SOAPBodyImpl)reqMsg.getSOAPBody();
SOAPContentElement bodyElement = new SOAPBodyElementDoc(new
QName("DispatchSOAPBodyElement"));
bodyElement = (SOAPContentElement)soapBody.addChildElement(bodyElement);
- bodyElement.setXMLFragment(new XMLFragment(source));
+ XMLFragment xmlFragment = new XMLFragment(source);
+ bodyElement.setXMLFragment(xmlFragment);
+
+ // validate payload if necessary
+ if(validateDispatch)
+ {
+ // expand to DOM will validate the contents
+ xmlFragment.toElement();
+ }
+
}
if (mode == Mode.MESSAGE)
{
Modified: trunk/jbossws-core/src/java/org/jboss/ws/metadata/config/EndpointFeature.java
===================================================================
---
trunk/jbossws-core/src/java/org/jboss/ws/metadata/config/EndpointFeature.java 2007-04-10
15:56:19 UTC (rev 2784)
+++
trunk/jbossws-core/src/java/org/jboss/ws/metadata/config/EndpointFeature.java 2007-04-10
16:20:15 UTC (rev 2785)
@@ -27,5 +27,15 @@
* @since 14.12.2006
*/
public class EndpointFeature {
+
+ /**
+ * Enable MTOM per endpoint.
+ */
public final static String MTOM = "http://org.jboss.ws/mtom";
+
+ /**
+ * Validate the XML stream upon dispatch.
+ * Introduces an additional parsing overhead and could be disabled.
+ */
+ public final static String VALIDATE_DISPATCH =
"http://org.jboss.ws/dispatch/validate";
}
Modified: trunk/jbossws-core/src/java/org/jboss/ws/metadata/umdm/EndpointMetaData.java
===================================================================
---
trunk/jbossws-core/src/java/org/jboss/ws/metadata/umdm/EndpointMetaData.java 2007-04-10
15:56:19 UTC (rev 2784)
+++
trunk/jbossws-core/src/java/org/jboss/ws/metadata/umdm/EndpointMetaData.java 2007-04-10
16:20:15 UTC (rev 2785)
@@ -23,23 +23,6 @@
// $Id$
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Observable;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.jws.soap.SOAPBinding.ParameterStyle;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.ParameterMode;
-import javax.xml.ws.Service.Mode;
-
import org.jboss.logging.Logger;
import org.jboss.ws.Constants;
import org.jboss.ws.WSException;
@@ -55,16 +38,21 @@
import org.jboss.ws.core.jaxws.JAXBContextCache;
import org.jboss.ws.core.jaxws.JAXBDeserializerFactory;
import org.jboss.ws.core.jaxws.JAXBSerializerFactory;
+import org.jboss.ws.core.jaxws.client.DispatchBinding;
+import org.jboss.ws.core.jaxws.client.DispatchSOAPBinding;
import org.jboss.ws.core.utils.JavaUtils;
import org.jboss.ws.integration.UnifiedVirtualFile;
-import org.jboss.ws.metadata.config.CommonConfig;
-import org.jboss.ws.metadata.config.Configurable;
-import org.jboss.ws.metadata.config.ConfigurationProvider;
-import org.jboss.ws.metadata.config.EndpointFeature;
-import org.jboss.ws.metadata.config.JBossWSConfigFactory;
+import org.jboss.ws.metadata.config.*;
import org.jboss.ws.metadata.j2ee.serviceref.UnifiedPortComponentRefMetaData;
import org.jboss.ws.metadata.umdm.HandlerMetaData.HandlerType;
+import javax.jws.soap.SOAPBinding.ParameterStyle;
+import javax.xml.namespace.QName;
+import javax.xml.rpc.ParameterMode;
+import javax.xml.ws.Service.Mode;
+import java.lang.reflect.Method;
+import java.util.*;
+
/**
* A Service component describes a set of endpoints.
*
@@ -632,6 +620,11 @@
log.debug("Enable MTOM on endpoint " + getPortName());
}
}
+ else if (configurable instanceof DispatchBinding)
+ {
+ DispatchSOAPBinding dpb = (DispatchSOAPBinding)configurable;
+ dpb.setValidateDispatch(config.hasFeature(EndpointFeature.VALIDATE_DISPATCH));
+ }
}
public UnifiedVirtualFile getRootFile()
Modified:
trunk/jbossws-core/src/resources/jbossws.sar/META-INF/standard-jaxws-client-config.xml
===================================================================
---
trunk/jbossws-core/src/resources/jbossws.sar/META-INF/standard-jaxws-client-config.xml 2007-04-10
15:56:19 UTC (rev 2784)
+++
trunk/jbossws-core/src/resources/jbossws.sar/META-INF/standard-jaxws-client-config.xml 2007-04-10
16:20:15 UTC (rev 2785)
@@ -7,6 +7,7 @@
<client-config>
<config-name>Standard Client</config-name>
+ <feature>http://org.jboss.ws/dispatch/validate</feature>
</client-config>
<client-config>