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 2009/03/11 00:50:06 UTC
svn commit: r752307 - in /cxf/trunk:
api/src/main/java/org/apache/cxf/databinding/
common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/
rt/databinding/aegis/
rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/ rt/databindin...
Author: bimargulies
Date: Tue Mar 10 23:50:06 2009
New Revision: 752307
URL: http://svn.apache.org/viewvc?rev=752307&view=rev
Log:
On the one hand, more work toward schema validation with Aegis. On the other hand, turn it back off until I have a working
substrate to work from.
Added:
cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/ResolvingGrammarReaderController.java (with props)
Modified:
cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractDataBinding.java
cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/Stax2ValidationUtils.java
cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/W3CMultiSchemaFactory.java
cxf/trunk/rt/databinding/aegis/pom.xml
cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java
cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/invalidArrayMessage.xml
Modified: cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractDataBinding.java?rev=752307&r1=752306&r2=752307&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractDataBinding.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractDataBinding.java Tue Mar 10 23:50:06 2009
@@ -35,6 +35,7 @@
import org.w3c.dom.Node;
import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.common.xmlschema.SchemaCollection;
import org.apache.cxf.helpers.DOMUtils;
@@ -61,6 +62,9 @@
private boolean hackAroundEmptyNamespaceIssue;
protected Bus getBus() {
+ if (bus == null) {
+ return BusFactory.getDefaultBus();
+ }
return bus;
}
Added: cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/ResolvingGrammarReaderController.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/ResolvingGrammarReaderController.java?rev=752307&view=auto
==============================================================================
--- cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/ResolvingGrammarReaderController.java (added)
+++ cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/ResolvingGrammarReaderController.java Tue Mar 10 23:50:06 2009
@@ -0,0 +1,67 @@
+/**
+ * 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.wstx_msv_validation;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+
+import com.sun.msv.reader.GrammarReaderController;
+
+import org.apache.cxf.common.logging.LogUtils;
+
+/**
+ * Catch error messages and resolve schema locations.
+ */
+public class ResolvingGrammarReaderController implements GrammarReaderController {
+ private static final Logger LOG = LogUtils.getL7dLogger(ResolvingGrammarReaderController.class);
+
+ private Map<String, InputSource> sources;
+
+ public ResolvingGrammarReaderController(Map<String, InputSource> sources) {
+ this.sources = sources;
+ }
+
+ public void error(Locator[] locs, String msg, Exception nestedException) {
+ /* perhaps throw ? */
+ LOG.log(Level.SEVERE, msg, nestedException);
+ for (Locator loc : locs) {
+ LOG.severe("in " + loc.getSystemId() + " " + loc.getLineNumber() + ":" + loc.getColumnNumber());
+ }
+ }
+
+ public void warning(Locator[] locs, String errorMessage) {
+ LOG.log(Level.WARNING, errorMessage);
+ for (Locator loc : locs) {
+ LOG.warning("in " + loc.getSystemId() + " " + loc.getLineNumber() + ":" + loc.getColumnNumber());
+ }
+
+ }
+
+ public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
+ // CXF never trucks with publicId's.
+ return sources.get(systemId);
+ }
+}
Propchange: cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/ResolvingGrammarReaderController.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/ResolvingGrammarReaderController.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/Stax2ValidationUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/Stax2ValidationUtils.java?rev=752307&r1=752306&r2=752307&view=diff
==============================================================================
--- cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/Stax2ValidationUtils.java (original)
+++ cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/Stax2ValidationUtils.java Tue Mar 10 23:50:06 2009
@@ -22,8 +22,9 @@
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.logging.Logger;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
@@ -35,10 +36,13 @@
import org.xml.sax.InputSource;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.staxutils.DepthXMLStreamReader;
import org.apache.ws.commons.schema.XmlSchema;
import org.apache.ws.commons.schema.XmlSchemaCollection;
import org.apache.ws.commons.schema.XmlSchemaSerializer;
import org.apache.ws.commons.schema.XmlSchemaSerializer.XmlSchemaSerializerException;
+import org.apache.ws.commons.schema.utils.NamespaceMap;
import org.codehaus.stax2.XMLStreamReader2;
import org.codehaus.stax2.validation.XMLValidationSchema;
@@ -47,11 +51,21 @@
* fallback.
*/
class Stax2ValidationUtils {
+ private static final Logger LOG = LogUtils.getL7dLogger(Stax2ValidationUtils.class);
+
+ public Stax2ValidationUtils() {
+ throw new RuntimeException("Not ready");
+ }
/** {@inheritDoc}
* @throws XMLStreamException */
public void setupValidation(XMLStreamReader reader,
XmlSchemaCollection schemas) throws XMLStreamException {
+ // Gosh, this is bad, but I don't know a better solution, unless we're willing
+ // to require the stax2 API no matter what.
+ if (reader instanceof DepthXMLStreamReader) {
+ reader = ((DepthXMLStreamReader)reader).getReader();
+ }
XMLStreamReader2 reader2 = (XMLStreamReader2)reader;
XMLValidationSchema vs = getValidator(schemas);
reader2.validateAgainst(vs);
@@ -77,9 +91,16 @@
* @throws XMLStreamException
*/
private XMLValidationSchema getValidator(XmlSchemaCollection schemas) throws XMLStreamException {
- List<InputSource> sources = new ArrayList<InputSource>();
+ Map<String, InputSource> sources = new TreeMap<String, InputSource>();
XmlSchemaSerializer serializer = new XmlSchemaSerializer();
+ NamespaceMap namespaceContext = new NamespaceMap();
for (XmlSchema sch : schemas.getXmlSchemas()) {
+ String uri = sch.getTargetNamespace();
+ LOG.info(uri);
+
+ if (sch.getNamespaceContext() == null) {
+ sch.setNamespaceContext(namespaceContext);
+ }
Document[] serialized;
try {
serialized = serializer.serializeSchema(sch, false);
@@ -89,13 +110,17 @@
DOMSource domSource = new DOMSource(serialized[0]);
Reader schemaReader = getSchemaAsStream(domSource);
InputSource inputSource = new InputSource(schemaReader);
- inputSource.setSystemId(sch.getSourceURI());
- sources.add(inputSource);
+ String schemaSystemId = sch.getSourceURI();
+ if (null == schemaSystemId) {
+ schemaSystemId = sch.getTargetNamespace();
+ }
+ inputSource.setSystemId(schemaSystemId);
+ sources.put(schemaSystemId, inputSource);
}
W3CMultiSchemaFactory factory = new W3CMultiSchemaFactory();
XMLValidationSchema vs;
- vs = factory.loadSchemas(sources.toArray(new InputSource[sources.size()]));
+ vs = factory.loadSchemas(sources);
return vs;
}
Modified: cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/W3CMultiSchemaFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/W3CMultiSchemaFactory.java?rev=752307&r1=752306&r2=752307&view=diff
==============================================================================
--- cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/W3CMultiSchemaFactory.java (original)
+++ cxf/trunk/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/W3CMultiSchemaFactory.java Tue Mar 10 23:50:06 2009
@@ -23,11 +23,12 @@
package org.apache.cxf.wstx_msv_validation;
+import java.util.Map;
+
import javax.xml.parsers.SAXParserFactory;
import javax.xml.stream.XMLStreamException;
import org.xml.sax.InputSource;
-import org.xml.sax.Locator;
import com.ctc.wstx.msv.BaseSchemaFactory;
import com.ctc.wstx.msv.W3CSchema;
@@ -37,31 +38,6 @@
import org.codehaus.stax2.validation.XMLValidationSchema;
-final class MyGrammarController extends com.sun.msv.reader.util.IgnoreController {
- private String mErrorMsg;
-
- public MyGrammarController() {
- }
-
- // public void warning(Locator[] locs, String errorMessage) { }
-
- public void error(Locator[] locs, String msg, Exception nestedException) {
- if (getMErrorMsg() == null) {
- setMErrorMsg(msg);
- } else {
- setMErrorMsg(getMErrorMsg() + "; " + msg);
- }
- }
-
- public void setMErrorMsg(String mErrorMsg) {
- this.mErrorMsg = mErrorMsg;
- }
-
- public String getMErrorMsg() {
- return mErrorMsg;
- }
-}
-
/**
*
*/
@@ -70,23 +46,24 @@
private MultiSchemaReader multiSchemaReader;
private SAXParserFactory parserFactory;
private XMLSchemaReader xmlSchemaReader;
- private MyGrammarController ctrl = new MyGrammarController();
public W3CMultiSchemaFactory() {
- super(XMLValidationSchema.SCHEMA_ID_RELAXNG);
+ super(XMLValidationSchema.SCHEMA_ID_W3C_SCHEMA);
}
- public XMLValidationSchema loadSchemas(InputSource[] sources) throws XMLStreamException {
+ public XMLValidationSchema loadSchemas(Map<String, InputSource> sources) throws XMLStreamException {
parserFactory = getSaxFactory();
+
+ ResolvingGrammarReaderController ctrl = new ResolvingGrammarReaderController(sources);
xmlSchemaReader = new XMLSchemaReader(ctrl, parserFactory);
multiSchemaReader = new MultiSchemaReader(xmlSchemaReader);
- for (InputSource source : sources) {
+ for (InputSource source : sources.values()) {
multiSchemaReader.parse(source);
}
XMLSchemaGrammar grammar = multiSchemaReader.getResult();
if (grammar == null) {
- throw new XMLStreamException("Failed to load schemas: " + ctrl.getMErrorMsg());
+ throw new XMLStreamException("Failed to load schemas");
}
return new W3CSchema(grammar);
}
Modified: cxf/trunk/rt/databinding/aegis/pom.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/pom.xml?rev=752307&r1=752306&r2=752307&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/pom.xml (original)
+++ cxf/trunk/rt/databinding/aegis/pom.xml Tue Mar 10 23:50:06 2009
@@ -89,6 +89,12 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-wstx-msv-validation</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
</dependencies>
<build>
Modified: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java?rev=752307&r1=752306&r2=752307&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java (original)
+++ cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java Tue Mar 10 23:50:06 2009
@@ -106,6 +106,9 @@
extension.registerConduitInitiator(SoapBindingConstants.SOAP11_BINDING_ID, localTransport);
bus.setExtension(new WSDLManagerImpl(), WSDLManager.class);
+ //WoodstoxValidationImpl wstxVal = new WoodstoxValidationImpl();
+
+
addNamespace("wsdl", SOAPConstants.WSDL11_NS);
addNamespace("wsdlsoap", SOAPConstants.WSDL11_SOAP_NS);
@@ -210,6 +213,8 @@
context.setEnableJDOMMappings(true);
}
binding = new AegisDatabinding();
+ // perhaps the data binding needs to do this for itself?
+ binding.setBus(BusFactory.getDefaultBus());
if (enableJDOM) { // this preserves pre-2.1 behavior.
binding.setAegisContext(context);
}
Modified: cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/invalidArrayMessage.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/invalidArrayMessage.xml?rev=752307&r1=752306&r2=752307&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/invalidArrayMessage.xml (original)
+++ cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/invalidArrayMessage.xml Tue Mar 10 23:50:06 2009
@@ -21,7 +21,6 @@
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<soap-env:Body xmlns:jns0='urn:Array' >
<jns0:submitW3CArray>
- <jns0:whoops/>
<jns0:before>before items</jns0:before>
<jns0:anything>
<jns0:anyType><walrus xmlns='uri:iam'>tusks</walrus></jns0:anyType>