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 2008/01/02 02:21:23 UTC
svn commit: r607956 - in /incubator/cxf/trunk/rt/databinding/aegis/src:
main/java/org/apache/cxf/aegis/ main/java/org/apache/cxf/aegis/type/
test/java/org/apache/cxf/aegis/standalone/
Author: bimargulies
Date: Tue Jan 1 17:21:17 2008
New Revision: 607956
URL: http://svn.apache.org/viewvc?rev=607956&view=rev
Log:
Start to sketch in the write side. More to the point, get rid of the silly exercise in overparameterization in the AegisContext.
Added:
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AbstractAegisIoImpl.java
- copied, changed from r607763, incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AbstractAegisDataReaderImpl.java
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisIo.java
- copied, changed from r607763, incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisDataReader.java
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisReader.java (with props)
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisWriter.java (with props)
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataWriter.java (with props)
Removed:
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AbstractAegisDataReaderImpl.java
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisDataReader.java
Modified:
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisContext.java
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisElementDataReader.java
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataReader.java
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/TypeUtil.java
incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/standalone/StandaloneReadTest.java
Copied: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AbstractAegisIoImpl.java (from r607763, incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AbstractAegisDataReaderImpl.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AbstractAegisIoImpl.java?p2=incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AbstractAegisIoImpl.java&p1=incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AbstractAegisDataReaderImpl.java&r1=607763&r2=607956&rev=607956&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AbstractAegisDataReaderImpl.java (original)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AbstractAegisIoImpl.java Tue Jan 1 17:21:17 2008
@@ -29,15 +29,15 @@
import org.apache.cxf.interceptor.Fault;
/**
- * Common implementation of the Aegis data readers.
+ * Common implementation of the Aegis data readers and writer.
*/
-public abstract class AbstractAegisDataReaderImpl implements AegisDataReader {
+public abstract class AbstractAegisIoImpl {
protected Map<String, Object> properties;
protected Schema schema;
protected AegisContext aegisContext;
protected Context context;
- protected AbstractAegisDataReaderImpl(AegisContext globalContext) {
+ protected AbstractAegisIoImpl(AegisContext globalContext) {
aegisContext = globalContext;
context = new Context(globalContext);
properties = new HashMap<String, Object>();
@@ -49,7 +49,7 @@
* @param globalContext
* @param context
*/
- protected AbstractAegisDataReaderImpl(AegisContext globalContext, Context context) {
+ protected AbstractAegisIoImpl(AegisContext globalContext, Context context) {
aegisContext = globalContext;
this.context = context;
properties = new HashMap<String, Object>();
Modified: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisContext.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisContext.java?rev=607956&r1=607955&r2=607956&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisContext.java (original)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisContext.java Tue Jan 1 17:21:17 2008
@@ -110,14 +110,14 @@
}
- public <Reader extends AbstractAegisDataReaderImpl, Source>
- Reader createReader(Class<Reader> readerClass, Class<Source> sourceClass) {
- if (sourceClass == org.w3c.dom.Element.class) {
- return readerClass.cast(new AegisElementDataReader(this));
- } else if (sourceClass == XMLStreamReader.class) {
- return readerClass.cast(new AegisXMLStreamDataReader(this));
- }
- return null; // throw?
+ public AegisReader<org.w3c.dom.Element>
+ createDomElementReader() {
+ return new AegisElementDataReader(this);
+ }
+
+ public AegisReader<XMLStreamReader>
+ createXMLStreamReader() {
+ return new AegisXMLStreamDataReader(this);
}
/**
Modified: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisElementDataReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisElementDataReader.java?rev=607956&r1=607955&r2=607956&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisElementDataReader.java (original)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisElementDataReader.java Tue Jan 1 17:21:17 2008
@@ -24,8 +24,8 @@
import org.apache.cxf.aegis.type.Type;
import org.apache.cxf.staxutils.W3CDOMStreamReader;
-public class AegisElementDataReader extends AbstractAegisDataReaderImpl {
-
+public class AegisElementDataReader extends AbstractAegisIoImpl
+ implements AegisReader<Element> {
protected AegisXMLStreamDataReader reader;
public AegisElementDataReader(AegisContext globalContext) {
Copied: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisIo.java (from r607763, incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisDataReader.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisIo.java?p2=incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisIo.java&p1=incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisDataReader.java&r1=607763&r2=607956&rev=607956&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisDataReader.java (original)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisIo.java Tue Jan 1 17:21:17 2008
@@ -29,7 +29,7 @@
* the type of the source object, the read method is not specified here in the interface, but is provided
* in the specific type.
*/
-public interface AegisDataReader {
+public interface AegisIo {
/**
* Supply a schema to validate the input. Bindings silently ignore this parameter if they
* do not support schema validation, or the particular form of validation implied by
Added: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisReader.java?rev=607956&view=auto
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisReader.java (added)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisReader.java Tue Jan 1 17:21:17 2008
@@ -0,0 +1,45 @@
+/**
+ * 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.aegis;
+
+import org.apache.cxf.aegis.type.Type;
+
+/**
+ * Interface for Aegis readers.
+ * @param <ReaderT>
+ */
+public interface AegisReader<ReaderT> extends AegisIo {
+
+ /**
+ * Read an object.
+ * @param reader the source.
+ * @return
+ * @throws Exception
+ */
+ Object read(ReaderT reader) throws Exception;
+ /**
+ * Read an object expecting a particular input type.
+ * @param reader the source.
+ * @param desiredType the expected input type.
+ * @return
+ * @throws Exception
+ */
+ Object read(ReaderT reader, Type desiredType) throws Exception;
+
+}
Propchange: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisReader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisReader.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisWriter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisWriter.java?rev=607956&view=auto
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisWriter.java (added)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisWriter.java Tue Jan 1 17:21:17 2008
@@ -0,0 +1,45 @@
+/**
+ * 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.aegis;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.aegis.type.Type;
+
+/**
+ * Interface for Aegis writers.
+ * @param <SinkT>
+ */
+public interface AegisWriter<SinkT> extends AegisIo {
+ /**
+ * Write an object to the sink.
+ * @param obj The object.
+ * @param elementName The element QName.
+ * @param optional true to omit for null. (minOccurs=0)
+ * @param output The output sink.
+ * @param aegisType The aegis type to use. Null is allowed, but only if
+ * obj is not null.
+ * @throws Exception
+ */
+ void write(Object obj,
+ QName elementName,
+ boolean optional,
+ SinkT output,
+ Type aegisType) throws Exception;
+}
Propchange: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisWriter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisWriter.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataReader.java?rev=607956&r1=607955&r2=607956&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataReader.java (original)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataReader.java Tue Jan 1 17:21:17 2008
@@ -28,7 +28,7 @@
import org.apache.cxf.common.i18n.Message;
import org.apache.cxf.common.logging.LogUtils;
-public class AegisXMLStreamDataReader extends AbstractAegisDataReaderImpl {
+public class AegisXMLStreamDataReader extends AbstractAegisIoImpl implements AegisReader<XMLStreamReader> {
private static final Logger LOG = LogUtils.getL7dLogger(AegisXMLStreamDataReader.class);
@@ -58,10 +58,12 @@
}
}
+ /** {@inheritDoc}*/
public Object read(XMLStreamReader reader) throws Exception {
return read(reader, null);
}
+ /** {@inheritDoc}*/
public Object read(XMLStreamReader reader, Type desiredType) throws Exception {
setupReaderPosition(reader);
ElementReader elReader = new ElementReader(reader);
Added: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataWriter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataWriter.java?rev=607956&view=auto
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataWriter.java (added)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataWriter.java Tue Jan 1 17:21:17 2008
@@ -0,0 +1,83 @@
+/**
+ * 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.aegis;
+
+import java.util.logging.Logger;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.cxf.aegis.type.Type;
+import org.apache.cxf.aegis.type.TypeUtil;
+import org.apache.cxf.aegis.xml.MessageWriter;
+import org.apache.cxf.aegis.xml.stax.ElementWriter;
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.logging.LogUtils;
+
+public class AegisXMLStreamDataWriter extends AbstractAegisIoImpl implements AegisWriter<XMLStreamWriter> {
+
+ private static final Logger LOG = LogUtils.getL7dLogger(AegisXMLStreamDataWriter.class);
+
+ AegisXMLStreamDataWriter(AegisContext globalContext) {
+ super(globalContext);
+ }
+
+ /**
+ * Write an object to the output.
+ * @param obj The object to write.
+ * @param elementName the QName of the XML Element.
+ * @param optional set this for minOccurs = 0. It omits null elements.
+ * @param output the output stream
+ * @param aegisType the aegis type.
+ * @throws Exception
+ */
+ public void write(Object obj,
+ QName elementName,
+ boolean optional,
+ XMLStreamWriter output,
+ Type aegisType) throws Exception {
+
+ if (obj == null && aegisType == null && !optional) {
+ Message message = new Message("WRITE_NEEDS_TYPE", LOG);
+ throw new DatabindingException(message);
+ }
+
+ if (obj != null) {
+ aegisType = TypeUtil.getWriteType(aegisContext, obj, aegisType);
+ }
+
+ if (obj == null) {
+ if (optional) { // minOccurs = 0
+ return;
+ }
+ if (aegisType.isNillable() && aegisType.isWriteOuter()) {
+ ElementWriter writer = new ElementWriter(output);
+ MessageWriter w2 = writer.getElementWriter(elementName);
+ w2.writeXsiNil();
+ w2.close();
+ return;
+ }
+ }
+
+ ElementWriter writer = new ElementWriter(output);
+ MessageWriter w2 = writer.getElementWriter(elementName);
+ aegisType.writeObject(obj, w2, context);
+ w2.close();
+ }
+}
Propchange: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataWriter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataWriter.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/TypeUtil.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/TypeUtil.java?rev=607956&r1=607955&r2=607956&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/TypeUtil.java (original)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/TypeUtil.java Tue Jan 1 17:21:17 2008
@@ -140,4 +140,17 @@
return type;
}
+ public static Type getWriteTypeStandalone(AegisContext globalContext, Object value, Type type) {
+ if (type != null) {
+ return getWriteType(globalContext, value, type);
+ }
+
+ TypeMapping tm;
+ tm = globalContext.getTypeMapping();
+ // don't use this for null!
+ type = tm.getType(value.getClass());
+
+ return type;
+ }
+
}
Modified: incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/standalone/StandaloneReadTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/standalone/StandaloneReadTest.java?rev=607956&r1=607955&r2=607956&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/standalone/StandaloneReadTest.java (original)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/standalone/StandaloneReadTest.java Tue Jan 1 17:21:17 2008
@@ -25,7 +25,7 @@
import javax.xml.stream.XMLStreamReader;
import org.apache.cxf.aegis.AegisContext;
-import org.apache.cxf.aegis.AegisXMLStreamDataReader;
+import org.apache.cxf.aegis.AegisReader;
import org.apache.cxf.aegis.services.SimpleBean;
import org.apache.cxf.test.TestUtilities;
import org.junit.Before;
@@ -50,8 +50,7 @@
context = new AegisContext();
context.initialize();
XMLStreamReader streamReader = testUtilities.getResourceAsXMLStreamReader("stringElement.xml");
- AegisXMLStreamDataReader reader =
- context.createReader(AegisXMLStreamDataReader.class, XMLStreamReader.class);
+ AegisReader<XMLStreamReader> reader = context.createXMLStreamReader();
Object something = reader.read(streamReader);
assertTrue("ball-of-yarn".equals(something));
}
@@ -66,8 +65,7 @@
context.initialize();
XMLStreamReader streamReader =
testUtilities.getResourceAsXMLStreamReader("simpleBean1.xml");
- AegisXMLStreamDataReader reader =
- context.createReader(AegisXMLStreamDataReader.class, XMLStreamReader.class);
+ AegisReader<XMLStreamReader> reader = context.createXMLStreamReader();
Object something = reader.read(streamReader);
assertTrue(something instanceof SimpleBean);
SimpleBean simpleBean = (SimpleBean) something;