Author: bimargulies
Date: Fri Nov  2 06:31:06 2007
New Revision: 591325

URL: http://svn.apache.org/viewvc?rev=591325&view=rev
Log:
Fix CXF-1168.

Added:
    
incubator/cxf/trunk/testutils/src/main/resources/wsdl/dynamic_client_base64.wsdl
Modified:
    
incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/TypeClassInitializer.java
    
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java

Modified: 
incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/TypeClassInitializer.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/TypeClassInitializer.java?rev=591325&r1=591324&r2=591325&view=diff
==============================================================================
--- 
incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/TypeClassInitializer.java
 (original)
+++ 
incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/TypeClassInitializer.java
 Fri Nov  2 06:31:06 2007
@@ -18,6 +18,7 @@
  */
 package org.apache.cxf.endpoint.dynamic;
 
+import java.lang.reflect.Array;
 import java.util.logging.Logger;
 
 import javax.xml.namespace.QName;
@@ -83,12 +84,24 @@
             
         Class cls;
         
-        //JClass jclass;
         try {
-            if (!jType.isPrimitive()) {
-                cls = ClassLoaderUtils.loadClass(jType.fullName(), getClass());
-            } else {
-                cls = PrimitiveUtils.getClass(jType.fullName());
+            int arrayCount = 0;
+            JType rootType = jType;
+            while (rootType.isArray()) {
+                rootType = rootType.elementType();
+                arrayCount++;
+            }
+            cls = getClassByName(rootType);
+            // bmargulies cannot find a way to ask the JVM to do this without 
creating 
+            // an array object on the way.
+            if (arrayCount > 0) {
+                int[] dimensions = new int[arrayCount];
+                while (arrayCount > 0) {
+                    arrayCount--;
+                    dimensions[arrayCount] = 0;
+                }
+                Object emptyArray = Array.newInstance(cls, dimensions);
+                cls = emptyArray.getClass();
             }
         } catch (ClassNotFoundException e) {
             throw new ServiceConstructionException(e);
@@ -97,6 +110,17 @@
         part.setTypeClass(cls);
         
         super.begin(part);
+    }
+
+    private Class getClassByName(JType jType) throws ClassNotFoundException {
+        Class cls;
+        
+        if (!jType.isPrimitive()) {
+            cls = ClassLoaderUtils.loadClass(jType.fullName(), getClass());
+        } else {
+            cls = PrimitiveUtils.getClass(jType.fullName());
+        }
+        return cls;
     }
 
 }

Modified: 
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java?rev=591325&r1=591324&r2=591325&view=diff
==============================================================================
--- 
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
 (original)
+++ 
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
 Fri Nov  2 06:31:06 2007
@@ -19,8 +19,6 @@
 
 package org.apache.cxf.systest.jaxws;
 
-
-
 import java.io.InputStream;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
@@ -52,7 +50,9 @@
 import org.w3c.dom.Node;
 
 //import org.apache.cxf.Bus;
+import org.apache.cxf.Bus;
 import org.apache.cxf.binding.soap.Soap11;
+import org.apache.cxf.bus.CXFBusFactory;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.configuration.security.AuthorizationPolicy;
 import org.apache.cxf.endpoint.Client;
@@ -102,6 +102,18 @@
         assertTrue("server did not launch correctly", 
launchServer(Server.class));
     }
 
