[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