cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dand...@apache.org
Subject svn commit: r469066 [1/3] - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/databinding/ api/src/main/java/org/apache/cxf/service/model/ common/common/src/main/java/org/apache/cxf/configuration/spring/ common/common/src/test/java/org/apache/c...
Date Mon, 30 Oct 2006 04:56:24 GMT
Author: dandiep
Date: Sun Oct 29 20:56:21 2006
New Revision: 469066

URL: http://svn.apache.org/viewvc?view=rev&rev=469066
Log:
o Clean up JaxWsServiceFactory.setClassInfo and make it readable/fixable.
o Add MessagePartInfo.typeClass as we are almost always binding a part to
  a class eventually. The only case when we are not is when we're doing
  WSDL introspection (i.e. WSDL2Java), but it doesn't hurt things to have
  get/setTypeClass there.
o Cleaned up JAXBDataBinding. Instead of walking the service model in it,
  we utilize the service model to build up the context. This has the following
  advantages:
  1. Not tied to JAX-WS
  2. Allows databinding of services which aren't backed by one class
  3. Reduces code duplication
o You'll realize JAXBDatabinding has a Class... constructor now. This
  does NOT walk classes anymore. It simply addes the classes to the context. 
o I fixed up WSDLServiceBuilder a little bit so it set the XML schema,
  part name, and element names correctly.
o Give the DataReader a MessagePartInfo so it can look at the generic type
  and grab the class info itself.
o Reworked the RPC namespace handling a bit. The net output should be 
  the exact same, but if something looks off let me know.
o Add a LoggingInInterceptor
o Support returning/receiving List<Foo> now (which is the reason I did
  all the above changes...)!

Added:
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java   (with props)
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java
      - copied, changed from r467469, incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBServiceModelInitializer.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java   (with props)
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ServiceImplTest.java   (with props)
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/getGreetings.xml   (with props)
Removed:
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBServiceModelInitializer.java
Modified:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/DataReader.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/DataWriter.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceModelUtil.java
    incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanMap.java
    incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/configuration/spring/SpringBeanMapTest.java
    incubator/cxf/trunk/rt/bindings/http/src/test/java/org/apache/cxf/binding/http/bare/BareServiceTest.java
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCOutInterceptor.java
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
    incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/RPCInInterceptorTest.java
    incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/RPCOutInterceptorTest.java
    incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/TestBase.java
    incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultOutInterceptor.java
    incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/TestBase.java
    incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLMessageInInterceptorTest.java
    incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLMessageOutInterceptorTest.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/ServiceWSDLBuilder.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/EventDataReader.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/EventDataWriter.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataReader.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataWriter.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/NodeDataReader.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/NodeDataWriter.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPBodyDataReader.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPBodyDataWriter.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPMessageDataReader.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLMessageDataReader.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLStreamDataReader.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLStreamDataWriter.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/BareInInterceptorTest.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/TestBase.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/io/XMLStreamDataReaderTest.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/io/XMLStreamDataWriterTest.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchInInterceptor.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/JaxWsClientTest.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/sayHi.xml
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBeanTest.java
    incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/AbstractServiceConfiguration.java
    incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/DefaultServiceConfiguration.java
    incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
    incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/SimpleMethodDispatcher.java
    incubator/cxf/trunk/rt/frontend/simple/src/test/java/org/apache/cxf/service/factory/ClientFactoryBeanTest.java
    incubator/cxf/trunk/rt/frontend/simple/src/test/java/org/apache/cxf/service/factory/ReflectionServiceFactoryTest.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/Proxy.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/DataReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/DataReader.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/DataReader.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/DataReader.java Sun Oct 29 20:56:21 2006
@@ -21,8 +21,10 @@
 
 import javax.xml.namespace.QName;
 
+import org.apache.cxf.service.model.MessagePartInfo;
+
 public interface DataReader<T> {
     Object read(T input);
-    Object read(QName name, T input);
-    Object read(QName name, T input, Class<?> cls);
+    Object read(MessagePartInfo part, T input);
+    Object read(QName name, T input, Class type);
 }

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/DataWriter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/DataWriter.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/DataWriter.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/DataWriter.java Sun Oct 29 20:56:21 2006
@@ -19,9 +19,9 @@
 
 package org.apache.cxf.databinding;
 
-import javax.xml.namespace.QName;
+import org.apache.cxf.service.model.MessagePartInfo;
 
 public interface DataWriter<T> {
     void write(Object obj, T output);
-    void write(Object obj, QName elName, T output);
+    void write(Object obj, MessagePartInfo part, T output);
 }

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java Sun Oct 29 20:56:21 2006
@@ -32,8 +32,9 @@
     private QName elementName;
     private boolean isInSoapHeader;
     private XmlSchemaAnnotated xmlSchema;
+    private Class<?> typeClass;
     
-    MessagePartInfo(QName n, AbstractMessageContainer info) {
+    public MessagePartInfo(QName n, AbstractMessageContainer info) {
         mInfo = info;
         pname = n;
     }
@@ -99,5 +100,13 @@
 
     public void setXmlSchema(XmlSchemaAnnotated xmlSchema) {
         this.xmlSchema = xmlSchema;
+    }
+
+    public Class<?> getTypeClass() {
+        return typeClass;
+    }
+
+    public void setTypeClass(Class<?> typeClass) {
+        this.typeClass = typeClass;
     }
 }

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceModelUtil.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceModelUtil.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceModelUtil.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceModelUtil.java Sun Oct 29 20:56:21 2006
@@ -71,13 +71,4 @@
         }
         return schemaInfo;
     }
-
-    public static QName getPartName(MessagePartInfo part) {
-        QName name = part.getElementQName();
-        if (name == null) {
-            name = part.getTypeQName();
-        }
-        return name;
-    }
-
 }

Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanMap.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanMap.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanMap.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanMap.java Sun Oct 29 20:56:21 2006
@@ -146,7 +146,11 @@
     }
 
     public Set<java.util.Map.Entry<String, V>> entrySet() {
-        throw new UnsupportedOperationException();
+        Set<Map.Entry<String, V>> entries = new HashSet<Map.Entry<String, V>>();
+        for (String k : keySet()) {
+            entries.add(new Entry<V>(this, k));
+        }
+        return entries;
     }
 
     @SuppressWarnings("unchecked")
@@ -202,5 +206,27 @@
             values.add(get(id));
         }
         return values;
+    }
+    
+    public static class Entry<V> implements Map.Entry<String, V> {
+        private SpringBeanMap<V> map;
+        private String key;
+
+        public Entry(SpringBeanMap<V> map, String key) {
+            this.map = map;
+            this.key = key;
+        }
+        
+        public String getKey() {
+            return key;
+        }
+
+        public V getValue() {
+            return map.get(key);
+        }
+
+        public V setValue(V value) {
+            return map.put(key, value);
+        }
     }
 }

Modified: incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/configuration/spring/SpringBeanMapTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/configuration/spring/SpringBeanMapTest.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/configuration/spring/SpringBeanMapTest.java (original)
+++ incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/configuration/spring/SpringBeanMapTest.java Sun Oct 29 20:56:21 2006
@@ -20,6 +20,8 @@
 
 import java.util.Collection;
 import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
 
 import junit.framework.TestCase;
 
@@ -44,6 +46,11 @@
         Person p2 = values.iterator().next();
         assertNotNull(p2);
         assertEquals(p, p2);
+        
+        Set<Entry<String, Person>> entries = beans.entrySet();
+        Entry<String, Person> e = entries.iterator().next();
+        assertEquals("dan", e.getKey());
+        assertEquals(p, e.getValue());
         
         Person p3 = new PersonImpl();
         beans.put("foo", p3);

