Author: dandiep
Date: Mon Jul 9 06:36:25 2007
New Revision: 554642
URL: http://svn.apache.org/viewvc?view=rev&rev=554642
Log:
Add support for <dataBinding> inside server/endpoint definitions.
Add limited support for schema first development. I'm having problems
with XmlSchema not retaining things like <xs:annotation>s though. I
think a refactoring of the schema related code is needed and I intend
to do this tonight/tomorrow.
(I soooo hate XmlSchema and regret ever using it)
Added:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
(with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/SchemaFirstTest.java
(with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/EchoFoo.java
(with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/echoFoo.xsd
(with props)
Modified:
incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/schemas/jaxws.xsd
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/clients.xml
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ClientProxyFactoryBean.java
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java
incubator/cxf/trunk/rt/frontend/simple/src/main/resources/schemas/simple.xsd
Added:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java?view=auto&rev=554642
==============================================================================
---
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
(added)
+++
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
Mon Jul 9 06:36:25 2007
@@ -0,0 +1,81 @@
+/**
+ * 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.databinding.source;
+
+import java.util.Collection;
+
+import javax.xml.transform.dom.DOMSource;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.service.model.SchemaInfo;
+import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+
+public class AbstractDataBinding {
+ private Collection<DOMSource> schemas;
+
+ public Collection<DOMSource> getSchemas() {
+ return schemas;
+ }
+
+ public void setSchemas(Collection<DOMSource> schemas) {
+ this.schemas = schemas;
+ }
+
+
+ protected void addSchemaDocument(ServiceInfo serviceInfo,
+ XmlSchemaCollection col,
+ Document d,
+ String systemId) {
+ String ns = d.getDocumentElement().getAttribute("targetNamespace");
+ if (StringUtils.isEmpty(ns) || !isSameTNS(serviceInfo)) {
+ ns = serviceInfo.getInterface().getName().getNamespaceURI();
+ d.getDocumentElement().setAttribute("targetNamespace", ns);
+ }
+
+ NodeList nodes = d.getDocumentElement().getChildNodes();
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Node n = nodes.item(i);
+ if (n instanceof Element) {
+ Element e = (Element) n;
+ if (e.getLocalName().equals("import")) {
+ d.getDocumentElement().removeChild(e);
+ }
+ }
+ }
+
+ SchemaInfo schema = new SchemaInfo(serviceInfo, ns);
+ schema.setElement(d.getDocumentElement());
+ schema.setSystemId(systemId);
+ XmlSchema xmlSchema = col.read(d.getDocumentElement());
+ schema.setSchema(xmlSchema);
+ serviceInfo.addSchema(schema);
+ }
+
+ private boolean isSameTNS(final ServiceInfo service) {
+ return
service.getName().getNamespaceURI().equals(service.getInterface().getName().getNamespaceURI());
+ }
+}
Propchange:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
------------------------------------------------------------------------------
svn:executable = *
Propchange:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
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=554642&r1=554641&r2=554642
==============================================================================
---
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
Mon Jul 9 06:36:25 2007
@@ -34,60 +34,47 @@
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.SchemaOutputResolver;
-import javax.xml.parsers.ParserConfigurationException;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.Result;
import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
import org.w3c.dom.Document;
-import org.w3c.dom.Element;
import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import org.xml.sax.SAXException;
import com.sun.xml.bind.v2.ContextFactory;
import com.sun.xml.bind.v2.runtime.JAXBContextImpl;
import org.apache.cxf.common.i18n.BundleUtils;
import org.apache.cxf.common.i18n.Message;
-import org.apache.cxf.common.i18n.UncheckedException;
import org.apache.cxf.common.util.PackageUtils;
import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.databinding.DataBinding;
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.databinding.DataWriter;
-import org.apache.cxf.helpers.CastUtils;
-import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.databinding.source.AbstractDataBinding;
import org.apache.cxf.jaxb.io.DataReaderImpl;
import org.apache.cxf.jaxb.io.DataWriterImpl;
-import org.apache.cxf.resource.URIResolver;
import org.apache.cxf.service.Service;
import org.apache.cxf.service.factory.ServiceConstructionException;
-import org.apache.cxf.service.model.SchemaInfo;
import org.apache.cxf.service.model.ServiceInfo;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.cxf.wsdl11.WSDLServiceBuilder;
-import org.apache.ws.commons.schema.XmlSchema;
import org.apache.ws.commons.schema.XmlSchemaCollection;
-public final class JAXBDataBinding implements DataBinding {
+public final class JAXBDataBinding extends AbstractDataBinding implements
DataBinding {
public static final String SCHEMA_RESOURCE = "SCHEMRESOURCE";
public static final String UNWRAP_JAXB_ELEMENT = "unwrap.jaxb.element";
- private static final Logger LOG =
Logger.getLogger(JAXBDataBinding.class.getName());
-
private static final ResourceBundle BUNDLE =
BundleUtils.getBundle(JAXBDataBinding.class);
private static final Class<?> SUPPORTED_READER_FORMATS[] = new Class<?>[]
{Node.class,
@@ -164,92 +151,6 @@
return SUPPORTED_READER_FORMATS;
}
- public Map<String, SchemaInfo> getSchemas(ServiceInfo serviceInfo) {
- Collection<String> schemaResources = CastUtils
- .cast(serviceInfo.getProperty(SCHEMA_RESOURCE, List.class),
String.class);
-
- return loadSchemas(schemaResources);
- }
-
- private Map<String, SchemaInfo> loadSchemas(Collection<String>
schemaResources) {
- Map<String, SchemaInfo> schemas = new HashMap<String, SchemaInfo>();
- for (String schema : schemaResources) {
- URIResolver resolver = null;
- try {
- resolver = new URIResolver(schema);
- } catch (IOException e) {
- LOG.log(Level.SEVERE, e.getMessage());
- }
- if (!resolver.isResolved()) {
- throw new UncheckedException(new
Message("SCHEMA_NOT_RESOLVED", BUNDLE, schema));
- }
- if (resolver.isFile()) {
- // load schemas from file system
- loadSchemaFromFile(schema, schemas);
- } else {
- // load schemas from classpath
- loadSchemaFromClassPath(schema, schemas);
- }
- }
- return schemas;
- }
-
- private void loadSchemaFromClassPath(String schema, Map<String,
SchemaInfo> schemas) {
- // we can reuse code in javatowsdl tool after tool refactor
-
- try {
- //TODO - until tools refactor, just use basic URIResolver
- XmlSchemaCollection schemaCol = new XmlSchemaCollection();
- URIResolver resolver = new URIResolver(schema);
-
- Document schemaDoc = DOMUtils.readXml(resolver.getInputStream());
-
- XmlSchema xmlSchema =
schemaCol.read(schemaDoc.getDocumentElement());
- SchemaInfo schemaInfo = new SchemaInfo(null,
xmlSchema.getTargetNamespace());
-
- schemaInfo.setElement(schemaDoc.getDocumentElement());
- schemas.put(schemaInfo.getNamespaceURI(), schemaInfo);
- } catch (IOException e) {
- LOG.log(Level.SEVERE, e.getMessage());
- throw new UncheckedException(e);
- } catch (SAXException e) {
- LOG.log(Level.SEVERE, e.getMessage());
- throw new UncheckedException(e);
- } catch (ParserConfigurationException e) {
- LOG.log(Level.SEVERE, e.getMessage());
- throw new UncheckedException(e);
- }
- }
-
- private void loadSchemaFromFile(String schema, Map<String, SchemaInfo>
schemas) {
- try {
- XmlSchemaCollection schemaCol = new XmlSchemaCollection();
- URIResolver resolver = new URIResolver(schema);
- schemaCol.setBaseUri(resolver.getFile().getParent());
-
- Document schemaDoc = DOMUtils.readXml(resolver.getInputStream());
-
- XmlSchema xmlSchema =
schemaCol.read(schemaDoc.getDocumentElement());
- SchemaInfo schemaInfo = new SchemaInfo(null,
xmlSchema.getTargetNamespace());
-
- schemaInfo.setElement(schemaDoc.getDocumentElement());
- schemas.put(schemaInfo.getNamespaceURI(), schemaInfo);
- } catch (IOException e) {
- LOG.log(Level.SEVERE, e.getMessage());
- throw new UncheckedException(e);
- } catch (SAXException e) {
- LOG.log(Level.SEVERE, e.getMessage());
- throw new UncheckedException(e);
- } catch (ParserConfigurationException e) {
- LOG.log(Level.SEVERE, e.getMessage());
- throw new UncheckedException(e);
- }
- }
-
- private boolean isSameTNS(final ServiceInfo service) {
- return
service.getName().getNamespaceURI().equals(service.getInterface().getName().getNamespaceURI());
- }
-
public void initialize(Service service) {
//context is already set, don't redo it
if (context != null) {
@@ -284,37 +185,23 @@
col = new XmlSchemaCollection();
- try {
- for (DOMResult r : generateJaxbSchemas()) {
- Document d = (Document)r.getNode();
- String ns =
d.getDocumentElement().getAttribute("targetNamespace");
- if (StringUtils.isEmpty(ns) || !isSameTNS(serviceInfo)) {
- ns =
serviceInfo.getInterface().getName().getNamespaceURI();
- d.getDocumentElement().setAttribute("targetNamespace",
ns);
- }
-
- NodeList nodes = d.getDocumentElement().getChildNodes();
- for (int i = 0; i < nodes.getLength(); i++) {
- Node n = nodes.item(i);
- if (n instanceof Element) {
- Element e = (Element) n;
- if (e.getLocalName().equals("import")) {
- d.getDocumentElement().removeChild(e);
- }
- }
+ Collection<DOMSource> schemas = getSchemas();
+ if (schemas != null) {
+ for (DOMSource r : schemas) {
+ addSchemaDocument(serviceInfo, col,
+ (Document)r.getNode(), r.getSystemId());
+ }
+ } else {
+ try {
+ for (DOMResult r : generateJaxbSchemas()) {
+ addSchemaDocument(serviceInfo, col,
+ (Document)r.getNode(),
r.getSystemId());
}
-
- SchemaInfo schema = new SchemaInfo(serviceInfo, ns);
- schema.setElement(d.getDocumentElement());
- schema.setSystemId(r.getSystemId());
- XmlSchema xmlSchema = col.read(d.getDocumentElement());
- schema.setSchema(xmlSchema);
- serviceInfo.addSchema(schema);
+ } catch (IOException e) {
+ throw new ServiceConstructionException(new
Message("SCHEMA_GEN_EXC", BUNDLE), e);
}
- } catch (IOException e) {
- throw new ServiceConstructionException(new
Message("SCHEMA_GEN_EXC", BUNDLE), e);
}
-
+
serviceInfo.setProperty(WSDLServiceBuilder.WSDL_SCHEMA_LIST, col);
JAXBContextImpl riContext;
if (context instanceof JAXBContextImpl) {
@@ -333,7 +220,7 @@
schemaInit.walk();
}
}
-
+
public void setExtraClass(Class[] userExtraClass) {
extraClass = userExtraClass;
}
Modified:
incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java?view=diff&rev=554642&r1=554641&r2=554642
==============================================================================
---
incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
(original)
+++
incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
Mon Jul 9 06:36:25 2007
@@ -21,11 +21,9 @@
import java.io.OutputStream;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;
@@ -52,8 +50,6 @@
import org.apache.cxf.jaxb.io.DataWriterImpl;
import org.apache.cxf.jaxb_misc.ObjectFactory;
import org.apache.cxf.jaxb_misc.TestJAXBClass;
-import org.apache.cxf.service.model.SchemaInfo;
-import org.apache.cxf.service.model.ServiceInfo;
import org.apache.cxf.transport.DestinationFactoryManager;
import org.apache.cxf.wsdl11.WSDLServiceBuilder;
import org.apache.hello_world.types.GreetMe;
@@ -69,17 +65,13 @@
private static final Logger LOG =
Logger.getLogger(JAXBDataBindingTest.class.getName());
private static final String WSDL_PATH = "/wsdl/hello_world.wsdl";
- private static final String SCHEMA1 = "/schemas/wsdl/wsdl.xsd";
- private static final String SCHEMA2 = "/schema/jms.xsd";
private Definition def;
private Service service;
- private ServiceInfo serviceInfo;
private IMocksControl control;
private Bus bus;
private BindingFactoryManager bindingFactoryManager;
private JAXBDataBinding jaxbDataBinding;
- private Map<String, SchemaInfo> schemaMap;
private DestinationFactoryManager destinationFactoryManager;
@Before
@@ -112,16 +104,7 @@
}
}
- serviceInfo = wsdlServiceBuilder.buildServices(def, service).get(0);
- List<String> schemas = new ArrayList<String>();
-
- String schema1 = getClass().getResource(SCHEMA1).toString();
- String schema2 = getClass().getResource(SCHEMA2).toString();
- schemas.add(schema1);
- schemas.add(schema2);
-
- serviceInfo.setProperty(JAXBDataBinding.SCHEMA_RESOURCE, schemas);
- schemaMap = jaxbDataBinding.getSchemas(serviceInfo);
+ wsdlServiceBuilder.buildServices(def, service);
}
@After
@@ -129,19 +112,6 @@
}
- @Test
- public void testGetSchemas() throws Exception {
- assertEquals(schemaMap.size(), 2);
- assertTrue(schemaMap.containsKey("http://schemas.xmlsoap.org/wsdl/"));
-
assertTrue(schemaMap.containsKey("http://cxf.apache.org/transports/jms"));
- SchemaInfo wsdlSchema =
schemaMap.get("http://schemas.xmlsoap.org/wsdl/");
- SchemaInfo jmsSchema =
schemaMap.get("http://cxf.apache.org/transports/jms");
- assertNotNull(wsdlSchema.getElement());
- assertNotNull(jmsSchema.getElement());
- assertEquals(wsdlSchema.getNamespaceURI(),
"http://schemas.xmlsoap.org/wsdl/");
- assertEquals(jmsSchema.getNamespaceURI(),
"http://cxf.apache.org/transports/jms");
- }
-
@Test
public void testCreateJAXBContext() throws Exception {
try {
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/schemas/jaxws.xsd
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/schemas/jaxws.xsd?view=diff&rev=554642&r1=554641&r2=554642
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/schemas/jaxws.xsd
(original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/schemas/jaxws.xsd
Mon Jul 9 06:36:25 2007
@@ -17,7 +17,7 @@
specific language governing permissions and limitations
under the License.
-->
-<xsd:schema xmlns="http://www.springframework.org/schema/myns"
+<xsd:schema xmlns="http://cxf.apache.org/jaxws"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:cxf-beans="http://cxf.apache.org/configuration/beans"
@@ -33,8 +33,9 @@
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="beans:identifiedType">
- <xsd:sequence>
+ <xsd:all>
<xsd:element name="binding" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="dataBinding" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="executor" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="features" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="implementor" type="xsd:anyType" minOccurs="0"/>
@@ -43,8 +44,9 @@
<xsd:element name="outInterceptors" type="xsd:anyType"
minOccurs="0"/>
<xsd:element name="outFaultInterceptors" type="xsd:anyType"
minOccurs="0"/>
<xsd:element name="properties" type="beans:mapType" minOccurs="0"/>
+ <xsd:element name="schemaLocations" type="schemasType"
minOccurs="0"/>
<xsd:element name="serviceFactory" type="xsd:anyType"
minOccurs="0"/>
- </xsd:sequence>
+ </xsd:all>
<xsd:attributeGroup ref="cxf-beans:beanAttributes"/>
<xsd:attribute name="address" type="xsd:string" />
<xsd:attribute name="bindingUri" type="xsd:string" />
@@ -63,8 +65,9 @@
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="beans:identifiedType">
- <xsd:sequence>
+ <xsd:all>
<xsd:element name="binding" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="dataBinding" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="executor" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="features" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="implementor" type="xsd:anyType" minOccurs="0"/>
@@ -74,9 +77,10 @@
<xsd:element name="outInterceptors" type="xsd:anyType"
minOccurs="0"/>
<xsd:element name="outFaultInterceptors" type="xsd:anyType"
minOccurs="0"/>
<xsd:element name="properties" type="beans:mapType" minOccurs="0"/>
+ <xsd:element name="schemaLocations" type="schemasType"
minOccurs="0"/>
<xsd:element name="serviceBean" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="serviceFactory" type="xsd:anyType"
minOccurs="0"/>
- </xsd:sequence>
+ </xsd:all>
<xsd:attributeGroup ref="cxf-beans:beanAttributes"/>
<xsd:attribute name="address" type="xsd:string" />
<xsd:attribute name="bus" type="xsd:string" />
@@ -94,8 +98,9 @@
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="beans:identifiedType">
- <xsd:sequence>
+ <xsd:all>
<xsd:element name="binding" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="dataBinding" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="features" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="inInterceptors" type="xsd:anyType"
minOccurs="0"/>
<xsd:element name="inFaultInterceptors" type="xsd:anyType"
minOccurs="0"/>
@@ -103,7 +108,7 @@
<xsd:element name="outFaultInterceptors" type="xsd:anyType"
minOccurs="0"/>
<xsd:element name="properties" type="beans:mapType" minOccurs="0"/>
<xsd:element name="conduitSelector" type="xsd:anyType"
minOccurs="0"/>
- </xsd:sequence>
+ </xsd:all>
<xsd:attributeGroup ref="cxf-beans:beanAttributes"/>
<xsd:attribute name="address" type="xsd:string" />
<xsd:attribute name="bindingUri" type="xsd:string" />
@@ -118,4 +123,11 @@
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
+
+ <xsd:complexType name="schemasType">
+ <xsd:sequence>
+ <xsd:element name="schemaLocation" type="xsd:string" minOccurs="0"
maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
</xsd:schema>
Added:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/SchemaFirstTest.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/SchemaFirstTest.java?view=auto&rev=554642
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/SchemaFirstTest.java
(added)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/SchemaFirstTest.java
Mon Jul 9 06:36:25 2007
@@ -0,0 +1,51 @@
+/**
+ * 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.jaxws;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.w3c.dom.Document;
+
+import org.apache.cxf.endpoint.Server;
+import org.apache.cxf.jaxws.service.EchoFoo;
+import org.junit.Test;
+
+public class SchemaFirstTest extends AbstractJaxWsTest {
+
+
+ @Test
+ public void testEndpoint() throws Exception {
+
+ JaxWsServerFactoryBean svr = new JaxWsServerFactoryBean();
+ svr.setBus(bus);
+ svr.setServiceBean(new EchoFoo());
+ svr.setAddress("http://localhost:9000/hello");
+ List<String> schemas = new ArrayList<String>();
+ schemas.add("/org/apache/cxf/jaxws/service/echoFoo.xsd");
+ svr.setSchemaLocations(schemas);
+ Server server = svr.create();
+
+ Document d = getWSDLDocument(server);
+
+ // XmlSchema still isn't preserving all the extra info...
+ assertValid("//xsd:[EMAIL PROTECTED]'foo']/xsd:sequence", d);
+ }
+}
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/SchemaFirstTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/SchemaFirstTest.java
------------------------------------------------------------------------------
svn:executable = *
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/SchemaFirstTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/EchoFoo.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/EchoFoo.java?view=auto&rev=554642
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/EchoFoo.java
(added)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/EchoFoo.java
Mon Jul 9 06:36:25 2007
@@ -0,0 +1,29 @@
+/**
+ * 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.jaxws.service;
+
+import javax.jws.WebService;
+
[EMAIL PROTECTED]
+public class EchoFoo {
+ public Foo echoFoo(Foo foo) {
+ return foo;
+ }
+}
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/EchoFoo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/EchoFoo.java
------------------------------------------------------------------------------
svn:executable = *
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/EchoFoo.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/echoFoo.xsd
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/echoFoo.xsd?view=auto&rev=554642
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/echoFoo.xsd
(added)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/echoFoo.xsd
Mon Jul 9 06:36:25 2007
@@ -0,0 +1,13 @@
+<xs:schema xmlns="http://service.jaxws.cxf.apache.org/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ attributeFormDefault="unqualified" elementFormDefault="unqualified"
+ targetNamespace="http://service.jaxws.cxf.apache.org/">
+ <xs:complexType name="foo">
+ <xs:annotation>
+ bibbity bob
+ <!-- foo bar -->
+ </xs:annotation>
+ <xs:sequence>
+ </xs:sequence>
+ </xs:complexType>
+</xs:schema>
\ No newline at end of file
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/echoFoo.xsd
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/echoFoo.xsd
------------------------------------------------------------------------------
svn:executable = *
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/echoFoo.xsd
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/echoFoo.xsd
------------------------------------------------------------------------------
svn:mime-type = text/xml
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java?view=diff&rev=554642&r1=554641&r2=554642
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
(original)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
Mon Jul 9 06:36:25 2007
@@ -29,6 +29,7 @@
import org.apache.cxf.binding.soap.SoapBindingConfiguration;
import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;
+import org.apache.cxf.databinding.source.SourceDataBinding;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.NullConduitSelector;
import org.apache.cxf.frontend.ClientProxy;
@@ -136,6 +137,8 @@
assertTrue(bc instanceof SoapBindingConfiguration);
SoapBindingConfiguration sbc = (SoapBindingConfiguration) bc;
assertTrue(sbc.getVersion() instanceof Soap12);
+
+ bean = (JaxWsServerFactoryBean) ctx.getBean("inlineDataBinding");
}
@@ -179,5 +182,7 @@
}
assertTrue(saaj);
assertTrue(logging);
+
+ assertTrue(client.getEndpoint().getService().getDataBinding()
instanceof SourceDataBinding);
}
}
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/clients.xml
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/clients.xml?view=diff&rev=554642&r1=554641&r2=554642
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/clients.xml
(original)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/clients.xml
Mon Jul 9 06:36:25 2007
@@ -56,6 +56,9 @@
<jaxws:conduitSelector>
<bean class="org.apache.cxf.endpoint.NullConduitSelector"/>
</jaxws:conduitSelector>
+ <jaxws:dataBinding>
+ <bean class="org.apache.cxf.databinding.source.SourceDataBinding"/>
+ </jaxws:dataBinding>
</jaxws:client>
<!--
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml?view=diff&rev=554642&r1=554641&r2=554642
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml
(original)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml
Mon Jul 9 06:36:25 2007
@@ -72,4 +72,12 @@
<soap:soapBinding mtomEnabled="true" version="1.2"/>
</jaxws:binding>
</jaxws:server>
+
+ <jaxws:server id="inlineDataBinding"
+ serviceClass="org.apache.cxf.jaxws.service.Hello"
+ address="http://localhost:8080/test">
+ <jaxws:dataBinding>
+ <bean class="org.apache.cxf.jaxb.JAXBDataBinding"/>
+ </jaxws:dataBinding>
+ </jaxws:server>
</beans>
Modified:
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java?view=diff&rev=554642&r1=554641&r2=554642
==============================================================================
---
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java
(original)
+++
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java
Mon Jul 9 06:36:25 2007
@@ -35,6 +35,7 @@
import org.apache.cxf.binding.soap.model.SoapBindingInfo;
import org.apache.cxf.common.i18n.Message;
import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.databinding.DataBinding;
import org.apache.cxf.endpoint.ConduitSelector;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.EndpointException;
@@ -61,6 +62,7 @@
private String transportId;
private String bindingId;
private Class serviceClass;
+ private DataBinding dataBinding;
private BindingFactory bindingFactory;
private DestinationFactory destinationFactory;
private ReflectionServiceFactoryBean serviceFactory;
@@ -75,10 +77,7 @@
Service service = serviceFactory.getService();
if (service == null) {
- Class cls = getServiceClass();
-
- serviceFactory.setServiceClass(cls);
- serviceFactory.setBus(getBus());
+ initializeServiceFactory();
service = serviceFactory.create();
}
@@ -144,6 +143,16 @@
return ep;
}
+ protected void initializeServiceFactory() {
+ Class cls = getServiceClass();
+
+ serviceFactory.setServiceClass(cls);
+ serviceFactory.setBus(getBus());
+ if (dataBinding != null) {
+ serviceFactory.setDataBinding(dataBinding);
+ }
+ }
+
protected EndpointInfo createEndpointInfo() throws BusException {
if (transportId == null
&& getAddress() != null) {
@@ -369,4 +378,14 @@
public void setConduitSelector(ConduitSelector selector) {
conduitSelector = selector;
}
+
+ public DataBinding getDataBinding() {
+ return dataBinding;
+ }
+
+ public void setDataBinding(DataBinding dataBinding) {
+ this.dataBinding = dataBinding;
+ }
+
+
}
Modified:
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ClientProxyFactoryBean.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ClientProxyFactoryBean.java?view=diff&rev=554642&r1=554641&r2=554642
==============================================================================
---
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ClientProxyFactoryBean.java
(original)
+++
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ClientProxyFactoryBean.java
Mon Jul 9 06:36:25 2007
@@ -28,6 +28,7 @@
import org.apache.cxf.Bus;
import org.apache.cxf.configuration.security.AuthorizationPolicy;
+import org.apache.cxf.databinding.DataBinding;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.ConduitSelector;
import org.apache.cxf.feature.AbstractFeature;
@@ -54,6 +55,7 @@
private Map<String, Object> properties;
private Bus bus;
private List<AbstractFeature> features;
+ private DataBinding dataBinding;
public ClientProxyFactoryBean() {
super();
@@ -79,6 +81,10 @@
clientFactoryBean.setBus(bus);
}
+ if (dataBinding != null) {
+ clientFactoryBean.setDataBinding(dataBinding);
+ }
+
Client c = clientFactoryBean.create();
if (getInInterceptors() != null) {
c.getInInterceptors().addAll(getInInterceptors());
@@ -216,6 +222,14 @@
public void setFeatures(List<AbstractFeature> features) {
this.features = features;
+ }
+
+ public DataBinding getDataBinding() {
+ return dataBinding;
+ }
+
+ public void setDataBinding(DataBinding dataBinding) {
+ this.dataBinding = dataBinding;
}
}
Modified:
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java?view=diff&rev=554642&r1=554641&r2=554642
==============================================================================
---
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java
(original)
+++
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java
Mon Jul 9 06:36:25 2007
@@ -19,16 +19,30 @@
package org.apache.cxf.frontend;
import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
+import java.util.logging.Logger;
+
+import javax.xml.transform.dom.DOMSource;
+
+import org.w3c.dom.Document;
import org.apache.cxf.BusException;
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.databinding.DataBinding;
+import org.apache.cxf.databinding.source.AbstractDataBinding;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.EndpointException;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.endpoint.ServerImpl;
import org.apache.cxf.feature.AbstractFeature;
+import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.jaxb.JAXBDataBinding;
+import org.apache.cxf.resource.ResourceManager;
+import org.apache.cxf.resource.URIResolver;
import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
import org.apache.cxf.service.factory.ServiceConstructionException;
import org.apache.cxf.service.invoker.BeanInvoker;
@@ -65,9 +79,12 @@
* </pre>
*/
public class ServerFactoryBean extends AbstractEndpointFactory {
+ private static final Logger LOG =
LogUtils.getL7dLogger(ServerFactoryBean.class);
+
private Server server;
private boolean start = true;
private Object serviceBean;
+ private List<String> schemaLocations;
public ServerFactoryBean() {
super();
@@ -111,6 +128,46 @@
return server;
}
+
+ @Override
+ protected void initializeServiceFactory() {
+ super.initializeServiceFactory();
+
+ DataBinding db = getServiceFactory().getDataBinding();
+ if (db instanceof AbstractDataBinding && schemaLocations != null) {
+ ResourceManager rr = getBus().getExtension(ResourceManager.class);
+
+ List<DOMSource> schemas = new ArrayList<DOMSource>();
+ for (String l : schemaLocations) {
+ URL url = rr.resolveResource(l, URL.class);
+
+ if (url == null) {
+ URIResolver res;
+ try {
+ res = new URIResolver(l);
+ } catch (IOException e) {
+ throw new ServiceConstructionException(new
Message("INVALID_SCHEMA_URL", LOG), e);
+ }
+
+ if (!res.isResolved()) {
+ throw new ServiceConstructionException(new
Message("INVALID_SCHEMA_URL", LOG));
+ }
+ url = res.getURL();
+ }
+
+ Document d;
+ try {
+ d = DOMUtils.readXml(url.openStream());
+ } catch (Exception e) {
+ throw new ServiceConstructionException(e);
+ }
+ schemas.add(new DOMSource(d, url.toString()));
+ }
+
+ ((AbstractDataBinding)db).setSchemas(schemas);
+ }
+ }
+
protected void applyFeatures() {
if (getFeatures() != null) {
for (AbstractFeature feature : getFeatures()) {
@@ -170,5 +227,13 @@
public void setServiceBean(Object serviceBean) {
this.serviceBean = serviceBean;
}
-
+
+ public List<String> getSchemaLocations() {
+ return schemaLocations;
+ }
+
+ public void setSchemaLocations(List<String> schemaLocations) {
+ this.schemaLocations = schemaLocations;
+ }
+
}
Modified:
incubator/cxf/trunk/rt/frontend/simple/src/main/resources/schemas/simple.xsd
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/resources/schemas/simple.xsd?view=diff&rev=554642&r1=554641&r2=554642
==============================================================================
---
incubator/cxf/trunk/rt/frontend/simple/src/main/resources/schemas/simple.xsd
(original)
+++
incubator/cxf/trunk/rt/frontend/simple/src/main/resources/schemas/simple.xsd
Mon Jul 9 06:36:25 2007
@@ -37,6 +37,7 @@
<xsd:extension base="beans:identifiedType">
<xsd:all>
<xsd:element name="binding" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="dataBinding" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="executor" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="features" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="implementor" type="xsd:anyType" minOccurs="0"/>
@@ -46,6 +47,7 @@
<xsd:element name="outInterceptors" type="xsd:anyType"
minOccurs="0"/>
<xsd:element name="outFaultInterceptors" type="xsd:anyType"
minOccurs="0"/>
<xsd:element name="properties" type="beans:mapType" minOccurs="0"/>
+ <xsd:element name="schemaLocations" type="schemasType"
minOccurs="0"/>
<xsd:element name="serviceBean" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="serviceFactory" type="xsd:anyType" minOccurs="0"/>
</xsd:all>
@@ -69,6 +71,7 @@
<xsd:all>
<xsd:element name="binding" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="conduitSelector" type="xsd:anyType"
minOccurs="0"/>
+ <xsd:element name="dataBinding" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="features" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="inInterceptors" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="inFaultInterceptors" type="xsd:anyType"
minOccurs="0"/>
@@ -89,4 +92,11 @@
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
+
+ <xsd:complexType name="schemasType">
+ <xsd:sequence>
+ <xsd:element name="schemaLocation" type="xsd:string" minOccurs="0"
maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
</xsd:schema>