Author: dkulp
Date: Fri Oct 2 01:57:04 2009
New Revision: 820865
URL: http://svn.apache.org/viewvc?rev=820865&view=rev
Log:
[CXF-2455] Add some flags/properties to turn off the JAXB
ValidationEventHandler
Modified:
cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageUtils.java
cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataReaderImpl.java
Modified: cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageUtils.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageUtils.java?rev=820865&r1=820864&r2=820865&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageUtils.java
(original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageUtils.java Fri
Oct 2 01:57:04 2009
@@ -117,6 +117,15 @@
return false;
}
+
+ public static boolean getContextualBoolean(Message m, String key, boolean
defaultValue) {
+ Object o = m.getContextualProperty(key);
+ if (o != null) {
+ return isTrue(o);
+ }
+ return defaultValue;
+ }
+
/**
* Returns true if the underlying content format is a W3C DOM or a SAAJ
message.
*/
Modified:
cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java?rev=820865&r1=820864&r2=820865&view=diff
==============================================================================
---
cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
(original)
+++
cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
Fri Oct 2 01:57:04 2009
@@ -36,6 +36,7 @@
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageUtils;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.service.Service;
import org.apache.cxf.service.model.BindingMessageInfo;
@@ -88,6 +89,7 @@
}
dataReader.setAttachments(message.getAttachments());
dataReader.setProperty(DataReader.ENDPOINT,
message.getExchange().get(Endpoint.class));
+ dataReader.setProperty(Message.class.getName(), message);
setSchemaInMessage(service, message, dataReader);
return dataReader;
}
@@ -101,8 +103,7 @@
}
private void setSchemaInMessage(Service service, Message message,
DataReader<?> reader) {
- Object en =
message.getContextualProperty(Message.SCHEMA_VALIDATION_ENABLED);
- if (Boolean.TRUE.equals(en) || "true".equals(en)) {
+ if (MessageUtils.getContextualBoolean(message,
Message.SCHEMA_VALIDATION_ENABLED, Boolean.FALSE)) {
//all serviceInfos have the same schemas
Schema schema =
EndpointReferenceUtils.getSchema(service.getServiceInfos().get(0));
reader.setSchema(schema);
Modified:
cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataReaderImpl.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataReaderImpl.java?rev=820865&r1=820864&r2=820865&view=diff
==============================================================================
---
cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataReaderImpl.java
(original)
+++
cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataReaderImpl.java
Fri Oct 2 01:57:04 2009
@@ -27,6 +27,7 @@
import javax.xml.bind.JAXBException;
import javax.xml.bind.PropertyException;
import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.ValidationEventHandler;
import javax.xml.namespace.QName;
import org.apache.cxf.common.i18n.Message;
@@ -36,12 +37,15 @@
import org.apache.cxf.jaxb.JAXBDataBase;
import org.apache.cxf.jaxb.JAXBDataBinding;
import org.apache.cxf.jaxb.JAXBEncoderDecoder;
+import org.apache.cxf.message.MessageUtils;
import org.apache.cxf.service.model.MessagePartInfo;
public class DataReaderImpl<T> extends JAXBDataBase implements DataReader<T> {
private static final Logger LOG =
LogUtils.getLogger(JAXBDataBinding.class);
JAXBDataBinding databinding;
boolean unwrapJAXBElement = true;
+ ValidationEventHandler veventHandler;
+ boolean setEventHandler = true;
public DataReaderImpl(JAXBDataBinding binding, boolean unwrap) {
super(binding.getContext());
@@ -55,6 +59,13 @@
public void setProperty(String prop, Object value) {
if (prop.equals(JAXBDataBinding.UNWRAP_JAXB_ELEMENT)) {
unwrapJAXBElement = Boolean.TRUE.equals(value);
+ } else if
(prop.equals(org.apache.cxf.message.Message.class.getName())) {
+ org.apache.cxf.message.Message m =
(org.apache.cxf.message.Message)value;
+ veventHandler =
(ValidationEventHandler)m.getContextualProperty("jaxb-validation-event-handler");
+ if (veventHandler == null) {
+ veventHandler = databinding.getValidationEventHandler();
+ }
+ setEventHandler = MessageUtils.getContextualBoolean(m,
"set-jaxb-validation-event-handler", true);
}
}
private Unmarshaller createUnmarshaller() {
@@ -64,10 +75,8 @@
if (databinding.getUnmarshallerListener() != null) {
um.setListener(databinding.getUnmarshallerListener());
}
- if (databinding.getValidationEventHandler() != null) {
- um.setEventHandler(databinding.getValidationEventHandler());
- } else {
- um.setEventHandler(null);
+ if (setEventHandler) {
+ um.setEventHandler(veventHandler);
}
if (databinding.getUnmarshallerProperties() != null) {
for (Map.Entry<String, Object> propEntry