Modified: incubator/cxf/trunk/rt/bindings/http/src/test/java/org/apache/cxf/binding/http/bare/BareServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/http/src/test/java/org/apache/cxf/binding/http/bare/BareServiceTest.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/bindings/http/src/test/java/org/apache/cxf/binding/http/bare/BareServiceTest.java (original)
+++ incubator/cxf/trunk/rt/bindings/http/src/test/java/org/apache/cxf/binding/http/bare/BareServiceTest.java Sun Oct 29 20:56:21 2006
@@ -18,6 +18,9 @@
  */
 package org.apache.cxf.binding.http.bare;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.w3c.dom.Document;
 
 import org.apache.cxf.binding.BindingFactoryManager;
@@ -28,7 +31,6 @@
 import org.apache.cxf.endpoint.ServerImpl;
 import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
 import org.apache.cxf.service.model.BindingOperationInfo;
-import org.apache.cxf.transport.http.JettyHTTPDestination;
 
 public class BareServiceTest extends AbstractRestTest {
     public void testCreation() throws Exception {
@@ -41,12 +43,13 @@
         sf.getServiceFactory().setWrapped(false);
         sf.setBindingFactory(new HttpBindingInfoFactoryBean());
         sf.setAddress("http://localhost:9001/");
-        sf.setStart(false);
+
+        Map<String, Object> props = new HashMap<String, Object>();
+        props.put("contextMatchStrategy", "stem");
+        sf.setProperties(props);
         
         ServerImpl svr = (ServerImpl) sf.create();
-        ((JettyHTTPDestination) svr.getDestination()).setContextMatchStrategy("stem");
-        svr.start();
-                
+
         URIMapper mapper = (URIMapper) svr.getEndpoint().getService().get(URIMapper.class.getName());
         assertNotNull(mapper);
         

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java Sun Oct 29 20:56:21 2006
@@ -24,6 +24,8 @@
 
 import javax.xml.namespace.QName;
 
+import org.apache.cxf.binding.soap.SoapFault;
+import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.databinding.DataReader;
 import org.apache.cxf.interceptor.AbstractInDatabindingInterceptor;
 import org.apache.cxf.interceptor.BareInInterceptor;
@@ -82,23 +84,23 @@
 
         StaxUtils.nextEvent(xmlReader);
         while (StaxUtils.toNextElement(xmlReader)) {
+            QName name = xmlReader.getName();
             int idx = parameters.size();
             MessagePartInfo p = msg.getMessageParts().get(idx);
             if (p == null) {
-                message.setContent(Exception.class, new RuntimeException("Parameter " + xmlReader.getName()
-                                                                         + " does not exist!"));
+                throw new SoapFault("Parameter " + xmlReader.getName() + " does not exist!",
+                                    ((SoapMessage)message).getVersion().getSender());
             }
-            QName name = xmlReader.getName();
             QName elName = new QName(operation.getOperationInfo().getName().getNamespaceURI(), 
                     p.getName().getLocalPart());
 
             if (!elName.getLocalPart().equals(name.getLocalPart())) {
                 String expMessage = "Parameter " + name + " does not equal to the name ["
                                     + elName.getLocalPart() + "] in the servicemodel!";
-                message.setContent(Exception.class, new RuntimeException(expMessage));
+                throw new SoapFault(expMessage, ((SoapMessage)message).getVersion().getSender());
             }
             Object param = null;
-            param = dr.read(elName, message, (Class)p.getProperty(Class.class.getName()));
+            param = dr.read(p, message);
             if (param != null) {
                 parameters.add(param);
             } else {

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCOutInterceptor.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCOutInterceptor.java Sun Oct 29 20:56:21 2006
@@ -21,13 +21,15 @@
 
 import java.util.List;
 
-import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
+import org.apache.cxf.binding.soap.SoapFault;
+import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.databinding.DataWriter;
 import org.apache.cxf.helpers.NSStack;
 import org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor;
+import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.model.BindingOperationInfo;
@@ -45,7 +47,6 @@
 
     public void handleMessage(Message message) {
         try {
-            
             NSStack nsStack = new NSStack();
             nsStack.push();
 
@@ -57,11 +58,15 @@
             XMLStreamWriter xmlWriter = getXMLStreamWriter(message);
             DataWriter<Message> dataWriter = getMessageDataWriter(message);
 
-            String opNs = addOperationNode(nsStack, message, xmlWriter);
+            addOperationNode(nsStack, message, xmlWriter);
 
             int countParts = 0;
             List<MessagePartInfo> parts = null;
 
+            System.out.println("operation " + operation);
+            System.out.println("name " + operation.getName());
+            System.out.println("output " + operation.getOutput());
+            
             if (!isRequestor(message)) {
                 parts = operation.getOutput().getMessageInfo().getMessageParts();
             } else {
@@ -72,23 +77,22 @@
             if (countParts > 0) {
                 List<?> objs = (List<?>) message.getContent(List.class);                
                 if (objs.size() < parts.size()) {
-                    message.setContent(Exception.class, new RuntimeException(
-                                    "The number of arguments is not equal!"));
+                    throw new SoapFault("The number of arguments is not equal!", 
+                                        ((SoapMessage) message).getVersion().getSender());
                 }
 
                 for (int idx = 0; idx < countParts; idx++) {
                     Object arg = objs.get(idx);
                     MessagePartInfo part = (MessagePartInfo) parts.get(idx);
-                    QName elName = new QName(opNs, part.getName().getLocalPart());
-                    dataWriter.write(arg, elName, message);
+
+                    dataWriter.write(arg, part, message);
                 }
             }
             // Finishing the writing.
             xmlWriter.writeEndElement();            
             message.getInterceptorChain().finishSubChain();
-        } catch (Exception e) {
-            e.printStackTrace();
-            message.setContent(Exception.class, e);
+        } catch (XMLStreamException e) {
+            throw new Fault(e);
         }
     }
 

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java Sun Oct 29 20:56:21 2006
@@ -24,28 +24,21 @@
 import java.util.List;
 import java.util.ResourceBundle;
 
-
-
-import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
 import org.w3c.dom.Element;
 
-
-
 import org.apache.cxf.binding.soap.SoapFault;
 import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.SoapVersion;
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.databinding.DataWriter;
 import org.apache.cxf.databinding.DataWriterFactory;
-
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
-
 import org.apache.cxf.service.Service;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.MessagePartInfo;
@@ -161,9 +154,8 @@
                         
                         startedHeader = true;
                     }
-                    QName elName = ServiceModelUtil.getPartName(part);
                     DataWriter<XMLStreamWriter> dataWriter = getDataWriter(message);
-                    dataWriter.write(arg, elName, xtw);
+                    dataWriter.write(arg, part, xtw);
                 }
                  
             }

Modified: incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/RPCInInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/RPCInInterceptorTest.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/RPCInInterceptorTest.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/RPCInInterceptorTest.java Sun Oct 29 20:56:21 2006
@@ -26,7 +26,6 @@
 import javax.xml.stream.XMLStreamReader;
 
 import org.apache.cxf.binding.soap.interceptor.RPCInInterceptor;
-
 import org.apache.cxf.jaxb.JAXBDataBinding;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.service.Service;
@@ -34,7 +33,6 @@
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.hello_world_rpclit.types.MyComplexStruct;
-import org.apache.hello_world_soap_http.RPCLitGreeterImpl;
 import org.easymock.classextension.EasyMock;
 import org.easymock.classextension.IMocksControl;
 
@@ -52,15 +50,13 @@
                 .toString());
         BindingInfo bi = si.getBinding(new QName(TNS, "Greeter_SOAPBinding_RPCLit"));
         BindingOperationInfo boi = bi.getOperation(new QName(TNS, OPNAME));
-        boi.getOperationInfo().getInput().getMessagePartByIndex(0).setProperty(Class.class.getName(), 
-                MyComplexStruct.class);
-        boi.getOperationInfo().getOutput().getMessagePartByIndex(0).setProperty(Class.class.getName(), 
-                MyComplexStruct.class);
+        boi.getOperationInfo().getInput().getMessagePartByIndex(0).setTypeClass(MyComplexStruct.class);
+        boi.getOperationInfo().getOutput().getMessagePartByIndex(0).setTypeClass(MyComplexStruct.class);
         soapMessage.getExchange().put(BindingOperationInfo.class, boi);
 
         control.reset(); 
         Service service = control.createMock(Service.class);
-        JAXBDataBinding dataBinding = new JAXBDataBinding(RPCLitGreeterImpl.class);
+        JAXBDataBinding dataBinding = new JAXBDataBinding(MyComplexStruct.class);
         service.getDataBinding();
         EasyMock.expectLastCall().andReturn(dataBinding).anyTimes();
         service.getServiceInfo();

Modified: incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/RPCOutInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/RPCOutInterceptorTest.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/RPCOutInterceptorTest.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/RPCOutInterceptorTest.java Sun Oct 29 20:56:21 2006
@@ -39,7 +39,6 @@
 import org.apache.cxf.staxutils.DepthXMLStreamReader;
 import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.hello_world_rpclit.types.MyComplexStruct;
-import org.apache.hello_world_soap_http.RPCLitGreeterImpl;
 import org.easymock.classextension.EasyMock;
 import org.easymock.classextension.IMocksControl;
 
@@ -63,7 +62,7 @@
 
         control.reset();
         Service service = control.createMock(Service.class);
-        JAXBDataBinding dataBinding = new JAXBDataBinding(RPCLitGreeterImpl.class);
+        JAXBDataBinding dataBinding = new JAXBDataBinding(MyComplexStruct.class);
         service.getDataBinding();
         EasyMock.expectLastCall().andReturn(dataBinding).anyTimes();
         service.getServiceInfo();

Modified: incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/TestBase.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/TestBase.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/TestBase.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/TestBase.java Sun Oct 29 20:56:21 2006
@@ -30,7 +30,6 @@
 import javax.wsdl.Service;
 import javax.wsdl.factory.WSDLFactory;
 import javax.wsdl.xml.WSDLReader;
-import javax.xml.bind.JAXBContext;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
@@ -39,9 +38,6 @@
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.binding.BindingFactoryManager;
-import org.apache.cxf.jaxb.JAXBDataReaderFactory;
-import org.apache.cxf.jaxb.JAXBDataWriterFactory;
-import org.apache.cxf.jaxb.JAXBEncoderDecoder;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.phase.PhaseInterceptorChain;
 import org.apache.cxf.service.model.BindingInfo;
@@ -140,19 +136,5 @@
         serviceInfo.setProperty(WSDLServiceBuilder.WSDL_DEFINITION, null);
         serviceInfo.setProperty(WSDLServiceBuilder.WSDL_SERVICE, null);
         return serviceInfo;
-    }
-
-    protected JAXBDataReaderFactory getTestReaderFactory(Class<?> clz) throws Exception {
-        JAXBContext ctx = JAXBEncoderDecoder.createJAXBContextForClass(clz);
-        JAXBDataReaderFactory readerFacotry = new JAXBDataReaderFactory();
-        readerFacotry.setJAXBContext(ctx);
-        return readerFacotry;
-    }
-
-    protected JAXBDataWriterFactory getTestWriterFactory(Class<?> clz) throws Exception {
-        JAXBContext ctx = JAXBEncoderDecoder.createJAXBContextForClass(clz);
-        JAXBDataWriterFactory writerFacotry = new JAXBDataWriterFactory();
-        writerFacotry.setJAXBContext(ctx);
-        return writerFacotry;
     }
 }

