Author: dkulp
Date: Mon Sep 17 14:49:57 2007
New Revision: 576598
URL: http://svn.apache.org/viewvc?rev=576598&view=rev
Log:
[CXF-896] Patch from Zarar Siddigi applied.
Added:
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/ElementDataWriter.java
(with props)
Modified:
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java
Modified:
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java?rev=576598&r1=576597&r2=576598&view=diff
==============================================================================
---
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java
(original)
+++
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java
Mon Sep 17 14:49:57 2007
@@ -31,6 +31,8 @@
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
+import org.w3c.dom.Node;
+
import org.apache.cxf.aegis.DatabindingException;
import org.apache.cxf.aegis.type.DefaultTypeMappingRegistry;
import org.apache.cxf.aegis.type.Type;
@@ -106,6 +108,8 @@
public <T> DataWriter<T> createWriter(Class<T> cls) {
if (cls.equals(XMLStreamWriter.class)) {
return (DataWriter<T>)new XMLStreamDataWriter(this);
+ } else if (cls.equals(Node.class)) {
+ return (DataWriter<T>) new ElementDataWriter(this);
} else {
throw new UnsupportedOperationException();
}
Added:
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/ElementDataWriter.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/ElementDataWriter.java?rev=576598&view=auto
==============================================================================
---
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/ElementDataWriter.java
(added)
+++
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/ElementDataWriter.java
Mon Sep 17 14:49:57 2007
@@ -0,0 +1,131 @@
+/**
+ * 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.databinding;
+
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Logger;
+
+import javax.xml.validation.Schema;
+
+import org.w3c.dom.Element;
+
+import org.apache.cxf.aegis.Context;
+import org.apache.cxf.aegis.DatabindingException;
+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;
+import org.apache.cxf.databinding.DataWriter;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.Attachment;
+import org.apache.cxf.service.model.MessagePartInfo;
+import org.apache.cxf.staxutils.W3CDOMStreamWriter;
+
+public class ElementDataWriter implements DataWriter<Element> {
+
+ private static final Logger LOG =
LogUtils.getL7dLogger(XMLStreamDataReader.class);
+
+ private AegisDatabinding databinding;
+
+ private Collection<Attachment> attachments;
+
+ private Map<String, Object> properties;
+
+ public ElementDataWriter(AegisDatabinding databinding) {
+ this.databinding = databinding;
+ }
+
+ public void setAttachments(Collection<Attachment> attachments) {
+ this.attachments = attachments;
+ }
+
+ public void setSchema(Schema s) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void write(Object obj, MessagePartInfo part, Element output) {
+ Type type = databinding.getType(part);
+
+ if (type == null) {
+ throw new Fault(new Message("NO_MESSAGE_FOR_PART", LOG));
+ }
+
+
+ Map<String, Object> props = (Endpoint)getProperty(ENDPOINT);
+ if (props == null) {
+ props = new HashMap<String, Object>();
+ }
+ Context context = new Context(props);
+
+ // I'm not sure that this is the right type mapping
+ context.setTypeMapping(type.getTypeMapping());
+
context.setOverrideTypes(CastUtils.cast(databinding.getOverrideTypes(),
String.class));
+ context.setAttachments(attachments);
+ Object val =
databinding.getService().get(AegisDatabinding.WRITE_XSI_TYPE_KEY);
+ if ("true".equals(val) || Boolean.TRUE.equals(val)) {
+ context.setWriteXsiTypes(true);
+ }
+
+ type = TypeUtil.getWriteType(context, obj, type);
+ try {
+ W3CDOMStreamWriter domWriter = new W3CDOMStreamWriter(output);
+ ElementWriter writer = new ElementWriter(domWriter);
+ MessageWriter w2 = writer.getElementWriter(part.getConcreteName());
+ if (type.isNillable() && type.isWriteOuter() && obj == null) {
+ w2.writeXsiNil();
+ return;
+ }
+
+ type.writeObject(obj, w2, context);
+ w2.close();
+ } catch (DatabindingException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void write(Object obj, Element output) {
+ write(obj, null, output);
+ }
+
+
+ public void setProperty(String prop, Object value) {
+ if (properties == null) {
+ properties = new HashMap<String, Object>();
+ }
+
+ properties.put(prop, value);
+ }
+
+ public Object getProperty(String key) {
+ if (properties == null) {
+ return null;
+ }
+ return properties.get(key);
+ }
+
+
+}
Propchange:
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/ElementDataWriter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/ElementDataWriter.java
------------------------------------------------------------------------------
svn:keywords = Rev Date