You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bi...@apache.org on 2007/11/24 20:37:50 UTC
svn commit: r597906 - in /incubator/cxf/trunk:
common/common/src/main/java/org/apache/cxf/common/xmlschema/
rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/
rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/
rt/javascript/src/main/j...
Author: bimargulies
Date: Sat Nov 24 11:37:49 2007
New Revision: 597906
URL: http://svn.apache.org/viewvc?rev=597906&view=rev
Log:
Impose some structure on the use of the QName and refName attributes of XmlSchemaElements. Fix case in JAXB where they were both set (bad) inconsistently (worse).
Added:
incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaInvalidOperation.java
incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaTools.java
Modified:
incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/XmlSchemaUtils.java
incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/Messages.properties
incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java
Added: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaInvalidOperation.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaInvalidOperation.java?rev=597906&view=auto
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaInvalidOperation.java (added)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaInvalidOperation.java Sat Nov 24 11:37:49 2007
@@ -0,0 +1,31 @@
+/**
+ * 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.common.xmlschema;
+
+/**
+ * Very simple exception class used to detect internal errors.
+ */
+public class XmlSchemaInvalidOperation extends RuntimeException {
+
+ public XmlSchemaInvalidOperation(String message) {
+ super(message);
+ }
+
+}
Added: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaTools.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaTools.java?rev=597906&view=auto
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaTools.java (added)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaTools.java Sat Nov 24 11:37:49 2007
@@ -0,0 +1,102 @@
+/**
+ * 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.common.xmlschema;
+
+import java.util.logging.Logger;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+
+/**
+ * Some functions that avoid problems with Commons XML Schema.
+ */
+public final class XmlSchemaTools {
+ private static final Logger LOG = LogUtils.getL7dLogger(XmlSchemaTools.class);
+
+ private XmlSchemaTools() {
+ }
+
+ private static void setNameFromQName(XmlSchemaElement element, QName name) {
+ if (name == null) {
+ element.setName(null);
+ } else {
+ element.setName(name.getLocalPart());
+ }
+ }
+
+ /**
+ * Wrapper around XmlSchemaElement.setQName that checks for inconsistency with
+ * refName.
+ * @param element
+ * @param name
+ */
+ public static void setElementQName(XmlSchemaElement element, QName name) {
+ if (name != null && element.getRefName() != null && !element.getRefName().equals(name)) {
+ LOG.severe("Attempt to set the QName of an element with a reference name");
+ throw new
+ XmlSchemaInvalidOperation("Attempt to set the QName of an element "
+ + "with a reference name.");
+ }
+ element.setQName(name);
+ // in CXF, we want them to be consistent.
+ setNameFromQName(element, name);
+ }
+
+ /**
+ * Wrapper around XmlSchemaElement.setName that checks for inconsistency with
+ * refName.
+ * @param element
+ * @param name
+ */
+ public static void setElementName(XmlSchemaElement element, String name) {
+ if (name != null
+ && element.getRefName() != null
+ && !element.getRefName().getLocalPart().equals(name)
+ && (element.getQName() == null || element.getQName().getLocalPart().equals(name))) {
+ LOG.severe("Attempt to set the name of an element with a reference name.");
+ throw new
+ XmlSchemaInvalidOperation("Attempt to set the name of an element "
+ + "with a reference name.");
+ }
+ element.setName(name);
+ }
+
+ /**
+ * Wrapper around XmlSchemaElement.setRefName that checks for inconsistency with
+ * name and QName.
+ * @param element
+ * @param name
+ */
+ public static void setElementRefName(XmlSchemaElement element, QName name) {
+ if (name != null
+ && ((element.getQName() != null && !element.getQName().equals(name))
+ || (element.getName() != null && !element.getName().equals(name.getLocalPart())))) {
+ LOG.severe("Attempt to set the refName of an element with a name or QName");
+ throw new
+ XmlSchemaInvalidOperation("Attempt to set the refName of an element "
+ + "with a name or QName.");
+ }
+ element.setRefName(name);
+ // cxf conventionally keeps something in the name slot.
+ setNameFromQName(element, name);
+ }
+}
Modified: 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?rev=597906&r1=597905&r2=597906&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java Sat Nov 24 11:37:49 2007
@@ -34,6 +34,7 @@
import org.apache.cxf.common.i18n.Message;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.common.xmlschema.SchemaCollection;
+import org.apache.cxf.common.xmlschema.XmlSchemaTools;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.service.ServiceModelVisitor;
import org.apache.cxf.service.model.FaultInfo;
@@ -190,8 +191,7 @@
private XmlSchemaElement createXsElement(MessagePartInfo part, QName typeName, SchemaInfo schemaInfo) {
XmlSchemaElement el = new XmlSchemaElement();
- el.setQName(part.getElementQName());
- el.setName(part.getElementQName().getLocalPart());
+ XmlSchemaTools.setElementQName(el, part.getElementQName());
el.setNillable(true);
el.setSchemaTypeName(typeName);
part.setXmlSchema(el);
@@ -214,8 +214,7 @@
&& !isExistSchemaElement(schemaInfo.getSchema(), part.getElementQName())) {
XmlSchemaElement el = new XmlSchemaElement();
- el.setQName(part.getElementQName());
- el.setName(part.getElementQName().getLocalPart());
+ XmlSchemaTools.setElementQName(el, part.getElementQName());
el.setNillable(true);
schemaInfo.getSchema().getItems().add(el);
@@ -248,8 +247,7 @@
}
XmlSchemaElement el = new XmlSchemaElement();
- el.setQName(part.getElementQName());
- el.setName(part.getElementQName().getLocalPart());
+ XmlSchemaTools.setElementQName(el, part.getElementQName());
schemaInfo.getSchema().getItems().add(el);
schemaInfo.getSchema().getElements().add(el.getQName(), el);
@@ -278,8 +276,8 @@
String ns = schemaInfo.getSchema().getElementFormDefault()
.getValue().equals(XmlSchemaForm.UNQUALIFIED)
? "" : part.getElementQName().getLocalPart();
- el.setQName(new QName(ns, m.getName().substring(beginIdx)));
-
+ XmlSchemaTools.setElementQName(el,
+ new QName(ns, m.getName().substring(beginIdx)));
Iterator<QName> itr = beanInfo.getTypeNames().iterator();
if (!itr.hasNext()) {
return;
@@ -334,8 +332,7 @@
}
XmlSchemaElement el = new XmlSchemaElement();
- el.setQName(part.getElementQName());
- el.setName(part.getElementQName().getLocalPart());
+ XmlSchemaTools.setElementQName(el, part.getElementQName());
schema.getItems().add(el);
schema.getElements().add(el.getQName(), el);
part.setXmlSchema(el);
@@ -382,7 +379,7 @@
public void addElement(XmlSchemaSequence seq, JaxBeanInfo<?> beanInfo, QName name) {
XmlSchemaElement el = new XmlSchemaElement();
el.setName(name.getLocalPart());
- el.setQName(name);
+ XmlSchemaTools.setElementQName(el, name);
el.setMinOccurs(1);
el.setMaxOccurs(1);
@@ -392,7 +389,8 @@
QName ename = new QName(beanInfo.getElementNamespaceURI(null),
beanInfo.getElementLocalName(null));
XmlSchemaElement el2 = schemas.getElementByQName(ename);
- el.setRefName(el2.getRefName());
+ XmlSchemaTools.setElementQName(el, null);
+ XmlSchemaTools.setElementRefName(el, el2.getRefName());
} else {
Iterator<QName> itr = beanInfo.getTypeNames().iterator();
if (!itr.hasNext()) {
Modified: incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java?rev=597906&r1=597905&r2=597906&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java Sat Nov 24 11:37:49 2007
@@ -52,6 +52,7 @@
import org.apache.cxf.common.i18n.Message;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.common.xmlschema.SchemaCollection;
+import org.apache.cxf.common.xmlschema.XmlSchemaTools;
import org.apache.cxf.databinding.source.mime.MimeAttribute;
import org.apache.cxf.databinding.source.mime.MimeSerializer;
import org.apache.cxf.endpoint.Endpoint;
@@ -655,8 +656,7 @@
XmlSchema schema = si.getSchema();
XmlSchemaElement el = new XmlSchemaElement();
- el.setQName(mpi.getElementQName());
- el.setName(mpi.getElementQName().getLocalPart());
+ XmlSchemaTools.setElementQName(el, mpi.getElementQName());
if (!isExistSchemaElement(schema, mpi.getElementQName())) {
SchemaCollection.addGlobalElementToSchema(schema, el);
}
@@ -760,8 +760,7 @@
}
XmlSchemaElement el = new XmlSchemaElement();
- el.setQName(qname);
- el.setName(qname.getLocalPart());
+ XmlSchemaTools.setElementQName(el, qname);
el.setMinOccurs(1);
el.setMaxOccurs(0);
el.setNillable(true);
@@ -852,8 +851,7 @@
QName wrapperName) {
XmlSchemaElement el = new XmlSchemaElement();
- el.setQName(wrapperName);
- el.setName(wrapperName.getLocalPart());
+ XmlSchemaTools.setElementQName(el, wrapperName);
SchemaCollection.addGlobalElementToSchema(schema, el);
wrappedMessage.getMessageParts().get(0).setXmlSchema(el);
@@ -873,11 +871,11 @@
for (MessagePartInfo mpi : unwrappedMessage.getMessageParts()) {
el = new XmlSchemaElement();
- el.setName(mpi.getName().getLocalPart());
- el.setQName(mpi.getName());
+ XmlSchemaTools.setElementQName(el, mpi.getName());
if (mpi.isElement()) {
addImport(schema, mpi.getElementQName().getNamespaceURI());
- el.setRefName(mpi.getElementQName());
+ XmlSchemaTools.setElementQName(el, null);
+ XmlSchemaTools.setElementRefName(el, mpi.getElementQName());
} else {
if (mpi.getTypeQName() != null && !existXmlListAnno(mpi)) {
el.setSchemaTypeName(mpi.getTypeQName());
@@ -946,8 +944,7 @@
if (Boolean.TRUE.equals(mpi.getProperty(HEADER))) {
QName qn = (QName)mpi.getProperty(ELEMENT_NAME);
- el.setName(qn.getLocalPart());
- el.setQName(qn);
+ XmlSchemaTools.setElementQName(el, qn);
SchemaInfo headerSchemaInfo = getOrCreateSchema(serviceInfo,
qn.getNamespaceURI(),
Modified: incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/XmlSchemaUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/XmlSchemaUtils.java?rev=597906&r1=597905&r2=597906&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/XmlSchemaUtils.java (original)
+++ incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/XmlSchemaUtils.java Sat Nov 24 11:37:49 2007
@@ -36,7 +36,8 @@
import org.apache.ws.commons.schema.XmlSchemaType;
/**
- *
+ * There are a number of pitfalls in Commons Xml Schema. This class contains some utilities
+ * that avoid some of the problems and centralizes some repetitive tasks.
*/
public final class XmlSchemaUtils {
public static final XmlSchemaForm QUALIFIED = new XmlSchemaForm(XmlSchemaForm.QUALIFIED);
@@ -94,7 +95,8 @@
}
/**
- * This copes with an observed phenomenon in the schema built by the ReflectionServiceFactoryBean. It
+ * This copes with an observed phenomenon in the schema built by the
+ * ReflectionServiceFactoryBean. It
* is creating element such that: (a) the type is not set. (b) the refName is set.
* (c) the namespaceURI in the refName is set empty. This apparently indicates
* 'same Schema' to everyone else, so thus function implements
Modified: incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/Messages.properties
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/Messages.properties?rev=597906&r1=597905&r2=597906&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/Messages.properties (original)
+++ incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/Messages.properties Sat Nov 24 11:37:49 2007
@@ -21,4 +21,5 @@
NO_USABLE_BINDING=Service {0} has no SOAP or XML binding.
MULTIPLE_OUTPUTS=Operation {0} has more than one output part.
RPC= Service {0} calls for unsupported RPC binding style.
-XML_BINDING= Service {0} calls for unsupported XML binding.
\ No newline at end of file
+XML_BINDING= Service {0} calls for unsupported XML binding.
+MISSING_PART_ELEMENT= Part {0} lacks an element in the XML Schema.
\ No newline at end of file
Modified: incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java?rev=597906&r1=597905&r2=597906&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java (original)
+++ incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java Sat Nov 24 11:37:49 2007
@@ -193,7 +193,7 @@
if (inputMessage != null) {
parts = inputMessage.getMessageParts();
if (isWrapped) {
- wrapperClassName = setupWrapperElement(op, inputParameterNames, parts);
+ wrapperClassName = setupWrapperElement(inputParameterNames, parts);
}
buildParameterList(inputParameterNames, parameterList);
@@ -428,7 +428,7 @@
private void getElementsForParts(List<ElementAndNames> elements, List<MessagePartInfo> parts) {
for (MessagePartInfo mpi : parts) {
- XmlSchemaElement element;
+ XmlSchemaElement element = null;
if (mpi.isElement()) {
element = (XmlSchemaElement)mpi.getXmlSchema();
if (element == null) {
@@ -442,15 +442,8 @@
// other work to do.
LOG.severe("Missing element " + mpi.getElementQName().toString() + " in "
+ mpi.getName().toString());
- // there is still an element in there, but it's not a very
- // interesting element
- element = new XmlSchemaElement();
- XmlSchemaElement dummyElement = (XmlSchemaElement)mpi.getXmlSchema();
- element.setMaxOccurs(dummyElement.getMaxOccurs());
- element.setMinOccurs(dummyElement.getMinOccurs());
- element.setNillable(dummyElement.isNillable());
- element.setSchemaType(xmlSchemaCollection.getTypeByQName(mpi.getTypeQName()));
- element.setQName(mpi.getName());
+ unsupportedConstruct("MISSING_PART_ELEMENT", mpi.getName().toString());
+
}
assert element != null;
assert element.getQName() != null;
@@ -461,8 +454,7 @@
}
}
- private String setupWrapperElement(OperationInfo op, List<String> inputParameterNames,
- List<MessagePartInfo> parts) {
+ private String setupWrapperElement(List<String> inputParameterNames, List<MessagePartInfo> parts) {
String wrapperClassName;
// expect one input part.
assert parts.size() == 1;
@@ -471,7 +463,8 @@
assert wrapperPart.isElement();
wrapperElement = (XmlSchemaElement)wrapperPart.getXmlSchema();
XmlSchemaComplexType wrapperType = (XmlSchemaComplexType)XmlSchemaUtils
- .getElementType(xmlSchemaCollection, op.getName().getNamespaceURI(), wrapperElement, null);
+ .getElementType(xmlSchemaCollection,
+ currentOperation.getName().getNamespaceURI(), wrapperElement, null);
wrapperClassName = nameManager.getJavascriptName(wrapperType);
XmlSchemaSequence wrapperTypeSequence = XmlSchemaUtils.getSequence(wrapperType);
for (int i = 0; i < wrapperTypeSequence.getItems().getCount(); i++) {
@@ -482,7 +475,11 @@
}
XmlSchemaElement elChild = (XmlSchemaElement)thing;
- inputParameterNames.add(elChild.getName());
+ if (elChild.getRefName() != null) {
+ inputParameterNames.add(elChild.getRefName().getLocalPart());
+ } else {
+ inputParameterNames.add(elChild.getQName().getLocalPart());
+ }
}
return wrapperClassName;
}