+    @Test
+    public void testBase64() throws URISyntaxException  {
+        URL wsdl = getClass().getResource("/wsdl/dynamic_client_base64.wsdl");
+        assertNotNull(wsdl);
+        String wsdlUrl = null;
+        wsdlUrl = wsdl.toURI().toString();
+        CXFBusFactory busFactory = new CXFBusFactory(); 
+        Bus bus = busFactory.createBus();
+        DynamicClientFactory dynamicClientFactory = 
DynamicClientFactory.newInstance(bus);
+        Client client = dynamicClientFactory.createClient(wsdlUrl);
+        assertNotNull(client);
+    }
         
     @Test
     public void testBasicConnection() throws Exception {

Added: 
incubator/cxf/trunk/testutils/src/main/resources/wsdl/dynamic_client_base64.wsdl
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/resources/wsdl/dynamic_client_base64.wsdl?rev=591325&view=auto
==============================================================================
--- 
incubator/cxf/trunk/testutils/src/main/resources/wsdl/dynamic_client_base64.wsdl
 (added)
+++ 
incubator/cxf/trunk/testutils/src/main/resources/wsdl/dynamic_client_base64.wsdl
 Fri Nov  2 06:31:06 2007
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+       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.
+-->
+<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
+       xmlns:ns1="http://rpc.data.webservicestudio.inforsense.com/";
+       xmlns:ns2="http://schemas.xmlsoap.org/soap/http";
+       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
+       xmlns:xsd="http://www.w3.org/2001/XMLSchema"; name="DataTestService"
+       targetNamespace="http://rpc.data.webservicestudio.inforsense.com/";>
+       <wsdl:types>
+               <xsd:schema
+                       xmlns="http://rpc.data.webservicestudio.inforsense.com/";
+                       attributeFormDefault="unqualified" 
elementFormDefault="qualified"
+                       
targetNamespace="http://rpc.data.webservicestudio.inforsense.com/";
+                       xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
+                       <xsd:element name="UnsupportedEncodingException"
+                               type="UnsupportedEncodingException" />
+                       <xsd:complexType name="UnsupportedEncodingException">
+                               <xsd:sequence>
+                                       <xsd:element name="message" 
nillable="true"
+                                               type="xsd:string" />
+                               </xsd:sequence>
+                       </xsd:complexType>
+               </xsd:schema>
+       </wsdl:types>
+       <wsdl:message name="getStringResponse">
+               <wsdl:part name="return" type="xsd:string"></wsdl:part>
+       </wsdl:message>
+       <wsdl:message name="getString">
+               <wsdl:part name="arg0" type="xsd:base64Binary"></wsdl:part>
+               <wsdl:part name="arg1" type="xsd:string"></wsdl:part>
+       </wsdl:message>
+       <wsdl:message name="UnsupportedEncodingException">
+               <wsdl:part element="ns1:UnsupportedEncodingException"
+                       name="fault">
+               </wsdl:part>
+       </wsdl:message>
+       <wsdl:portType name="TestService">
+               <wsdl:operation name="getString">
+                       <wsdl:input message="ns1:getString" name="getString">
+                       </wsdl:input>
+                       <wsdl:output message="ns1:getStringResponse"
+                               name="getStringResponse">
+                       </wsdl:output>
+                       <wsdl:fault message="ns1:UnsupportedEncodingException"
+                               name="UnsupportedEncodingException">
+                       </wsdl:fault>
+               </wsdl:operation>
+       </wsdl:portType>
+       <wsdl:binding name="DataTestServiceSoapBinding"
+               type="ns1:TestService">
+               <soap:binding style="rpc"
+                       transport="http://schemas.xmlsoap.org/soap/http"; />
+               <wsdl:operation name="getString">
+                       <soap:operation soapAction="" style="rpc" />
+                       <wsdl:input name="getString">
+                               <soap:body
+                                       
namespace="http://rpc.data.webservicestudio.inforsense.com/";
+                                       use="literal" />
+                       </wsdl:input>
+                       <wsdl:output name="getStringResponse">
+                               <soap:body
+                                       
namespace="http://rpc.data.webservicestudio.inforsense.com/";
+                                       use="literal" />
+                       </wsdl:output>
+                       <wsdl:fault name="UnsupportedEncodingException">
+                               <soap:fault name="UnsupportedEncodingException"
+                                       use="literal" />
+                       </wsdl:fault>
+               </wsdl:operation>
+       </wsdl:binding>
+       <wsdl:service name="DataTestService">
+               <wsdl:port binding="ns1:DataTestServiceSoapBinding"
+                       name="TestServiceImplPort">
+                       <soap:address location="http://localhost:9004/data"; />
+               </wsdl:port>
+       </wsdl:service>
+</wsdl:definitions>
+
+
+


Reply via email to