You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2008/07/17 17:20:31 UTC

svn commit: r677607 - in /cxf/trunk/rt/databinding/xmlbeans/src: main/java/org/apache/cxf/xmlbeans/ test/java/org/apache/cxf/xmlbeans/ test/xsd/

Author: dkulp
Date: Thu Jul 17 08:20:30 2008
New Revision: 677607

URL: http://svn.apache.org/viewvc?rev=677607&view=rev
Log:
[CXF-1700] Add support for xsd:include to xmlbeans databinding

Added:
    cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/included.xsd   (with props)
    cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/sample.xsd   (with props)
Modified:
    cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansSchemaInitializer.java
    cxf/trunk/rt/databinding/xmlbeans/src/test/java/org/apache/cxf/xmlbeans/MultipleSchemaInNSTest.java
    cxf/trunk/rt/databinding/xmlbeans/src/test/java/org/apache/cxf/xmlbeans/TestService.java

Modified: cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansSchemaInitializer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansSchemaInitializer.java?rev=677607&r1=677606&r2=677607&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansSchemaInitializer.java (original)
+++ cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansSchemaInitializer.java Thu Jul 17 08:20:30 2008
@@ -37,6 +37,8 @@
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
+import org.xml.sax.InputSource;
+
 
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
@@ -48,6 +50,7 @@
 import org.apache.ws.commons.schema.XmlSchema;
 import org.apache.ws.commons.schema.XmlSchemaElement;
 import org.apache.ws.commons.schema.XmlSchemaType;
+import org.apache.ws.commons.schema.resolver.URIResolver;
 import org.apache.xmlbeans.SchemaType;
 import org.apache.xmlbeans.SchemaTypeSystem;
 import org.apache.xmlbeans.XmlAnySimpleType;
@@ -58,6 +61,8 @@
  * Walks the service model and sets up the element/type names.
  */
 class XmlBeansSchemaInitializer extends ServiceModelVisitor {
+
+
     private static final Logger LOG = LogUtils.getLogger(XmlBeansSchemaInitializer.class);
     private static final Map<Class<?>, Class<? extends XmlAnySimpleType>> CLASS_MAP 
         = new HashMap<Class<?>, Class<? extends XmlAnySimpleType>>();
@@ -97,6 +102,20 @@
         dataBinding = db;
     }
     
+    public class XMLSchemaResolver implements URIResolver {
+        final SchemaTypeSystem sts;
+        public XMLSchemaResolver(SchemaTypeSystem sts) {
+            this.sts = sts;
+        }
+        
+        public InputSource resolveEntity(String targetNamespace, String schemaLocation, String baseUri) {
+            InputStream ins = sts.getSourceAsStream(schemaLocation);
+            if (ins != null) {
+                return new InputSource(ins);
+            }
+            return null;
+        }
+    }
 
     XmlSchema getSchema(SchemaTypeSystem sts, String file) {
         if (schemaMap.containsKey(file)) {
@@ -122,7 +141,6 @@
                     }
                 }
             }            
-            
             XmlSchema schema = dataBinding.addSchemaDocument(serviceInfo,
                                                              schemas, 
                                                              doc, 
@@ -177,6 +195,8 @@
             part.setProperty(SchemaType.class.getName(), st);
             
             SchemaTypeSystem sts = st.getTypeSystem();
+            schemas.getXmlSchemaCollection().setSchemaResolver(new XMLSchemaResolver(sts));
+
             XmlSchema schema = getSchema(sts, st.getSourceName());
 
             if (st.isDocumentType()) {
@@ -195,8 +215,10 @@
                 part.setXmlSchema(sct);
                 part.setElement(false);
             }
+        } catch (RuntimeException ex) {
+            throw ex;
         } catch (Exception ex) {
-            ex.printStackTrace();
+            throw new RuntimeException(ex);
         }        
     }
     

Modified: cxf/trunk/rt/databinding/xmlbeans/src/test/java/org/apache/cxf/xmlbeans/MultipleSchemaInNSTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/test/java/org/apache/cxf/xmlbeans/MultipleSchemaInNSTest.java?rev=677607&r1=677606&r2=677607&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/xmlbeans/src/test/java/org/apache/cxf/xmlbeans/MultipleSchemaInNSTest.java (original)
+++ cxf/trunk/rt/databinding/xmlbeans/src/test/java/org/apache/cxf/xmlbeans/MultipleSchemaInNSTest.java Thu Jul 17 08:20:30 2008
@@ -24,6 +24,7 @@
 import org.w3c.dom.NodeList;
 
 import org.apache.cxf.common.util.SOAPConstants;