Modified: incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultOutInterceptor.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultOutInterceptor.java Sun Oct 29 20:56:21 2006
@@ -22,7 +22,6 @@
 import java.util.Iterator;
 import java.util.ResourceBundle;
 
-import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
@@ -73,11 +72,11 @@
             // call data writer to marshal exception
             BindingOperationInfo bop = message.getExchange().get(BindingOperationInfo.class);
             if (bop != null) {
-                QName elName = null;
                 if (!bop.isUnwrappedCapable()) {
                     bop = bop.getUnwrappedOperation();
                 }
                 Iterator<FaultInfo> it = bop.getOperationInfo().getFaults().iterator();
+                MessagePartInfo part = null;
                 while (it.hasNext()) {
                     FaultInfo fi = it.next();
                     for (MessagePartInfo mpi : fi.getMessageParts()) {
@@ -85,20 +84,16 @@
                         Method method = t.getClass().getMethod("getFaultInfo", new Class[0]);
                         Class sub = method.getReturnType();
                         if (cls != null && cls.equals(sub)) {
-                            if (mpi.isElement()) {
-                                elName = mpi.getElementQName();
-                            } else {
-                                elName = mpi.getTypeQName();
-                            }
+                            part = mpi;
                             break;
                         }
                     }
                 }
-                if (elName != null) {
+                if (part != null) {
                     StaxUtils.writeStartElement(writer, prefix, XMLFault.XML_FAULT_DETAIL,
                             XMLConstants.NS_XML_FORMAT);
                     DataWriter<Message> dataWriter = getMessageDataWriter(message);
-                    dataWriter.write(getFaultInfo(t), elName, message);
+                    dataWriter.write(getFaultInfo(t), part, message);
                     writer.writeEndElement();
                 }
             }

Modified: incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/TestBase.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/TestBase.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/TestBase.java (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/TestBase.java Sun Oct 29 20:56:21 2006
@@ -39,9 +39,6 @@
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.endpoint.EndpointImpl;
 import org.apache.cxf.jaxb.JAXBDataBinding;
-import org.apache.cxf.jaxb.JAXBDataReaderFactory;
-import org.apache.cxf.jaxb.JAXBDataWriterFactory;
-import org.apache.cxf.jaxb.JAXBEncoderDecoder;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.ExchangeImpl;
 import org.apache.cxf.message.Message;
@@ -111,22 +108,8 @@
         }
         return null;
     }
-
-    protected JAXBDataReaderFactory getTestReaderFactory(Class<?> clz) throws Exception {
-        JAXBContext ctx = JAXBEncoderDecoder.createJAXBContextForClass(clz);
-        JAXBDataReaderFactory readerFacotry = new JAXBDataReaderFactory();
-        readerFacotry.setJAXBContext(ctx);
-        return readerFacotry;
-    }
-
-    protected JAXBDataWriterFactory getTestWriterFactory(Class<?> clz) throws Exception {
-        JAXBContext ctx = JAXBEncoderDecoder.createJAXBContextForClass(clz);
-        JAXBDataWriterFactory writerFacotry = new JAXBDataWriterFactory();
-        writerFacotry.setJAXBContext(ctx);
-        return writerFacotry;
-    }
     
