[jboss-svn-commits] JBossWS SVN: r671 - in trunk/src/main: java/org/jboss/ws/binding/soap java/org/jboss/ws/deployment java/org/jboss/ws/eventing/element java/org/jboss/ws/eventing/mgmt java/org/jboss/ws/integration/jboss java/org/jboss/ws/jaxrpc java/org/jboss/ws/jbossxb java/org/jboss/ws/metadata/wsdl java/org/jboss/ws/server java/org/jboss/ws/soap java/org/jboss/ws/soap/attachment java/org/jboss/ws/utils resources/samples/common
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Aug 3 04:56:15 EDT 2006
Author: heiko.braun at jboss.com
Date: 2006-08-03 04:55:49 -0400 (Thu, 03 Aug 2006)
New Revision: 671
Modified:
trunk/src/main/java/org/jboss/ws/binding/soap/JAXRPCBindingProvider.java
trunk/src/main/java/org/jboss/ws/deployment/JSR109MetaDataBuilder.java
trunk/src/main/java/org/jboss/ws/eventing/element/DeliveryType.java
trunk/src/main/java/org/jboss/ws/eventing/element/FilterType.java
trunk/src/main/java/org/jboss/ws/eventing/element/StatusRequest.java
trunk/src/main/java/org/jboss/ws/eventing/element/UnsubscribeRequest.java
trunk/src/main/java/org/jboss/ws/eventing/mgmt/SubscriptionManager.java
trunk/src/main/java/org/jboss/ws/integration/jboss/ServiceEndpointInvokerEJB3.java
trunk/src/main/java/org/jboss/ws/jaxrpc/CallImpl.java
trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBDeserializer.java
trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBMarshallerImpl.java
trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBSerializer.java
trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBUnmarshallerImpl.java
trunk/src/main/java/org/jboss/ws/jbossxb/SchemaBindingBuilder.java
trunk/src/main/java/org/jboss/ws/metadata/wsdl/WSDLDefinitionsFactory.java
trunk/src/main/java/org/jboss/ws/server/StandardEndpointServlet.java
trunk/src/main/java/org/jboss/ws/soap/SOAPContentElement.java
trunk/src/main/java/org/jboss/ws/soap/attachment/ContentHandlerRegistry.java
trunk/src/main/java/org/jboss/ws/utils/MimeUtils.java
trunk/src/main/java/org/jboss/ws/utils/ThreadLocalAssociation.java
trunk/src/main/resources/samples/common/imported-build.xml
Log:
merge from 1.0.3.DEV
Modified: trunk/src/main/java/org/jboss/ws/binding/soap/JAXRPCBindingProvider.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/binding/soap/JAXRPCBindingProvider.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/binding/soap/JAXRPCBindingProvider.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -706,16 +706,15 @@
contentElement.addNamespaceDeclaration(Constants.PREFIX_SOAP11_ENC, Constants.URI_SOAP11_ENC);
// The object value needs to be set after xmime:contentType
- if (paramMetaData.isXOP() == false)
+ if (paramMetaData.isXOP() )
{
- contentElement.setObjectValue(value);
+ SOAPMessageImpl soapMessage = (SOAPMessageImpl)
+ MessageContextAssociation.peekMessageContext().getMessage();
+ soapMessage.setXOPMessage(true);
}
- else
- {
- contentElement.setXMimeContentType(MimeUtils.resolveMimeType(value));
- contentElement.setObjectValue(value);
- }
+ contentElement.setObjectValue(value);
+
return contentElement;
}
@@ -795,7 +794,11 @@
throw new JAXRPCException("Cannot find child element: " + xmlName);
if(paramMetaData.isXOP())
- soapContentElement.setXMimeContentType(MimeUtils.resolveMimeType(paramMetaData.getJavaType()));
+ {
+ SOAPMessageImpl soapMessage = (SOAPMessageImpl)
+ MessageContextAssociation.peekMessageContext().getMessage();
+ soapMessage.setXOPMessage(true);
+ }
return soapContentElement;
}
Modified: trunk/src/main/java/org/jboss/ws/deployment/JSR109MetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR109MetaDataBuilder.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR109MetaDataBuilder.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -23,58 +23,28 @@
//$Id$
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.wsdl.Message;
-import javax.wsdl.Part;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.ParameterMode;
-import javax.xml.rpc.encoding.TypeMappingRegistry;
-import javax.xml.ws.addressing.AddressingConstants;
-
-import org.apache.xerces.xs.XSComplexTypeDefinition;
import org.apache.xerces.xs.XSTypeDefinition;
import org.jboss.logging.Logger;
import org.jboss.ws.Constants;
import org.jboss.ws.WSException;
+import org.jboss.ws.xop.XOPScanner;
import org.jboss.ws.addressing.AddressingConstantsImpl;
-import org.jboss.ws.jaxrpc.LiteralTypeMapping;
-import org.jboss.ws.jaxrpc.ParameterStyle;
-import org.jboss.ws.jaxrpc.Style;
-import org.jboss.ws.jaxrpc.TypeMappingImpl;
-import org.jboss.ws.jaxrpc.TypeMappingRegistryImpl;
-import org.jboss.ws.jaxrpc.Use;
-import org.jboss.ws.metadata.EndpointMetaData;
-import org.jboss.ws.metadata.OperationMetaData;
-import org.jboss.ws.metadata.ParameterMetaData;
-import org.jboss.ws.metadata.ServiceMetaData;
-import org.jboss.ws.metadata.TypeMappingMetaData;
-import org.jboss.ws.metadata.TypesMetaData;
-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.MethodParamPartsMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.ServiceEndpointInterfaceMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.ServiceEndpointMethodMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.VariableMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.WsdlMessageMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.WsdlReturnValueMapping;
-import org.jboss.ws.metadata.wsdl.WSDLBinding;
-import org.jboss.ws.metadata.wsdl.WSDLBindingOperation;
-import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
-import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
-import org.jboss.ws.metadata.wsdl.WSDLInterface;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperation;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperationInput;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperationOutput;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperationPart;
-import org.jboss.ws.metadata.wsdl.WSDLProperty;
-import org.jboss.ws.metadata.wsdl.WSDLTypes;
-import org.jboss.ws.metadata.wsdl.WSDLUtils;
+import org.jboss.ws.jaxrpc.*;
+import org.jboss.ws.metadata.*;
+import org.jboss.ws.metadata.jaxrpcmapping.*;
+import org.jboss.ws.metadata.wsdl.*;
import org.jboss.ws.metadata.wsdl.xmlschema.JBossXSModel;
import org.jboss.ws.utils.JavaUtils;
+import javax.wsdl.Message;
+import javax.wsdl.Part;
+import javax.xml.namespace.QName;
+import javax.xml.rpc.ParameterMode;
+import javax.xml.rpc.encoding.TypeMappingRegistry;
+import javax.xml.ws.addressing.AddressingConstants;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* A meta data builder that is based on webservices.xml.
*
@@ -363,20 +333,21 @@
WSDLTypes wsdlTypes = wsdlOperation.getWsdlInterface().getWsdlDefinitions().getWsdlTypes();
JBossXSModel schemaModel = WSDLUtils.getSchemaModel(wsdlTypes);
XSTypeDefinition xsType = schemaModel.getTypeDefinition(xmlType.getLocalPart(), xmlType.getNamespaceURI());
- if (xsType instanceof XSComplexTypeDefinition
- && xsType.getNamespace().equals(Constants.NS_XML_MIME) )
+ XOPScanner scanner = new XOPScanner();
+ if(scanner.findXOPTypeDef(xsType)!=null)
{
- XSComplexTypeDefinition xsComplexType = (XSComplexTypeDefinition)xsType;
- if (xsComplexType.getSimpleType() != null)
- {
- String simpleTypeName = xsComplexType.getSimpleType().getName();
- if ("base64Binary".equals(simpleTypeName))
- paramMetaData.setXOP(true);
- }
+ // FIXME: read the xmime:contentType from the element declaration
+ // See SchemaUtils#findXOPTypeDef(XSTypeDefinition typeDef) for details
- // FIXME: read the xmime:expectedContentTypes from the element declaration
- //XSElementDeclaration elDecl = schemaModel.getElementDeclaration(xmlName.getLocalPart(), xmlName.getNamespaceURI());
- //elDecl = ((JBossXSElementDeclaration)elDecl).getXSElementDeclaration();
+ /*
+ FIXME: the classloader is not set yet
+ paramMetaData.setXopContentType(
+ MimeUtils.resolveMimeType(paramMetaData.getJavaType())
+ );
+ */
+
+ paramMetaData.setXOP(true);
+
}
}
@@ -485,6 +456,7 @@
}
ParameterMetaData inMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
+ setupAttachmentParameter(opInput, inMetaData);
epMetaData.setParameterStyle(isWrapParameters ? ParameterStyle.WRAPPED : ParameterStyle.BARE);
inMetaData.setInHeader(opInput.getProperty(Constants.WSDL_PROPERTY_APPLICATION_DATA) != null);
opMetaData.addParameter(inMetaData);
Modified: trunk/src/main/java/org/jboss/ws/eventing/element/DeliveryType.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/eventing/element/DeliveryType.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/eventing/element/DeliveryType.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -56,6 +56,7 @@
{
private URI mode;
private SOAPElement[] _any;
+ public String _value;
private EndpointReference notifyTo;
public URI getMode()
@@ -87,4 +88,13 @@
{
this.notifyTo = notifyTo;
}
+ public String get_value()
+ {
+ return _value;
+ }
+
+ public void set_value(String _value)
+ {
+ this._value = _value;
+ }
}
Modified: trunk/src/main/java/org/jboss/ws/eventing/element/FilterType.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/eventing/element/FilterType.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/eventing/element/FilterType.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -45,7 +45,7 @@
{
private URI dialect;
private SOAPElement[] _any;
- private String _value;
+ public String _value;
public URI getDialect()
{
Modified: trunk/src/main/java/org/jboss/ws/eventing/element/StatusRequest.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/eventing/element/StatusRequest.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/eventing/element/StatusRequest.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -21,6 +21,7 @@
*/
package org.jboss.ws.eventing.element;
+import javax.xml.soap.SOAPElement;
// $Id$
/**
@@ -29,5 +30,13 @@
*/
public class StatusRequest
{
+ private SOAPElement _any;
+ public SOAPElement get_any() {
+ return _any;
+ }
+
+ public void set_any(SOAPElement _any) {
+ this._any = _any;
+ }
}
Modified: trunk/src/main/java/org/jboss/ws/eventing/element/UnsubscribeRequest.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/eventing/element/UnsubscribeRequest.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/eventing/element/UnsubscribeRequest.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -23,6 +23,7 @@
// $Id$
+import javax.xml.soap.SOAPElement;
import java.net.URI;
/**
@@ -32,6 +33,7 @@
public class UnsubscribeRequest
{
private URI identifier;
+ private SOAPElement _any;
public UnsubscribeRequest() {
}
@@ -48,4 +50,11 @@
{
this.identifier = identifier;
}
+ public SOAPElement get_any() {
+ return _any;
+ }
+
+ public void set_any(SOAPElement _any) {
+ this._any = _any;
+ }
}
Modified: trunk/src/main/java/org/jboss/ws/eventing/mgmt/SubscriptionManager.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/eventing/mgmt/SubscriptionManager.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/eventing/mgmt/SubscriptionManager.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -105,6 +105,7 @@
*/
private ThreadPoolExecutor threadPool;
+ private boolean isDispatcherBound = false;
/**
* subscription watchdog that maintains expirations
*/
@@ -145,9 +146,6 @@
watchDog = new WatchDog(subscriptionMapping);
watchDog.startup();
- // bind dispatcher to JNDI
- Util.rebind(new InitialContext(), EventingConstants.DISPATCHER_JNDI_NAME, new DispatcherDelegate("localhost"));
- log.info("Bound event dispatcher to java:/" + EventingConstants.DISPATCHER_JNDI_NAME);
}
public void stop()
@@ -192,6 +190,8 @@
*/
public void registerEventSource(EventingEndpointDI deploymentInfo)
{
+ // workaround for JBWS-1006
+ lazyBindEventDispatcher();
EventSource eventSource = builder.newEventSource(deploymentInfo);
if (eventSourceMapping.containsKey(eventSource.getNameSpace()) == false)
{
@@ -212,6 +212,23 @@
}
}
+ private void lazyBindEventDispatcher()
+ {
+ if(!isDispatcherBound)
+ {
+ try
+ {
+ // bind dispatcher to JNDI
+ Util.rebind(new InitialContext(), EventingConstants.DISPATCHER_JNDI_NAME, new DispatcherDelegate("localhost"));
+ log.info("Bound event dispatcher to java:/" + EventingConstants.DISPATCHER_JNDI_NAME);
+ isDispatcherBound = true;
+ }
+ catch (NamingException e)
+ {
+ throw new WSException("Unable to bind EventDispatcher ", e);
+ }
+ }
+ }
/**
* the of deployment info's is unknown therefore we try to
* update the event source manager EPR anytime.
Modified: trunk/src/main/java/org/jboss/ws/integration/jboss/ServiceEndpointInvokerEJB3.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/integration/jboss/ServiceEndpointInvokerEJB3.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/integration/jboss/ServiceEndpointInvokerEJB3.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -104,7 +104,7 @@
Principal principal = SecurityAssociation.getPrincipal();
Object credential = SecurityAssociation.getCredential();
- SOAPMessageContextImpl msgContext = MessageContextAssociation.getMessageContext();
+ SOAPMessageContextBase msgContext = MessageContextAssociation.getMessageContext();
Invocation inv = new Invocation(null, method, args, null, principal, credential);
inv.setValue(InvocationKey.SOAP_MESSAGE_CONTEXT, msgContext);
Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/CallImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/CallImpl.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/CallImpl.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -491,6 +491,8 @@
*/
public Object getProperty(String name)
{
+ if(null == name)
+ throw new JAXRPCException("Unsupported property: " + name);
// CTS: com/sun/ts/tests/jaxrpc/api/javax_xml_rpc/Call/Client.java#SetGetPropertyTest2
if (name.startsWith("javax.xml.rpc") && standardProperties.contains(name) == false)
throw new JAXRPCException("Unsupported property: " + name);
@@ -502,6 +504,8 @@
*/
public void setProperty(String name, Object value)
{
+ if(null == name)
+ throw new JAXRPCException("Unsupported property: " + name);
// CTS: com/sun/ts/tests/jaxrpc/api/javax_xml_rpc/Call/Client.java#SetGetPropertyTest2
if (name.startsWith("javax.xml.rpc") && standardProperties.contains(name) == false)
throw new JAXRPCException("Unsupported property: " + name);
Modified: trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBDeserializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBDeserializer.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBDeserializer.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -46,12 +46,12 @@
// provide logging
private static final Logger log = Logger.getLogger(JBossXBDeserializer.class);
- private JBossXBUnmarshallerImpl jaxbUnmarshaller;
+ private JBossXBUnmarshaller unmarshaller;
public JBossXBDeserializer() throws BindingException
{
// Get the JAXB marshaller for complex objects
- jaxbUnmarshaller = new JBossXBUnmarshallerImpl();
+ unmarshaller = new JBossXBUnmarshallerImpl();
}
/**
@@ -78,41 +78,30 @@
Object value = null;
String typeName = xmlType.getLocalPart();
- // Currently we intercept xsd:base64Binary types to allow callback for
- // XOP processing. This should actually be moved to jbossxb once it supports
- // the AttachMarshaller and Unmarshaller interfaces.
-
- if (attachmentUnmarshaller.isXOPPackage() && "base64Binary".equals(typeName))
+ try
{
- value = deserializeXOP(val, value);
- }
- else
- {
- try
- {
- // Get the parsed model
- XSModel model = jaxrpcContext.getXsModel();
+ // Get the parsed model
+ XSModel model = jaxrpcContext.getXsModel();
- // Get the jaxrpc-mapping.xml meta data
- JavaWsdlMapping jaxrpcMapping = jaxrpcContext.getJavaWsdlMapping();
+ // Get the jaxrpc-mapping.xml meta data
+ JavaWsdlMapping jaxrpcMapping = jaxrpcContext.getJavaWsdlMapping();
- jaxbUnmarshaller.setProperty(JBossXBConstants.JBXB_XS_MODEL, model);
- jaxbUnmarshaller.setProperty(JBossXBConstants.JBXB_ROOT_QNAME, xmlName);
- jaxbUnmarshaller.setProperty(JBossXBConstants.JBXB_TYPE_QNAME, xmlType);
- jaxbUnmarshaller.setProperty(JBossXBConstants.JBXB_JAVA_MAPPING, jaxrpcMapping);
+ unmarshaller.setProperty(JBossXBConstants.JBXB_XS_MODEL, model);
+ unmarshaller.setProperty(JBossXBConstants.JBXB_ROOT_QNAME, xmlName);
+ unmarshaller.setProperty(JBossXBConstants.JBXB_TYPE_QNAME, xmlType);
+ unmarshaller.setProperty(JBossXBConstants.JBXB_JAVA_MAPPING, jaxrpcMapping);
- ByteArrayInputStream ins = new ByteArrayInputStream(val.getBytes("UTF-8"));
- value = jaxbUnmarshaller.unmarshal(ins);
- }
- catch (RuntimeException rte)
- {
- throw rte;
- }
- catch (Exception ex)
- {
- throw new BindingException(ex);
- }
+ ByteArrayInputStream ins = new ByteArrayInputStream(val.getBytes("UTF-8"));
+ value = unmarshaller.unmarshal(ins);
}
+ catch (RuntimeException rte)
+ {
+ throw rte;
+ }
+ catch (Exception ex)
+ {
+ throw new BindingException(ex);
+ }
log.debug("deserialized: " + (value != null ? value.getClass().getName() : null));
return value;
Modified: trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBMarshallerImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBMarshallerImpl.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBMarshallerImpl.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -23,14 +23,6 @@
// $Id$
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.HashMap;
-
-import javax.xml.namespace.QName;
-
-import org.apache.xerces.xs.XSModel;
import org.jboss.logging.Logger;
import org.jboss.util.NotImplementedException;
import org.jboss.ws.WSException;
@@ -38,25 +30,28 @@
import org.jboss.ws.metadata.jaxrpcmapping.JavaXmlTypeMapping;
import org.jboss.ws.metadata.jaxrpcmapping.VariableMapping;
import org.jboss.ws.utils.JavaUtils;
+import org.jboss.ws.xop.XOPMarshallerImpl;
import org.jboss.xb.binding.Constants;
-import org.jboss.xb.binding.MappingObjectModelProvider;
-import org.jboss.xb.binding.MarshallingContext;
-import org.jboss.xb.binding.ObjectLocalMarshaller;
-import org.jboss.xb.binding.XercesXsMarshaller;
-import org.jboss.xb.util.Dom2Sax;
-import org.w3c.dom.Element;
+
+import org.jboss.xb.binding.sunday.marshalling.MarshallerImpl;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
import org.w3c.dom.Node;
import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
+import javax.xml.namespace.QName;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.HashMap;
+
/**
- * An implementation of a JAXB Marshaller.
+ * An implementation of a JAXB Marshaller that uses the JBossXB schema binding marshaller.
*
* @author Thomas.Diesler at jboss.org
- * @since 18-Oct-2004
+ * @author Heiko.Braun at jboss.org
+ * @since 05-Jul-2006
*/
-public class JBossXBMarshallerImpl
-{
+public class JBossXBMarshallerImpl implements JBossXBMarshaller {
// provide logging
private static final Logger log = Logger.getLogger(JBossXBMarshallerImpl.class);
@@ -64,16 +59,18 @@
// The marshaller properties
private HashMap properties = new HashMap();
- private XercesXsMarshaller delegate;
+ private MarshallerImpl delegate;
public JBossXBMarshallerImpl()
{
- delegate = new XercesXsMarshaller();
- delegate.setProperty(XercesXsMarshaller.PROP_OUTPUT_XML_VERSION, "false");
- delegate.setProperty(XercesXsMarshaller.PROP_OUTPUT_INDENTATION, "false");
+
+ //ClassInfos.disableCache();
+
+ delegate = new MarshallerImpl();
+ delegate.setProperty(org.jboss.xb.binding.Marshaller.PROP_OUTPUT_XML_VERSION, "false");
+ delegate.setProperty(org.jboss.xb.binding.Marshaller.PROP_OUTPUT_INDENTATION, "false");
delegate.declareNamespace("xsi", Constants.NS_XML_SCHEMA_INSTANCE);
delegate.setSupportNil(true);
- delegate.setSimpleContentProperty("_value");
}
/**
@@ -89,7 +86,8 @@
delegate.addRootElement(xmlName);
QName xmlType = (QName)getProperty(JBossXBConstants.JBXB_TYPE_QNAME);
- if (xmlType != null)
+ boolean isAnonymousType = (xmlType != null && xmlType.getLocalPart().startsWith(">"));
+ if (xmlType != null && !isAnonymousType)
{
delegate.setRootTypeQName(xmlType);
}
@@ -101,11 +99,8 @@
delegate.declareNamespace(prefix, nsURI);
}
- MappingObjectModelProvider provider = new MappingObjectModelProvider();
- provider.setIgnoreLowLine(false);
- provider.setIgnoreNotFoundField(false);
-
- // todo complete wsdl mapping merge
+ // wildcards still need to be mapped
+ // todo: cleanup XB API
JavaWsdlMapping wsdlMapping = (JavaWsdlMapping)getProperty(JBossXBConstants.JBXB_JAVA_MAPPING);
if (wsdlMapping != null)
{
@@ -116,6 +111,7 @@
{
JavaXmlTypeMapping javaXmlMapping = javaXmlMappings[i];
VariableMapping[] variableMappings = javaXmlMapping.getVariableMappings();
+
if (variableMappings != null)
{
String clsName = javaXmlMapping.getJavaType();
@@ -124,13 +120,9 @@
if (clsQName != null)
{
- if ("element".equals(javaXmlMapping.getQnameScope()))
+ // TODO: legacy API usage, see JBWS-1091
+ if ("complexType".equalsIgnoreCase(javaXmlMapping.getQnameScope()))
{
- delegate.mapClassToGlobalElement(cls, clsQName.getLocalPart(), clsQName.getNamespaceURI(), null, provider);
- }
- else
- {
- delegate.mapClassToGlobalType(cls, clsQName.getLocalPart(), clsQName.getNamespaceURI(), null, provider);
delegate.mapClassToXsiType(cls, clsQName.getNamespaceURI(), clsQName.getLocalPart());
}
}
@@ -138,35 +130,20 @@
for (int j = 0; j < variableMappings.length; ++j)
{
VariableMapping variableMapping = variableMappings[j];
- String javaName = variableMapping.getJavaVariableName();
- if (variableMapping.getXmlElementName() != null)
+ if (variableMapping.getXmlWildcard())
{
- String xmlElementName = variableMapping.getXmlElementName();
- provider.mapFieldToElement(cls, javaName, "", xmlElementName, null);
+ delegate.mapFieldToWildcard(cls, "_any", JBossXBSupport.getWildcardMarshaller());
}
- else if (variableMapping.getXmlAttributeName() != null)
- {
- log.trace("Unmapped attribute: " + javaName);
- }
- else if (variableMapping.getXmlWildcard())
- {
- delegate.mapFieldToWildcard(cls, "_any", getWildcardMarshaller());
- }
- else
- {
- log.warn("Unmapped variable: " + javaName);
- }
}
}
}
}
}
- if (getProperty(JBossXBConstants.JBXB_XS_MODEL) != null)
- {
- XSModel model = (XSModel)getProperty(JBossXBConstants.JBXB_XS_MODEL);
- delegate.marshal(model, provider, obj, writer);
- }
+ // the actual marshalling
+ SchemaBinding schemaBinding = JBossXBSupport.getOrCreateSchemaBinding(properties);
+ schemaBinding.setXopMarshaller(new XOPMarshallerImpl());
+ delegate.marshal(schemaBinding, null, obj, writer);
}
catch (RuntimeException e)
{
@@ -178,53 +155,6 @@
}
}
- private ObjectLocalMarshaller getWildcardMarshaller()
- {
- ObjectLocalMarshaller wildcardMarshaller = new ObjectLocalMarshaller() {
- public void marshal(MarshallingContext ctx, Object o)
- {
- if (o == null)
- {
- return;
- }
-
- Element e = (Element)o;
- ContentHandler ch = ctx.getContentHandler();
- try
- {
- Dom2Sax.dom2sax(e, ch);
- }
- catch (SAXException e1)
- {
- throw new IllegalStateException("Failed to marshal DOM element " + new QName(e.getNamespaceURI(), e.getLocalName()) + ": " + e1.getMessage());
- }
- /*
- DOMSource domSource = new DOMSource(e);
- SAXResult streamResult = new SAXResult(ch);
- // if i use the system default transformer then it works
- // the one that is actually used does not declare namespaces
- //System.setProperty("javax.xml.transform.TransformerFactory", "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
- TransformerFactory tf = TransformerFactory.newInstance();
- Transformer serializer = null;
- try
- {
- serializer = tf.newTransformer();
- serializer.transform(domSource, streamResult);
- }
- catch(TransformerConfigurationException e1)
- {
- throw new JBossXBRuntimeException("Failed to create transformer", e1);
- }
- catch(TransformerException e1)
- {
- throw new JBossXBRuntimeException("Failed to marshal with transform", e1);
- }
- */
- }
- };
- return wildcardMarshaller;
- }
-
/**
* Marshal the content tree rooted at obj into SAX2 events.
*/
Modified: trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBSerializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBSerializer.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBSerializer.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -23,14 +23,8 @@
// $Id$
-import java.io.StringWriter;
-
-import javax.xml.namespace.QName;
-
import org.apache.xerces.xs.XSModel;
import org.jboss.logging.Logger;
-import org.jboss.ws.Constants;
-import org.jboss.ws.binding.AttachmentMarshallerImpl;
import org.jboss.ws.binding.BindingException;
import org.jboss.ws.binding.ComplexTypeSerializer;
import org.jboss.ws.binding.SerializationContext;
@@ -38,6 +32,9 @@
import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
import org.w3c.dom.NamedNodeMap;
+import javax.xml.namespace.QName;
+import java.io.StringWriter;
+
/**
* A Serializer that can handle complex types by delegating to JAXB.
*
@@ -49,12 +46,12 @@
// provide logging
private static final Logger log = Logger.getLogger(JBossXBSerializer.class);
- private JBossXBMarshallerImpl jaxbMarshaller;
+ private JBossXBMarshaller marshaller;
public JBossXBSerializer() throws BindingException
{
// Get the JAXB marshaller for complex objects
- jaxbMarshaller = new JBossXBMarshallerImpl();
+ marshaller = new JBossXBMarshallerImpl();
}
/**
@@ -79,41 +76,37 @@
// Expect the specific JAXRPC serialization context
SerializationContextJAXRPC jaxrpcContext = (SerializationContextJAXRPC)serContext;
-
+
try
{
- String xmlFragment = null;
+ // Get the parsed model
+ XSModel model = jaxrpcContext.getXsModel();
- AttachmentMarshallerImpl attachmentMarshaller = new AttachmentMarshallerImpl();
+ // Get the jaxrpc-mapping.xml object graph
+ JavaWsdlMapping jaxrpcMapping = jaxrpcContext.getJavaWsdlMapping();
- // Currently we intercept xsd:base64Binary types to allow callback for
- // XOP processing. This should actually be moved to jbossxb once it supports
- // the AttachMarshaller and Unmarshaller interfaces.
+ // schemabinding marshaller is the default delegate
+ JBossXBMarshaller delegate = marshaller;
- if (attachmentMarshaller.isXOPPackage() && xmlType.equals(Constants.TYPE_XMIME_DEFAULT))
+ if(value instanceof Exception)
{
- xmlFragment = serializeXOP(xmlName, value, serContext, attachmentMarshaller);
+ // todo: CTS workaround for custom exceptions, clarify when Alexey is back
+ // causes NPE in MarshallerImpl:458
+ delegate = new XercesXSMarshallerImpl();
}
- else
- {
- // Get the parsed model
- XSModel model = jaxrpcContext.getXsModel();
- // Get the jaxrpc-mapping.xml object graph
- JavaWsdlMapping jaxrpcMapping = jaxrpcContext.getJavaWsdlMapping();
+ // marshalling context
+ delegate.setProperty(JBossXBConstants.JBXB_XS_MODEL, model);
+ delegate.setProperty(JBossXBConstants.JBXB_TYPE_QNAME, xmlType);
+ delegate.setProperty(JBossXBConstants.JBXB_ROOT_QNAME, xmlName);
+ delegate.setProperty(JBossXBConstants.JBXB_JAVA_MAPPING, jaxrpcMapping);
- jaxbMarshaller.setProperty(JBossXBConstants.JBXB_XS_MODEL, model);
- jaxbMarshaller.setProperty(JBossXBConstants.JBXB_TYPE_QNAME, xmlType);
- jaxbMarshaller.setProperty(JBossXBConstants.JBXB_ROOT_QNAME, xmlName);
- jaxbMarshaller.setProperty(JBossXBConstants.JBXB_JAVA_MAPPING, jaxrpcMapping);
+ // marshall
+ StringWriter strwr = new StringWriter();
+ delegate.marshal(value, strwr);
+ String xmlFragment = strwr.toString();
- StringWriter strwr = new StringWriter();
- jaxbMarshaller.marshal(value, strwr);
- xmlFragment = strwr.toString();
-
- log.debug("serialized: " + xmlFragment);
- }
-
+ log.debug("serialized: " + xmlFragment);
return xmlFragment;
}
catch (RuntimeException rte)
Modified: trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBUnmarshallerImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBUnmarshallerImpl.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/jbossxb/JBossXBUnmarshallerImpl.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -26,16 +26,8 @@
import java.io.InputStream;
import java.util.HashMap;
-import javax.xml.namespace.QName;
-
import org.jboss.ws.WSException;
-import org.jboss.ws.common.SOAPMessageContextBase;
-import org.jboss.ws.metadata.EndpointMetaData;
-import org.jboss.ws.metadata.OperationMetaData;
-import org.jboss.ws.metadata.ServiceMetaData;
-import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
-import org.jboss.ws.metadata.wsdl.xmlschema.JBossXSModel;
-import org.jboss.ws.soap.MessageContextAssociation;
+import org.jboss.ws.xop.XOPUnmarshallerImpl;
import org.jboss.xb.binding.JBossXBException;
import org.jboss.xb.binding.UnmarshallerFactory;
import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
@@ -47,7 +39,7 @@
* @author Alexey.Loubyansky at jboss.org
* @since 18-Oct-2004
*/
-public class JBossXBUnmarshallerImpl
+public class JBossXBUnmarshallerImpl implements JBossXBUnmarshaller
{
// The marshaller properties
private HashMap<String, Object> properties = new HashMap<String, Object>();
@@ -60,8 +52,8 @@
assertRequiredProperties();
org.jboss.xb.binding.Unmarshaller unm = UnmarshallerFactory.newInstance().newUnmarshaller();
- SchemaBinding schemaBinding = getSchemaBinding();
-
+ SchemaBinding schemaBinding = JBossXBSupport.getOrCreateSchemaBinding(properties);
+ schemaBinding.setXopUnmarshaller(new XOPUnmarshallerImpl());
try
{
return unm.unmarshal(is, schemaBinding);
@@ -94,41 +86,7 @@
properties.put(name, value);
}
- private SchemaBinding getSchemaBinding()
- {
- SchemaBinding schemaBinding = null;
- SchemaBindingBuilder bindingBuilder = new SchemaBindingBuilder();
- QName xmlName = (QName)getProperty(JBossXBConstants.JBXB_ROOT_QNAME);
- QName xmlType = (QName)getProperty(JBossXBConstants.JBXB_TYPE_QNAME);
-
- // Get the eagerly initialized SchameBinding from the ServiceMetaData
- SOAPMessageContextBase msgContext = MessageContextAssociation.peekMessageContext();
- if (msgContext != null)
- {
- OperationMetaData opMetaData = msgContext.getOperationMetaData();
- EndpointMetaData epMetaData = opMetaData.getEndpointMetaData();
- ServiceMetaData serviceMetaData = epMetaData.getServiceMetaData();
- schemaBinding = serviceMetaData.getSchemaBinding();
- }
-
- // In case of an unconfigured call generate the SchemaBinding from JAXB properties
- if (schemaBinding == null)
- {
- JBossXSModel xsModel = (JBossXSModel)getProperty(JBossXBConstants.JBXB_XS_MODEL);
- JavaWsdlMapping wsdlMapping = (JavaWsdlMapping)getProperty(JBossXBConstants.JBXB_JAVA_MAPPING);
- schemaBinding = bindingBuilder.buildSchemaBinding(xsModel, wsdlMapping);
- }
-
- // The SchemaBinding expects to have an element binding for the
- // incomming xml element. Because the same element name can be reused
- // by various operations with different xml types, we have to add the
- // element binding on every invocation.
- bindingBuilder.bindParameterToElement(schemaBinding, xmlName, xmlType);
-
- return schemaBinding;
- }
-
/** Assert the required properties
*/
private void assertRequiredProperties()
Modified: trunk/src/main/java/org/jboss/ws/jbossxb/SchemaBindingBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jbossxb/SchemaBindingBuilder.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/jbossxb/SchemaBindingBuilder.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -45,29 +45,21 @@
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.AttributeBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.CharactersHandler;
-import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver;
-import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.ParticleHandler;
-import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.WildcardBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.XsdBinder;
+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;
/**
- * An implementation of a JAXB Unmarshaller.
+ * Create SchemaBinding from XSModel and jaxrpc-mapping.
*
* @author Thomas.Diesler at jboss.org
* @author Alexey.Loubyansky at jboss.org
* @since 18-Oct-2004
+ * @see XSModel
+ * @see JavaWsdlMapping
*/
public class SchemaBindingBuilder
{
@@ -79,7 +71,8 @@
*/
public SchemaBinding buildSchemaBinding(XSModel model, JavaWsdlMapping wsdlMapping)
{
- SchemaBinding schemaBinding = XsdBinder.bind(model, new DefaultSchemaResolver());
+ JBossEntityResolver resolver = JBossXBSupport.createEntityResolver();
+ SchemaBinding schemaBinding = XsdBinder.bind(model, new DefaultSchemaResolver(resolver));
schemaBinding.setIgnoreLowLine(false);
schemaBinding.setIgnoreUnresolvedFieldOrClass(false);
@@ -155,7 +148,10 @@
TypeBinding typeBinding = getTypeBinding(schemaBinding, typeMapping);
if (typeBinding != null)
{
- // Set the java type
+ // Set the java type, but skip SimpleTypes
+ boolean isSimpleTypeBinding = (typeBinding instanceof SimpleTypeBinding);
+ if(isSimpleTypeBinding == false)
+ {
ClassMetaData classMetaData = typeBinding.getClassMetaData();
if (classMetaData == null)
{
@@ -179,6 +175,7 @@
{
QName typeQName = typeBinding.getQName();
log.trace("Bound: [xmlType=" + typeQName + ",javaType=" + javaType + "]");
+ }
}
VariableMapping[] variableMappings = typeMapping.getVariableMappings();
@@ -332,7 +329,9 @@
String qnameScope = typeMapping.getQnameScope();
QName anonymousTypeQName = typeMapping.getAnonymousTypeQName();
if (anonymousTypeQName != null)
- return getAnonymousTypeBinding(schemaBinding, anonymousTypeQName.getLocalPart());
+ {
+ return getAnonymousTypeBinding(schemaBinding, anonymousTypeQName);
+ }
QName xmlType = typeMapping.getRootTypeQName();
@@ -364,8 +363,9 @@
return typeBinding;
}
- public TypeBinding getAnonymousTypeBinding(SchemaBinding schemaBinding, String expression)
+ public TypeBinding getAnonymousTypeBinding(SchemaBinding schemaBinding, QName typeQName)
{
+ String expression = typeQName.getLocalPart();
if (log.isTraceEnabled())
log.trace("Searching for anonymous expression: " + expression);
@@ -403,9 +403,10 @@
public void bindParameterToElement(SchemaBinding schemaBinding, QName xmlName, QName xmlType)
{
TypeBinding typeBinding;
- if (xmlType.getLocalPart().startsWith(">"))
+ boolean isAnonymousType = xmlType.getLocalPart().startsWith(">");
+ if (isAnonymousType)
{
- typeBinding = getAnonymousTypeBinding(schemaBinding, xmlType.getLocalPart());
+ typeBinding = getAnonymousTypeBinding(schemaBinding, xmlType);
}
else
{
@@ -414,7 +415,8 @@
if (typeBinding != null)
{
- schemaBinding.addElement(xmlName, typeBinding);
+ if(!isAnonymousType)
+ schemaBinding.addElement(xmlName, typeBinding);
}
else if (xmlType.equals(Constants.TYPE_LITERAL_ANYTYPE) == false)
{
Modified: trunk/src/main/java/org/jboss/ws/metadata/wsdl/WSDLDefinitionsFactory.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/wsdl/WSDLDefinitionsFactory.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/metadata/wsdl/WSDLDefinitionsFactory.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -42,8 +42,11 @@
import org.jboss.util.xml.DOMUtils;
import org.jboss.util.xml.JBossEntityResolver;
import org.jboss.ws.Constants;
+import org.jboss.ws.WSException;
+import org.jboss.ws.jbossxb.JBossXBSupport;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import com.ibm.wsdl.xml.WSDLReaderImpl;
@@ -99,6 +102,7 @@
if (wsdlLocation == null)
throw new IllegalArgumentException("URL cannot be null");
+ EntityResolver entityResolver = JBossXBSupport.createEntityResolver();
log.debug("parse: " + wsdlLocation.toExternalForm());
WSDLDefinitions wsdlDefinitions = null;
try
@@ -119,7 +123,7 @@
wsdlReader.setFeature(key, flag.booleanValue());
}
- wsdlDefinitions = wsdlReader.readWSDL(new WSDLLocatorImpl(wsdlLocation));
+ wsdlDefinitions = wsdlReader.readWSDL(new WSDLLocatorImpl(entityResolver, wsdlLocation));
wsdlDefinitions.setWsdlDocument(wsdlDoc);
}
else if (Constants.NS_WSDL11.equals(defaultNamespace))
@@ -138,10 +142,10 @@
wsdlReader.setFeature(key, flag.booleanValue());
}
- // inject entity resolver
- ((WSDLReaderImpl)wsdlReader).setEntityResolver(new JBossEntityResolver());
+ // Set EntityResolver in patched version of wsdl4j-1.5.2jboss
+ ((WSDLReaderImpl)wsdlReader).setEntityResolver(entityResolver);
- Definition definition = wsdlReader.readWSDL(new WSDLLocatorImpl(wsdlLocation));
+ Definition definition = wsdlReader.readWSDL(new WSDLLocatorImpl(entityResolver, wsdlLocation));
wsdlDefinitions = new WSDL11Reader().processDefinition(definition, wsdlLocation);
wsdlDefinitions.setWsdlDocument(wsdlDoc);
}
@@ -212,14 +216,16 @@
*/
public static class WSDLLocatorImpl implements WSDLLocator
{
+ private EntityResolver entityResolver;
private URL wsdlURL;
private String latestImportURI;
- public WSDLLocatorImpl(URL wsdlFile)
+ public WSDLLocatorImpl(EntityResolver entityResolver, URL wsdlFile)
{
if (wsdlFile == null)
throw new IllegalArgumentException("WSDL file argument cannot be null");
+ this.entityResolver = entityResolver;
this.wsdlURL = wsdlFile;
}
@@ -297,18 +303,27 @@
try
{
- log.trace("Resolved to: " + wsdlImport);
- InputStream is = new URL(wsdlImport).openStream();
- if (is == null)
- throw new IllegalArgumentException("Cannot import wsdl from [" + wsdlImport + "]");
-
- latestImportURI = wsdlImport;
- return new InputSource(is);
+ log.trace("Trying to resolve: " + wsdlImport);
+ InputSource inputSource = entityResolver.resolveEntity(wsdlImport, wsdlImport);
+ if (inputSource != null)
+ {
+ latestImportURI = wsdlImport;
+ }
+ else
+ {
+ throw new IllegalArgumentException("Cannot resolve imported resource: " + wsdlImport);
+ }
+
+ return inputSource;
}
- catch (IOException e)
+ catch (RuntimeException rte)
{
- throw new RuntimeException("Cannot access imported wsdl [" + wsdlImport + "], " + e.getMessage());
+ throw rte;
}
+ catch (Exception e)
+ {
+ throw new WSException("Cannot access imported wsdl [" + wsdlImport + "], " + e.getMessage());
+ }
}
public String getLatestImportURI()
Modified: trunk/src/main/java/org/jboss/ws/server/StandardEndpointServlet.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/server/StandardEndpointServlet.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/server/StandardEndpointServlet.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -24,6 +24,7 @@
// $Id: AbstractServiceEndpointServlet.java 396 2006-05-23 09:48:45Z thomas.diesler at jboss.com $
import java.io.IOException;
+import java.io.Writer;
import java.net.URL;
import javax.management.ObjectName;
@@ -95,7 +96,12 @@
}
else
{
- throw new NotImplementedException("HTTP GET not supported");
+ res.setStatus(405);
+ res.setContentType("text/plain");
+ Writer out = res.getWriter();
+ out.write("HTTP GET not supported");
+ out.flush();
+ out.close();
}
}
Modified: trunk/src/main/java/org/jboss/ws/soap/SOAPContentElement.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/soap/SOAPContentElement.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/soap/SOAPContentElement.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -21,11 +21,6 @@
*/
package org.jboss.ws.soap;
-import java.io.ByteArrayInputStream;
-import java.lang.reflect.Array;
-import java.lang.reflect.Method;
-import java.util.Iterator;
-
import javax.xml.namespace.QName;
import javax.xml.rpc.JAXRPCException;
import javax.xml.soap.Name;
@@ -58,6 +53,13 @@
import org.w3c.dom.NodeList;
import org.w3c.dom.TypeInfo;
+
+import javax.activation.DataHandler;
+import java.lang.reflect.Array;
+import java.lang.reflect.Method;
+import java.util.Iterator;
+import java.io.IOException;
+
/**
* A SOAPElement that gives access to its content as XML fragment or Java object.
*
@@ -238,21 +240,8 @@
DeserializerFactoryBase deserializerFactory = getDeserializerFactory(typeMapping, javaType, xmlType);
DeserializerSupport des = (DeserializerSupport)deserializerFactory.getDeserializer();
- String strContent;
- if(getXMimeContentType() == null) {
- strContent = insertNamespaceDeclarations(getXMLFragment());
- }
- else
- {
- SOAPElement xopInclude = getXOPIncludeElement();
- if (xopInclude == null)
- throw new WSException("Cannot find element xop:Include");
+ String strContent = insertNamespaceDeclarations(getXMLFragment());
- strContent = DOMUtils.getAttributeValue(xopInclude, "href");
- if (strContent == null)
- throw new WSException("Cannot find XOP href attribute");
- }
-
Object obj = des.deserialize(getQName(), xmlType, strContent, serContext);
if (obj != null)
{
@@ -291,16 +280,23 @@
if (isAssignable == false)
{
- // MSFT hack
+ // MSFT hack: Force conversion according to the target java parameter
Object convertedObj = null;
- if(obj instanceof ByteArrayInputStream)
+ if(obj instanceof DataHandler)
{
MimeUtils utils = new MimeUtils();
MimeUtils.ByteArrayConverter converter = utils.getConverterFor(javaType);
- convertedObj = converter.convert( (ByteArrayInputStream)obj );
+ try
+ {
+ convertedObj = converter.convert( ((DataHandler)obj).getInputStream() );
+ }
+ catch (IOException e)
+ {
+ log.warn("Failed to convert from DataHandler", e);
+ }
}
- if(null == convertedObj) // conversion failed
+ if(null == convertedObj || !JavaUtils.isAssignableFrom(javaType, convertedObj.getClass()) ) // conversion failed
{
throw new WSException("Java type '" + javaType + "' is not assignable from: " + objType.getName());
}
@@ -334,34 +330,7 @@
this.isObjectValid = true;
}
- public String getXMimeContentType()
- {
- String contentType = getAttributeNS(Constants.NS_XML_MIME, "contentType");
- return (contentType.length() > 0 ? contentType : null);
- }
- public void setXMimeContentType(String contentType)
- {
- if (contentType == null)
- throw new IllegalArgumentException("Invalid null xmime:contentType");
-
- log.debug("xmime:contentType=" + contentType);
-
- // Mark the associated SOAPMessage as XOP message
- SOAPMessageImpl soapMessage = (SOAPMessageImpl)((SOAPEnvelopeImpl)getSOAPEnvelope()).getSOAPMessage();
- soapMessage.setXOPMessage(true);
-
- setAttributeNS(Constants.NS_XML_MIME, Constants.PREFIX_XMIME + ":contentType", contentType);
- if (getNamespaceURI(Constants.PREFIX_XMIME) == null)
- addNamespaceDeclaration(Constants.PREFIX_XMIME, Constants.NS_XML_MIME);
- }
-
- public SOAPElement getXOPIncludeElement()
- {
- QName qname = new QName(Constants.NS_XOP, "Include");
- return (SOAPElement)DOMUtils.getFirstChildElement(this, qname);
- }
-
private void removeContentsAsIs()
{
log.trace("removeContentsAsIs");
Modified: trunk/src/main/java/org/jboss/ws/soap/attachment/ContentHandlerRegistry.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/soap/attachment/ContentHandlerRegistry.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/soap/attachment/ContentHandlerRegistry.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -49,6 +49,7 @@
{
addRegistryEntry(XmlDataContentHandler.class);
addRegistryEntry(ImageDataContentHandler.class);
+ addRegistryEntry(ByteArrayContentHandler.class);
addRegistryEntry(text_plain.class);
addRegistryEntry(text_html.class);
addRegistryEntry(multipart_mixed.class);
Modified: trunk/src/main/java/org/jboss/ws/utils/MimeUtils.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/utils/MimeUtils.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/utils/MimeUtils.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -25,22 +25,21 @@
-import java.util.Set;
-import java.util.Map;
-import java.util.HashMap;
-import java.io.ByteArrayInputStream;
-import java.awt.image.BufferedImage;
+import com.sun.image.codec.jpeg.JPEGCodec;
+import com.sun.image.codec.jpeg.JPEGImageDecoder;
+import org.jboss.ws.Constants;
import javax.mail.internet.ContentType;
-import javax.mail.internet.ParseException;
import javax.mail.internet.MimeMultipart;
+import javax.mail.internet.ParseException;
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;
+import java.awt.image.BufferedImage;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
-import org.jboss.ws.Constants;
-import com.sun.image.codec.jpeg.JPEGImageDecoder;
-import com.sun.image.codec.jpeg.JPEGCodec;
-
/**
* Generic mime utility class.
*
@@ -188,7 +187,7 @@
public class ImageConverter implements ByteArrayConverter
{
- public Object convert(ByteArrayInputStream in) {
+ public Object convert(InputStream in) {
Object converted = null;
try
{
@@ -208,7 +207,7 @@
public class SourceConverter implements ByteArrayConverter
{
- public Object convert(ByteArrayInputStream in) {
+ public Object convert(InputStream in) {
Object converted = null;
try
@@ -226,7 +225,7 @@
public class StringConverter implements ByteArrayConverter
{
- public Object convert(ByteArrayInputStream in) {
+ public Object convert(InputStream in) {
Object converted = null;
try
{
@@ -248,7 +247,7 @@
public interface ByteArrayConverter
{
- Object convert(ByteArrayInputStream in);
+ Object convert(InputStream in);
}
Modified: trunk/src/main/java/org/jboss/ws/utils/ThreadLocalAssociation.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/utils/ThreadLocalAssociation.java 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/java/org/jboss/ws/utils/ThreadLocalAssociation.java 2006-08-03 08:55:49 UTC (rev 671)
@@ -21,7 +21,7 @@
*/
package org.jboss.ws.utils;
-// $Id: $
+// $Id$
import java.util.Stack;
@@ -39,8 +39,6 @@
/**
* Handles invocations on MDB endpoints.
- *
- * @see org.jboss.ws.server.ServiceEndpointInvokerMDB
*/
private static ThreadLocal invokerMDBAssoc = new ThreadLocal();
@@ -55,6 +53,16 @@
*/
private static InheritableThreadLocal<SecurityStore> strTransformAssoc = new InheritableThreadLocal<SecurityStore>();
+ /**
+ * Stores XOP callee information
+ * @see org.jboss.ws.xop.XOPContext#doInlineBase64
+ */
+ private static ThreadLocal<Boolean> XOPInlineAssoc = new ThreadLocal<Boolean>()
+ {
+ protected Boolean initialValue() {
+ return Boolean.FALSE;
+ }
+ };
public static ThreadLocal localInvokerMDBAssoc() {
return invokerMDBAssoc;
}
@@ -67,9 +75,14 @@
return strTransformAssoc;
}
+ public static ThreadLocal<Boolean> localXOPCalleeAssoc()
+ {
+ return XOPInlineAssoc;
+ }
public static void clear() {
invokerMDBAssoc.set(null);
msgContextAssoc.set(null);
strTransformAssoc.set(null);
+ XOPInlineAssoc.set(null);
}
}
Modified: trunk/src/main/resources/samples/common/imported-build.xml
===================================================================
--- trunk/src/main/resources/samples/common/imported-build.xml 2006-08-03 08:54:54 UTC (rev 670)
+++ trunk/src/main/resources/samples/common/imported-build.xml 2006-08-03 08:55:49 UTC (rev 671)
@@ -77,6 +77,7 @@
<include name="activation.jar"/>
<include name="commons-logging.jar"/>
<include name="javassist.jar"/>
+ <include name="jboss-xml-binding.jar"/>
<include name="jbossall-client.jar"/>
<include name="jbossretro-rt.jar"/>
<include name="jboss-backport-concurrent.jar"/>
More information about the jboss-svn-commits
mailing list