+import org.apache.cxf.helpers.XMLUtils;
 import org.junit.Before;
 import org.junit.Test;
   
@@ -51,7 +52,7 @@
 
         addNamespace("xsd", SOAPConstants.XSD);
         NodeList list = assertValid("//xsd:schema[@targetNamespace='" + ns + "']", wsdl);
-        assertEquals(3, list.getLength());
+        assertEquals(XMLUtils.toString(wsdl), 3, list.getLength());
         assertValid("//xsd:import[@namespace='" + ns + "']",
                     list.item(0));
         assertValid("//xsd:import[@namespace='" + ns + "']", list.item(0));

Modified: cxf/trunk/rt/databinding/xmlbeans/src/test/java/org/apache/cxf/xmlbeans/TestService.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/test/java/org/apache/cxf/xmlbeans/TestService.java?rev=677607&r1=677606&r2=677607&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/xmlbeans/src/test/java/org/apache/cxf/xmlbeans/TestService.java (original)
+++ cxf/trunk/rt/databinding/xmlbeans/src/test/java/org/apache/cxf/xmlbeans/TestService.java Thu Jul 17 08:20:30 2008
@@ -18,12 +18,16 @@
  */
 package org.apache.cxf.xmlbeans;
 
+
 import javax.jws.WebMethod;
 import javax.jws.WebParam;
 import javax.jws.WebService;
 
 import junit.framework.Assert;
 
+import com.sample.procure.PurchaseOrderDocument;
+
+
 @WebService(targetNamespace = "urn:TestService", 
             serviceName = "TestService")
 public class TestService {
@@ -43,7 +47,7 @@
         fault.setFaultInfo("extra");
         throw fault;
     }
-
+    
     @WebMethod
     public ResponseDocument mixedRequest(
                                          @WebParam(name = "string") String string,
@@ -55,4 +59,9 @@
         response.addNewResponse().addNewForm();
         return response;
     }
+    
+    @WebMethod
+    public void submitPO(PurchaseOrderDocument doc) {
+        
+    }
 }

Added: cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/included.xsd
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/included.xsd?rev=677607&view=auto
==============================================================================
--- cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/included.xsd (added)
+++ cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/included.xsd Thu Jul 17 08:20:30 2008
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://sample.com/procure" targetNamespace="http://sample.com/procure" elementFormDefault="qualified" attributeFormDefault="unqualified">
+   <xs:complexType name="customer">
+       <xs:sequence>
+           <xs:element name="name" type="xs:string"/>
+           <xs:element name="address" type="xs:string"/>
+       </xs:sequence>
+   </xs:complexType>
+   <xs:complexType name="shipper">
+       <xs:sequence>
+           <xs:element name="name" type="xs:string"/>
+           <xs:element name="per-ounce-rate" type="xs:decimal"/>
+       </xs:sequence>
+   </xs:complexType>
+</xs:schema>

Propchange: cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/included.xsd
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/included.xsd
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/included.xsd
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/sample.xsd
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/sample.xsd?rev=677607&view=auto
==============================================================================
--- cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/sample.xsd (added)
+++ cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/sample.xsd Thu Jul 17 08:20:30 2008
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema     
+   xmlns:xs="http://www.w3.org/2001/XMLSchema"
+   targetNamespace="http://sample.com/procure"
+   xmlns:po="http://sample.com/procure"
+   elementFormDefault="qualified">
+   <xs:include schemaLocation="included.xsd"/>
+   <xs:element name="purchase-order">
+       <xs:complexType>
+           <xs:sequence>
+               <xs:element name="customer" type="po:customer"/>
+               <xs:element name="shipper" type="po:shipper" minOccurs="0"/>
+           </xs:sequence>
+       </xs:complexType>
+   </xs:element>
+</xs:schema>

Propchange: cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/sample.xsd
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/sample.xsd
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/rt/databinding/xmlbeans/src/test/xsd/sample.xsd
------------------------------------------------------------------------------
    svn:mime-type = text/xml