-    protected void common(String wsdl, QName portName, Class seiClazz) throws Exception {
+    protected void common(String wsdl, QName portName, Class... jaxbClasses) throws Exception {
         control = EasyMock.createNiceControl();
         
         bus = control.createMock(Bus.class);
@@ -154,7 +137,9 @@
         Binding xmlBinding = new XMLBindingFactory().createBinding(epi.getBinding());
 
         control.reset();
-        service.setDataBinding(new JAXBDataBinding(seiClazz));
+        JAXBDataBinding db = new JAXBDataBinding();
+        db.setContext(JAXBContext.newInstance(jaxbClasses));
+        service.setDataBinding(db);
 
         Endpoint endpoint = control.createMock(EndpointImpl.class);
         EasyMock.expect(endpoint.getEndpointInfo()).andStubReturn(epi);

Modified: incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLMessageInInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLMessageInInterceptorTest.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLMessageInInterceptorTest.java (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLMessageInInterceptorTest.java Sun Oct 29 20:56:21 2006
@@ -25,7 +25,6 @@
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamReader;
 
-import org.apache.cxf.interceptor.WrappedInInterceptor;
 import org.apache.cxf.service.model.OperationInfo;
 import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.hello_world_xml_http.bare.types.MyComplexStructType;
@@ -45,7 +44,12 @@
         String ns = "http://apache.org/hello_world_xml_http/bare";
         prepareMessage("/message-bare-multi-param.xml");
         common("/wsdl/hello_world_xml_bare.wsdl", new QName(ns, "XMLPort"),
-                        org.apache.hello_world_xml_http.bare.Greeter.class);
+                        MyComplexStructType.class);
+        
+        OperationInfo op = serviceInfo.getInterface().getOperation(new QName(ns, "testMultiParamPart"));
+        op.getInput().getMessagePartByIndex(0).setTypeClass(MyComplexStructType.class);
+        op.getInput().getMessagePartByIndex(1).setTypeClass(String.class);
+        
         in.handleMessage(xmlMessage);
         List list = xmlMessage.getContent(List.class);
         assertNotNull(list);
@@ -58,8 +62,11 @@
     public void testHandleMessageOnBareSingleChild() throws Exception {
         String ns = "http://apache.org/hello_world_xml_http/bare";
         prepareMessage("/message-bare-single-param-element.xml");
-        common("/wsdl/hello_world_xml_bare.wsdl", new QName(ns, "XMLPort"),
-                        org.apache.hello_world_xml_http.bare.Greeter.class);
+        common("/wsdl/hello_world_xml_bare.wsdl", new QName(ns, "XMLPort"));
+        
+        OperationInfo op = serviceInfo.getInterface().getOperation(new QName(ns, "greetMe"));
+        op.getInput().getMessagePartByIndex(0).setTypeClass(String.class);
+        
         in.handleMessage(xmlMessage);
         List list = xmlMessage.getContent(List.class);
         assertNotNull(list);
@@ -71,10 +78,10 @@
         String ns = "http://apache.org/hello_world_xml_http/wrapped";
         prepareMessage("/message-wrap.xml");
         common("/wsdl/hello_world_xml_wrapped.wsdl", new QName(ns, "XMLPort"),
-                        org.apache.hello_world_xml_http.wrapped.Greeter.class);
+               GreetMe.class);
         
         OperationInfo op = serviceInfo.getInterface().getOperation(new QName(ns, "greetMe"));
-        op.getUnwrappedOperation().getInput().setProperty(WrappedInInterceptor.WRAPPER_CLASS, GreetMe.class);
+        op.getInput().getMessagePartByIndex(0).setTypeClass(GreetMe.class);
         
         in.handleMessage(xmlMessage);
         List list = xmlMessage.getContent(List.class);

Modified: incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLMessageOutInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLMessageOutInterceptorTest.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLMessageOutInterceptorTest.java (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/test/java/org/apache/cxf/binding/xml/interceptor/XMLMessageOutInterceptorTest.java Sun Oct 29 20:56:21 2006
@@ -82,7 +82,7 @@
         params.add(myComplexStruct);
 
         common("/wsdl/hello_world_xml_bare.wsdl", new QName(bareNs, "XMLPort"),
-                        org.apache.hello_world_xml_http.bare.Greeter.class);
+                        MyComplexStructType.class);
 
         BindingInfo bi = super.serviceInfo.getBinding(new QName(bareNs, "Greeter_XMLBinding"));
         BindingOperationInfo boi = bi.getOperation(new QName(bareNs, "sendReceiveData"));
@@ -112,7 +112,7 @@
         params.add("tli");
 
         common("/wsdl/hello_world_xml_bare.wsdl", new QName(bareNs, "XMLPort"),
-                        org.apache.hello_world_xml_http.bare.Greeter.class);
+                        MyComplexStructType.class);
 
         BindingInfo bi = super.serviceInfo.getBinding(new QName(bareNs, "Greeter_XMLBinding"));
         BindingOperationInfo boi = bi.getOperation(new QName(bareNs, "testMultiParamPart"));
@@ -153,8 +153,7 @@
         GreetMe greetMe = new GreetMe();
         greetMe.setRequestType("tli");
         params.add(greetMe);
-        common("/wsdl/hello_world_xml_wrapped.wsdl", new QName(wrapNs, "XMLPort"),
-                        org.apache.hello_world_xml_http.wrapped.Greeter.class);
+        common("/wsdl/hello_world_xml_wrapped.wsdl", new QName(wrapNs, "XMLPort"), GreetMe.class);
 
         BindingInfo bi = super.serviceInfo.getBinding(new QName(wrapNs, "Greeter_XMLBinding"));
         BindingOperationInfo boi = bi.getOperation(new QName(wrapNs, "greetMe"));

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java Sun Oct 29 20:56:21 2006
@@ -138,7 +138,12 @@
     
     protected DepthXMLStreamReader getXMLStreamReader(Message message) {
         XMLStreamReader xr = message.getContent(XMLStreamReader.class);
-        return new DepthXMLStreamReader(xr);
+        if (xr instanceof DepthXMLStreamReader) {
+            return (DepthXMLStreamReader) xr;
+        }
+        DepthXMLStreamReader dr = new DepthXMLStreamReader(xr);
+        message.setContent(XMLStreamReader.class, dr);
+        return dr;
     }
 
     /**

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java Sun Oct 29 20:56:21 2006
@@ -100,12 +100,7 @@
                 throw new Fault(new org.apache.cxf.common.i18n.Message("NO_PART_FOUND", BUNDLE, elName));
             }
             
-            Class<?> cls = (Class) p.getProperty(Class.class.getName());
-            if (cls != null && !filter.contains(cls.getName()) && !cls.isArray()) {
-                o = dr.read(p.getConcreteName(), message, cls);
-            } else {
-                o = dr.read(p.getConcreteName(), message, null);
-            }
+            o = dr.read(p, message);
             
             if (o != null) {
                 parameters.add(o);

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java Sun Oct 29 20:56:21 2006
@@ -74,7 +74,7 @@
                         continue;
                     }
                     
-                    dataWriter.write(arg, part.getConcreteName(), message);
+                    dataWriter.write(arg, part, message);
                 }
             }
         }

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java Sun Oct 29 20:56:21 2006
@@ -59,21 +59,17 @@
     protected void processFaultDetail(Fault fault, Message msg) {
         Element exDetail = (Element) DOMUtils.getChild(fault.getDetail(), Node.ELEMENT_NODE);
         QName qname = new QName(exDetail.getNamespaceURI(), exDetail.getLocalName());
-        FaultInfo faultWanted = null;        
-        Class cls = null;
+        FaultInfo faultWanted = null;    
+        MessagePartInfo part = null;
         BindingOperationInfo boi = msg.getExchange().get(BindingOperationInfo.class);
+        if (boi.isUnwrapped()) {
+            boi = boi.getWrappedOperation();
+        }
         for (FaultInfo faultInfo : boi.getOperationInfo().getFaults()) {
             for (MessagePartInfo mpi : faultInfo.getMessageParts()) {
-                String ns = null;
-                if (mpi.isElement()) {
-                    ns = mpi.getElementQName().getNamespaceURI();
-                } else {
-                    ns = mpi.getTypeQName().getNamespaceURI();
-                }
-                if (qname.getLocalPart().equals(mpi.getConcreteName().getLocalPart()) 
-                        && qname.getNamespaceURI().equals(ns)) {
-                    cls = (Class)mpi.getProperty(Class.class.getName());
+                if (qname.equals(mpi.getConcreteName())) {
                     faultWanted = faultInfo;
+                    part = mpi;
                     break;
                 }
             }
@@ -90,7 +86,7 @@
         DataBinding dataBinding = s.getDataBinding();
 
         DataReader<Node> reader = dataBinding.getDataReaderFactory().createReader(Node.class);
-        Object e = reader.read(qname, exDetail, cls);
+        Object e = reader.read(part, exDetail);
 
         if (!(e instanceof Exception)) {
             Class exClass = faultWanted.getProperty(Class.class.getName(), Class.class);

Added: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java?view=auto&rev=469066
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java (added)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java Sun Oct 29 20:56:21 2006
@@ -0,0 +1,82 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.interceptor;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.logging.Logger;
+
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.helpers.IOUtils;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+/**
+ * A simple logging handler which outputs the bytes of the message to the
+ * Logger.
+ */
+public class LoggingInInterceptor extends AbstractPhaseInterceptor<Message> {
+
+    private static final Logger LOG = LogUtils.getL7dLogger(LoggingInInterceptor.class);
+
+    public LoggingInInterceptor() {
+        super();
+        setPhase(Phase.RECEIVE);
+    }
+
+    public void handleMessage(Message message) throws Fault {
+        InputStream is = message.getContent(InputStream.class);
+
+        if (is == null) {
+            return;
+        }
+
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        try {
+            IOUtils.copy(is, bos);
+
+            is.close();
+            bos.close();
+
+            LOG.info("Message: " + bos.toString());
+
+            message.setContent(InputStream.class, new ByteArrayInputStream(bos.toByteArray()));
+
+        } catch (IOException e) {
+            throw new Fault(e);
+        }
+    }
+    
+    public static void copy(final InputStream input,
+                            final OutputStream output,
+                            final int bufferSize)
+        throws IOException {
+        final byte[] buffer = new byte[bufferSize];
+        int n = 0;
+        n = input.read(buffer);
+        while (-1 != n) {
+            output.write(buffer, 0, n);
+            n = input.read(buffer);
+        }
+    }
+}

Propchange: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java Sun Oct 29 20:56:21 2006
@@ -39,7 +39,6 @@
 import org.apache.cxf.staxutils.StaxUtils;
 
 public class WrappedInInterceptor extends AbstractInDatabindingInterceptor {
-    public static final String WRAPPER_CLASS = "wrapper.class";
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(WrappedInInterceptor.class);
 
     public WrappedInInterceptor() {
@@ -76,15 +75,14 @@
         DataReader<Message> dr = getMessageDataReader(message);
         List<Object> objects;
 
+        MessageInfo msgInfo = setMessage(message, operation, requestor);
+        
         // Determine if there is a wrapper class
         if ((operation.isUnwrapped() || operation.isUnwrappedCapable())
-            && operation.getOperationInfo().getUnwrappedOperation().getInput()
-                .getProperty(WRAPPER_CLASS) != null) {
+            && msgInfo.getMessageParts().get(0).getTypeClass() != null) {
             objects = new ArrayList<Object>();
-            Object wrappedObject = dr.read(message);
+            Object wrappedObject = dr.read(msgInfo.getMessageParts().get(0), message);
             objects.add(wrappedObject);
-
-            setMessage(message, operation, requestor);
         } else {
             // Unwrap each part individually if we don't have a wrapper
             objects = new ArrayList<Object>();
@@ -93,7 +91,7 @@
                 operation = operation.getUnwrappedOperation();
             }
 
-            MessageInfo msgInfo = setMessage(message, operation, requestor);
+            msgInfo = setMessage(message, operation, requestor);
             List<MessagePartInfo> messageParts = msgInfo.getMessageParts();
             Iterator<MessagePartInfo> itr = messageParts.iterator();
 
@@ -105,8 +103,7 @@
             // loop through each child element
             while (StaxUtils.toNextElement(xmlReader)) {
                 MessagePartInfo part = itr.next();
-                Class c = (Class)part.getProperty(Class.class.getName());
-                objects.add(dr.read(part.getConcreteName(), message, c));
+                objects.add(dr.read(part, message));
             }
 
         }

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/ServiceWSDLBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/ServiceWSDLBuilder.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/ServiceWSDLBuilder.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/ServiceWSDLBuilder.java Sun Oct 29 20:56:21 2006
@@ -111,18 +111,6 @@
 
 
     public List<ExtensibilityElement> getWSDL11Extensors(AbstractPropertiesHolder holder) {
-//        List<?> extensors = holder.getExtensors()
-//        if (extensors.get() == null) {
-//            return null;
-//        }
-//        List<ExtensibilityElement> list
-//            = new ArrayList<ExtensibilityElement>(extensors.get().length);
-//        for (Object obj : extensors.get()) {
-//            if (obj instanceof ExtensibilityElement) {
-//                list.add((ExtensibilityElement)obj);
-//            }
-//        }
-//        return Collections.unmodifiableList(list);
         return holder.getExtensors(ExtensibilityElement.class);
     }
     

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java Sun Oct 29 20:56:21 2006
@@ -479,13 +479,22 @@
                 }
                 XmlSchemaElement el = (XmlSchemaElement)o;
 
-                // Handle anonymous ref
-                QName elQname = el.getQName();
-                if (elQname == null) {
-                    elQname = new QName(namespaceURI, el.getRefName().getLocalPart());
+                if (el.getSchemaTypeName() != null) {
+                    MessagePartInfo mpi = wrapper.addMessagePart(new QName(namespaceURI, el.getName()));
+                    mpi.setTypeQName(el.getSchemaTypeName());
+                    mpi.setXmlSchema(el);
+                } else if (el.getRefName() != null) {
+                    MessagePartInfo mpi = wrapper.addMessagePart(el.getRefName());
+                    mpi.setTypeQName(el.getRefName());
+                    mpi.setXmlSchema(el);
+                } else {
+                    // anonymous type
+                    MessagePartInfo mpi = wrapper.addMessagePart(
+                        new QName(namespaceURI, el.getName()));
+                    mpi.setElementQName(mpi.getName());
+                    mpi.setElement(true);
+                    mpi.setXmlSchema(el);
                 }
-                MessagePartInfo mpi = wrapper.addMessagePart(elQname); 
-                mpi.setTypeQName(el.getSchemaTypeName());
             }
 
             return true;

Copied: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java (from r467469, incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBServiceModelInitializer.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java?view=diff&rev=469066&p1=incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBServiceModelInitializer.java&r1=467469&p2=incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBServiceModelInitializer.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java Sun Oct 29 20:56:21 2006
@@ -19,66 +19,121 @@
 
 package org.apache.cxf.jaxb;
 
+import java.lang.reflect.Array;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
+import java.util.Collection;
+import java.util.Set;
 
-import javax.xml.namespace.QName;
-
-import com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader;
-import com.sun.xml.bind.v2.model.core.Element;
-import com.sun.xml.bind.v2.model.core.NonElement;
-import com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder;
+import javax.xml.ws.Holder;
 
+import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.service.ServiceModelVisitor;
 import org.apache.cxf.service.model.MessagePartInfo;
 import org.apache.cxf.service.model.ServiceInfo;
-import org.apache.ws.commons.schema.XmlSchemaCollection;
 
 /**
- * Walks the service model and sets up the element/type names.
+ * Walks the service model and sets up the classes for the context.
  */
-class JAXBServiceModelInitializer extends ServiceModelVisitor {
+class JAXBContextInitializer extends ServiceModelVisitor {
 
-    private XmlSchemaCollection schemas;
+    private Set<Class<?>> classes;
 
-    public JAXBServiceModelInitializer(ServiceInfo serviceInfo, XmlSchemaCollection col) {
+    public JAXBContextInitializer(ServiceInfo serviceInfo, Set<Class<?>> classes) {
         super(serviceInfo);
-        schemas = col;
+        this.classes = classes;
     }
 
     @Override
     public void begin(MessagePartInfo part) {
-        // Check to see if the WSDL information has been filled in for us.
-        if (part.getTypeQName() != null || part.getElementQName() != null) {
-            return;
-        }
-        
-        Class<?> clazz = (Class<?>)part.getProperty(Class.class.getName());
+        Class<?> clazz = part.getTypeClass();
         if (clazz == null) {
             return;
         }
 
-        RuntimeModelBuilder builder = new RuntimeModelBuilder(new RuntimeInlineAnnotationReader(), null);
-        NonElement<Type, Class> typeInfo = builder.getTypeInfo(clazz, null);
+        Type genericType = (Type) part.getProperty("generic.type");
+        if (genericType != null) {
+            addType(genericType);
+            
+            if (Collection.class.isAssignableFrom(clazz) 
+                && genericType instanceof ParameterizedType) {
+                ParameterizedType pt = (ParameterizedType) genericType;
+                if (pt.getActualTypeArguments().length > 0 
+                    && pt.getActualTypeArguments()[0] instanceof Class) {
+            
+                    Class<? extends Object> arrayCls = 
+                        Array.newInstance((Class) pt.getActualTypeArguments()[0], 0).getClass();
+                    clazz = arrayCls;
+                    part.setTypeClass(clazz);
+                }
+            }
+        }
+        addClass(clazz);
+    }
+    
+    private void addType(Type cls) {
+        if (cls instanceof Class) {
+            addClass((Class)cls);
+        } else if (cls instanceof ParameterizedType) {
+            for (Type t2 : ((ParameterizedType)cls).getActualTypeArguments()) {
+                addType(t2);
+            }
+        } else if (cls instanceof GenericArrayType) {
+            GenericArrayType gt = (GenericArrayType)cls;
+            Class ct = (Class) gt.getGenericComponentType();
+            ct = Array.newInstance(ct, 0).getClass();
+            
+            addClass(ct);
+        }
+    }
+    
 
-        QName typeName = typeInfo.getTypeName();
-        // TODO: this doesn't seem to work with elements yet
-        if (typeName == null) {
+    private  void addClass(Class<?> cls) {
+        if (cls.isArray() && cls.getComponentType().isPrimitive()) {
             return;
         }
+        cls = getValidClass(cls);
+        if (null != cls) {
+            if (cls.isEnum()) {
+                // The object factory stuff doesn't work for enums
+                classes.add(cls);
+            }
+            String name = PackageUtils.getPackageName(cls) + ".ObjectFactory";
+            try {
+                cls = Class.forName(name, false, cls.getClassLoader());
+                if (cls != null) {
+                    classes.add(cls);
+                }
+            } catch (ClassNotFoundException ex) {
+                // cannot add factory, just add the class
+                classes.add(cls);
+            }
+        }
+    }
 
-        boolean isElement = typeInfo instanceof Element;
-        if (isElement) {
-            isElement = ((Element) typeInfo).getElementName() != null;
+    private static Class<?> getValidClass(Class<?> cls) {
+        if (cls.isEnum()) {
+            return cls;
+        }
+        if (cls.isArray()) {
+            return cls;
         }
 
-        part.setElement(isElement);
-        if (isElement) {
-            QName name = ((Element) typeInfo).getElementName();
-            part.setElementQName(name);
-            part.setXmlSchema(schemas.getElementByQName(name));
-        } else {
-            part.setTypeQName(typeName);
-            part.setXmlSchema(schemas.getTypeByQName(typeName));
+        if (cls == Object.class || cls == String.class || cls == Holder.class) {
+            cls = null;
+        } else if (cls.isPrimitive() || cls.isInterface() || cls.isAnnotation()) {
+            cls = null;
+        }
+        if (cls != null) {
+            try {
+                if (cls.getConstructor(new Class[0]) == null) {
+                    cls = null;
+                }
+            } catch (NoSuchMethodException ex) {
+                cls = null;
+            }
         }
+        return cls;
     }
 }

Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java Sun Oct 29 20:56:21 2006
@@ -21,11 +21,14 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.ResourceBundle;
+import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -73,16 +76,23 @@
 
     Class cls;
 
-    public JAXBDataBinding() throws JAXBException {
+    public JAXBDataBinding() {
         reader = new JAXBDataReaderFactory();
         writer = new JAXBDataWriterFactory();
     }
+    
+    public JAXBDataBinding(Class<?>...classes) throws JAXBException {
+        reader = new JAXBDataReaderFactory();
+        writer = new JAXBDataWriterFactory();
+        
+        Set<Class<?>> classSet = new HashSet<Class<?>>();
+        classSet.addAll(Arrays.asList(classes));
+        setContext(createJAXBContext(classSet));
+    }
 
-    public JAXBDataBinding(Class<?> cls) throws JAXBException {
+    public JAXBDataBinding(JAXBContext context) {
         this();
-        context = JAXBEncoderDecoder.createJAXBContextForClass(cls);
-        reader.setJAXBContext(context);
-        writer.setJAXBContext(context);
+        setContext(context);
     }
 
     public void setContext(JAXBContext ctx) {
@@ -159,6 +169,17 @@
     }
 
     public void initialize(ServiceInfo serviceInfo) {
+        Set<Class<?>> classes = new HashSet<Class<?>>();
+        JAXBContextInitializer initializer = 
+            new JAXBContextInitializer(serviceInfo, classes);
+        initializer.walk();
+
+        try {
+            setContext(createJAXBContext(classes));
+        } catch (JAXBException e1) {
+            throw new ServiceConstructionException(e1);
+        }
+        
         XmlSchemaCollection col = (XmlSchemaCollection)serviceInfo
             .getProperty(WSDLServiceBuilder.WSDL_SCHEMA_LIST);
 
@@ -190,6 +211,7 @@
 
                 SchemaInfo schema = new SchemaInfo(typeInfo, ns);
                 schema.setElement(d.getDocumentElement());
+                typeInfo.addSchema(schema);
                 col.read(d.getDocumentElement());
             }
         } catch (IOException e) {
@@ -197,8 +219,8 @@
         }
 
         serviceInfo.setProperty(WSDLServiceBuilder.WSDL_SCHEMA_LIST, col);
-        JAXBServiceModelInitializer initializer = new JAXBServiceModelInitializer(serviceInfo, col);
-        initializer.walk();
+        JAXBSchemaInitializer schemaInit = new JAXBSchemaInitializer(serviceInfo, col);
+        schemaInit.walk();
 
     }
 
@@ -210,7 +232,6 @@
             public Result createOutput(String ns, String file) throws IOException {
                 DOMResult result = new DOMResult();
                 result.setSystemId(file);
-
                 results.add(result);
 
                 return result;
@@ -219,4 +240,21 @@
 
         return results;
     }
+    
+
+
+    public static JAXBContext createJAXBContext(Set<Class<?>> classes) throws JAXBException {
+        try {
+            classes.add(Class.forName("org.apache.cxf.ws.addressing.wsdl.AttributedQNameType"));
+            classes.add(Class.forName("org.apache.cxf.ws.addressing.wsdl.ObjectFactory"));
+            classes.add(Class.forName("org.apache.cxf.ws.addressing.wsdl.ServiceNameType"));
+        } catch (ClassNotFoundException e) {
+            // REVISIT - ignorable if WS-ADDRESSING not available?
+            // maybe add a way to allow interceptors to add stuff to the
+            // context?
+        }
+       
+        return  JAXBContext.newInstance(classes.toArray(new Class[classes.size()]));
+    }
+
 }

Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java Sun Oct 29 20:56:21 2006
@@ -19,20 +19,15 @@
 
 package org.apache.cxf.jaxb;
 
-import java.lang.annotation.Annotation;
 import java.lang.reflect.Array;
 import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
+import java.util.Collection;
 import java.util.HashSet;
-import java.util.Map;
 import java.util.ResourceBundle;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 
-import javax.jws.WebMethod;
-import javax.jws.WebParam;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
@@ -47,17 +42,13 @@
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 import javax.xml.validation.Schema;
-import javax.xml.ws.Holder;
-import javax.xml.ws.RequestWrapper;
-import javax.xml.ws.ResponseWrapper;
-import javax.xml.ws.WebEndpoint;
 
 import org.w3c.dom.Node;
 
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.i18n.Message;
-import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.service.model.MessagePartInfo;
 
 /**
  * JAXBEncoderDecoder
@@ -67,187 +58,14 @@
 public final class JAXBEncoderDecoder {
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(JAXBEncoderDecoder.class);
 
-    private static Map<Class<?>, JAXBContext> contextMap = new ConcurrentHashMap<Class<?>, JAXBContext>();
-
-    private JAXBEncoderDecoder() {
-    }
-
-    public static JAXBContext createJAXBContextForClass(Class<?> cls) throws JAXBException {
-        JAXBContext context = contextMap.get(cls);
-        if (context == null) {
-            Set<Class<?>> classes = new HashSet<Class<?>>();
-            getClassesForContext(cls, classes, cls.getClassLoader());
-
-            try {
-                classes.add(Class.forName("org.apache.cxf.ws.addressing.wsdl.AttributedQNameType"));
-                classes.add(Class.forName("org.apache.cxf.ws.addressing.wsdl.ObjectFactory"));
-                classes.add(Class.forName("org.apache.cxf.ws.addressing.wsdl.ServiceNameType"));
-            } catch (ClassNotFoundException e) {
-                // REVISIT - ignorable if WS-ADDRESSING not available?
-                // maybe add a way to allow interceptors to add stuff to the
-                // context?
-            }
-           
-            context = JAXBContext.newInstance(classes.toArray(new Class[classes.size()]));
-            contextMap.put(cls, context);
-        }
-        return context;
-    }
-
-    private static Class<?> getValidClass(Class<?> cls) {
-        if (cls.isEnum()) {
-            return cls;
-        }
-        if (cls.isArray()) {
-            return getValidClass(cls.getComponentType());
-        }
-
-        if (cls == Object.class || cls == String.class || cls == Holder.class) {
-            cls = null;
-        } else if (cls.isPrimitive()) {
-            return cls;
-        } else if (cls.isInterface() || cls.isAnnotation()) {
-            cls = null;
-        }
-        if (cls != null) {
-            try {
-                if (cls.getConstructor(new Class[0]) == null) {
-                    cls = null;
-                }
-            } catch (NoSuchMethodException ex) {
-                cls = null;
-            }
-        }
-        return cls;
+    private static Set<String> filter = new HashSet<String>();
+    
+    static {
+        filter.add("void");
+        filter.add("javax.activation.DataHandler");
     }
-
-    private static void addClass(Class<?> cls, Set<Class<?>> classes) {
-        if (cls.isArray()) {
-            // REVISIT-- add java primitive type array will cause jaxb exception
-            //classes.add(cls);
-            return;
-        }
-        cls = getValidClass(cls);
-        if (null != cls) {
-            if (cls.isEnum()) {
-                // The object factory stuff doesn't work for enums
-                classes.add(cls);
-            }
-            String name = PackageUtils.getPackageName(cls) + ".ObjectFactory";
-            try {
-                cls = Class.forName(name, false, cls.getClassLoader());
-                if (cls != null) {
-                    classes.add(cls);
-                }
-            } catch (ClassNotFoundException ex) {
-                // cannot add factory, just add the class
-                classes.add(cls);
-            }
-        }
-    }
-
-    private static void addType(Type cls, Set<Class<?>> classes) {
-        if (cls instanceof Class) {
-            addClass((Class)cls, classes);
-        } else if (cls instanceof ParameterizedType) {
-            for (Type t2 : ((ParameterizedType)cls).getActualTypeArguments()) {
-                addType(t2, classes);
-            }
-        } else if (cls instanceof GenericArrayType) {
-            GenericArrayType gt = (GenericArrayType)cls;
-            Class ct = (Class) gt.getGenericComponentType();
-            ct = Array.newInstance(ct, 0).getClass();
-            //addType(ct, classes);
-            classes.add(ct);
-        }
-    }
-
-    // collect ALL the classes that are accessed by the class
-    private static void getClassesForContext(Class<?> theClass, Set<Class<?>> classes, ClassLoader loader) {
-        Method methods[] = theClass.getMethods();
-        for (Method meth : methods) {
-            WebEndpoint webEndpoint = meth.getAnnotation(WebEndpoint.class);
-            if (webEndpoint != null) {
-                getClassesForContext(meth.getReturnType(), classes, loader);
-            }
-
-            // only methods marked as WebMethods are interesting to us
-            WebMethod webMethod = meth.getAnnotation(WebMethod.class);
-            if (webMethod == null) {
-                continue;
-            }
-
-            for (Type t : meth.getGenericParameterTypes()) {
-                addType(t, classes);
-            }
-            addType(meth.getGenericReturnType(), classes);
-
-            if (meth.getReturnType().isArray()) {
-                addClass(meth.getReturnType(), classes);
-            }
-            for (Class<?> cls : meth.getParameterTypes()) {
-                addClass(cls, classes);
-            }
-
-            for (Class<?> cls : meth.getExceptionTypes()) {
-                // addClass(cls, classes);
-                try {
-                    Method fim = cls.getMethod("getFaultInfo", new Class[0]);
-                    addClass(fim.getReturnType(), classes);
-                } catch (NoSuchMethodException ex) {
-                    // ignore - not a valid JAXB fault thing
-                }
-            }
-            try {
-                // Get the RequestWrapper
-                RequestWrapper reqWrapper = meth.getAnnotation(RequestWrapper.class);
-                if (reqWrapper != null) {
-                    Class<?> cls = Class.forName(reqWrapper.className(), false, loader);
-                    addClass(cls, classes);
-
-                }
-                // Get the RequestWrapper
-
-                ResponseWrapper respWrapper = meth.getAnnotation(ResponseWrapper.class);
-                if (respWrapper != null) {
-                    Class<?> cls = Class.forName(respWrapper.className(), false, loader);
-                    addClass(cls, classes);
-                }
-            } catch (ClassNotFoundException ex) {
-                // ignore
-            }
-            // get ObjectFactory in case of bare
-
-            Annotation[][] parasAnnotation = meth.getParameterAnnotations();
-            String packageName = null;
-            for (int i = 0; i < parasAnnotation.length; i++) {
-                Annotation[] paraAnno = parasAnnotation[i];
-                for (int j = 0; j < paraAnno.length; j++) {
-                    if (paraAnno[j].annotationType() == WebParam.class) {
-                     
-                        packageName = ((WebParam)paraAnno[j]).targetNamespace();
-                        packageName = PackageUtils.parsePackageName(packageName, null);
-
-                        try {
-                            Class<?> cls = Class.forName(packageName + ".ObjectFactory", false, theClass
-                                .getClassLoader());
-                            if (cls != null) {
-                                classes.add(cls);
-                            }
-                        } catch (ClassNotFoundException ex) {
-                            // ignore
-                        }
-                    }
-                }
-            }
-        }
-
-        for (Class<?> intf : theClass.getInterfaces()) {
-            getClassesForContext(intf, classes, loader);
-        }
-        if (theClass.getSuperclass() != null) {
-            getClassesForContext(theClass.getSuperclass(), classes, loader);
-        }
+    
+    private JAXBEncoderDecoder() {
     }
 
     private static Marshaller createMarshaller(JAXBContext context, Class<?> cls) throws JAXBException {
@@ -263,10 +81,26 @@
         return jm;
     }
 
-    public static void marshall(JAXBContext context, Schema schema, Object elValue, QName elNname,
-                                Object source, AttachmentMarshaller am) {
-
-        Class<?> cls = null != elValue ? elValue.getClass() : null;
+    public static void marshall(JAXBContext context, 
+                                Schema schema, 
+                                Object elValue, 
+                                MessagePartInfo part,
+                                Object source, 
+                                AttachmentMarshaller am) {
+        Class<?> cls = null;
+        if (part != null) {
+            cls = part.getTypeClass();
+        } 
+
+        if (cls == null) {
+            cls = null != elValue ? elValue.getClass() : null;
+        }
+        
+        if (cls != null && cls.isArray() && elValue instanceof Collection) {
+            Collection<?> col = (Collection<?>) elValue;
+            elValue = col.toArray((Object[]) Array.newInstance(cls.getComponentType(), 0));
+        }
+        
         try {
             Marshaller u = createMarshaller(context, cls);
             try {
@@ -278,10 +112,16 @@
             }
             Object mObj = elValue;
 
-            if (null != elNname && null != cls && !cls.isAnnotationPresent(XmlRootElement.class)) {
+            QName elName = null;
+            if (part != null) {
+                elName = part.getConcreteName();
+            }
+            
+            if (null != elName && !cls.isAnnotationPresent(XmlRootElement.class)) {
                 mObj = JAXBElement.class.getConstructor(new Class[] {QName.class, Class.class, Object.class})
-                    .newInstance(elNname, cls, mObj);
+                    .newInstance(elName, cls, mObj);
             }
+            
             u.setSchema(schema);
             if (am != null) {
                 u.setAttachmentMarshaller(am);
@@ -304,14 +144,19 @@
         marshall(context, schema, elValue, null, source, null);
     }
 
-    public static void marshall(JAXBContext context, Schema schema, Object elValue, QName elNname,
+    public static void marshall(JAXBContext context, Schema schema, 
+                                Object elValue, 
+                                MessagePartInfo part,
                                 Object source) {
-        marshall(context, schema, elValue, elNname, source, null);
+        marshall(context, schema, elValue, part, source, null);
     }
 
     private static Unmarshaller createUnmarshaller(JAXBContext context, Class<?> cls) throws JAXBException {
         Unmarshaller um = null;
         if (context == null) {
+            if (cls == null) {
+                throw new IllegalStateException("A JAXBContext or Class to unmarshal must be provided!");
+            }
             context = JAXBContext.newInstance(cls);
         }
 
@@ -321,21 +166,32 @@
     }
 
     public static Object unmarshall(JAXBContext context, Schema schema, Object source) {
-        return unmarshall(context, schema, source, null, null, null);
+        return unmarshall(context, schema, source, null, null);
     }
 
-    public static Object unmarshall(JAXBContext context, Schema schema, Object source, QName elName) {
-        return unmarshall(context, schema, source, elName, null, null);
-    }
-
-    public static Object unmarshall(JAXBContext context, Schema schema, Object source, QName elName,
-                                    Class<?> clazz) {
-        return unmarshall(context, schema, source, elName, clazz, null);
-    }
-
-    public static Object unmarshall(JAXBContext context, Schema schema, Object source, QName elName,
-                                    Class<?> clazz, AttachmentUnmarshaller au) {
+    public static Object unmarshall(JAXBContext context, 
+                                    Schema schema, 
+                                    Object source,
+                                    MessagePartInfo part, 
+                                    AttachmentUnmarshaller au) {
+        Class<?> clazz = part != null ? (Class) part.getTypeClass() : null;
+        QName elName = part != null ? part.getConcreteName() : null;
+
+        return unmarshall(context, schema, source, elName, clazz, au);
+    }
+    
+    public static Object unmarshall(JAXBContext context, 
+                                    Schema schema, 
+                                    Object source,
+                                    QName elName,
+                                    Class<?> clazz,
+                                    AttachmentUnmarshaller au) {
         Object obj = null;
+        
+        if (clazz != null && filter.contains(clazz.getName())) {
+            clazz = null;
+        }
+        
         try {
             Unmarshaller u = createUnmarshaller(context, clazz);
             u.setSchema(schema);
@@ -353,7 +209,6 @@
             } else {
                 throw new Fault(new Message("UNKNOWN_SOURCE", BUNDLE, source.getClass().getName()));
             }
-       
         } catch (Exception ex) {
             if (ex instanceof javax.xml.bind.UnmarshalException) {
                 javax.xml.bind.UnmarshalException unmarshalEx = (javax.xml.bind.UnmarshalException)ex;
@@ -363,10 +218,10 @@
                 throw new Fault(new Message("UNMARSHAL_ERROR", BUNDLE, ex.getMessage()), ex);
             }
         }
-        return getElementValue(obj, elName);
+        return getElementValue(obj);
     }
 
-    public static Object getElementValue(Object obj, QName elName) {
+    public static Object getElementValue(Object obj) {
         if (null == obj) {
             return null;
         }
@@ -376,17 +231,7 @@
         }
         return obj;
     }
-
-//    private static boolean isSame(QName messageQName, QName methodQName) {
-//        boolean same = false;
-//        if (StringUtils.isEmpty(messageQName.getNamespaceURI())) {
-//            same = messageQName.getLocalPart().equals(methodQName.getLocalPart());
-//        } else {
-//            same = messageQName.equals(methodQName);
-//        }
-//        return same;
-//    }
-
+    
     public static Class<?> getClassFromType(Type t) {
         if (t instanceof Class) {
             return (Class)t;

Added: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java?view=auto&rev=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java (added)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java Sun Oct 29 20:56:21 2006
@@ -0,0 +1,84 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxb;
+
+import java.lang.reflect.Type;
+
+import javax.xml.namespace.QName;
+
+import com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader;
+import com.sun.xml.bind.v2.model.core.Element;
+import com.sun.xml.bind.v2.model.core.NonElement;
+import com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder;
+
+import org.apache.cxf.service.ServiceModelVisitor;
+import org.apache.cxf.service.model.MessagePartInfo;
+import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+
+/**
+ * Walks the service model and sets up the element/type names.
+ */
+class JAXBSchemaInitializer extends ServiceModelVisitor {
+
+    private XmlSchemaCollection schemas;
+
+    public JAXBSchemaInitializer(ServiceInfo serviceInfo, XmlSchemaCollection col) {
+        super(serviceInfo);
+        schemas = col;
+    }
+
+    @Override
+    public void begin(MessagePartInfo part) {
+        // Check to see if the WSDL information has been filled in for us.
+        if (part.getTypeQName() != null || part.getElementQName() != null) {
+            return;
+        }
+        
+        Class<?> clazz = part.getTypeClass();
+        if (clazz == null) {
+            return;
+        }
+        
+        RuntimeModelBuilder builder = new RuntimeModelBuilder(new RuntimeInlineAnnotationReader(), null);
+        NonElement<Type, Class> typeInfo = builder.getTypeInfo(clazz, null);
+
+        QName typeName = typeInfo.getTypeName();
+        // TODO: this doesn't seem to work with elements yet
+        if (typeName == null) {
+            return;
+        }
+
+        boolean isElement = typeInfo instanceof Element;
+        if (isElement) {
+            isElement = ((Element) typeInfo).getElementName() != null;
+        }
+
+        part.setElement(isElement);
+        if (isElement) {
+            QName name = ((Element) typeInfo).getElementName();
+            part.setElementQName(name);
+            part.setXmlSchema(schemas.getElementByQName(name));
+        } else {
+            part.setTypeQName(typeName);
+            part.setXmlSchema(schemas.getTypeByQName(typeName));
+        }
+    }
+}

Propchange: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



Mime
View raw message