Author: ffang
Date: Tue Apr 2 05:08:19 2013
New Revision: 1463385
URL: http://svn.apache.org/r1463385
Log:
Merged revisions 1463382 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1463382 | ffang | 2013-04-02 13:01:49 +0800 (二, 02 4 2013) | 1 line
[CXF-4936]Expose FastInfoset serializer tuning properties
........
Modified:
cxf/branches/2.7.x-fixes/ (props changed)
cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/annotations/FastInfoset.java
cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java
cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java
cxf/branches/2.7.x-fixes/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
Merged /cxf/trunk:r1463382
Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified:
cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/annotations/FastInfoset.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/annotations/FastInfoset.java?rev=1463385&r1=1463384&r2=1463385&view=diff
==============================================================================
---
cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/annotations/FastInfoset.java
(original)
+++
cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/annotations/FastInfoset.java
Tue Apr 2 05:08:19 2013
@@ -32,6 +32,51 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE })
public @interface FastInfoset {
+ /**
+ * Set to true in order for FastInfoset to be always used without
negotiation
+ */
boolean force() default false;
+
+ /**
+ * Sets the property <code>attributeValueMapMemoryLimit</code> on
FastInfoset StAX Serializers. The property
+ * controls attribute value map size and can be used to control the memory
and (indirectly) CPU footprint of
+ * processing.
+ */
+ int serializerAttributeValueMapMemoryLimit() default -1;
+
+ /**
+ * Sets the property <code>minAttributeValueSize</code> on FastInfoset
StAX Serializers. The property controls the
+ * <b>minimum</b> size of attribute values to be indexed.
+ */
+ int serializerMinAttributeValueSize() default -1;
+
+ /**
+ * Sets the property <code>maxAttributeValueSize</code> on FastInfoset
StAX Serializers. The property controls the
+ * <b>maximum</b> size of attribute values to be indexed. Tests have shown
that setting this property to lower
+ * values reduces CPU burden of processing, at the expense of larger sizes
of resultant encoded Fast Infoset data.
+ */
+ int serializerMaxAttributeValueSize() default -1;
+
+ /**
+ * Sets the property <code>characterContentChunkMapMemoryLimit</code> on
FastInfoset StAX Serializers. The property
+ * controls character content chunk map size and can be used to control
the memory and (indirectly) CPU footprint of
+ * processing.
+ */
+ int serializerCharacterContentChunkMapMemoryLimit() default -1;
+
+ /**
+ * Sets the property <code>minCharacterContentChunkSize</code> on
FastInfoset StAX Serializers. The property
+ * controls the <b>minimum</b> size of character content chunks to be
indexed.
+ */
+ int serializerMinCharacterContentChunkSize() default -1;
+
+ /**
+ * Sets the property <code>maxCharacterContentChunkSize</code> on
FastInfoset StAX Serializers. The property
+ * controls the <b>maximum</b> size of character content chunks to be
indexed. Tests have shown that setting this
+ * property to lower values reduces CPU burden of processing, at the
expense of larger sizes of resultant encoded
+ * Fast Infoset data.
+ */
+ int serializerMaxCharacterContentChunkSize() default -1;
+
}
Modified:
cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java?rev=1463385&r1=1463384&r2=1463385&view=diff
==============================================================================
---
cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java
(original)
+++
cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java
Tue Apr 2 05:08:19 2013
@@ -38,9 +38,15 @@ import org.apache.cxf.interceptor.Interc
*/
@NoJSR250Annotations
public class FastInfosetFeature extends AbstractFeature {
-
+
boolean force;
-
+ private Integer serializerAttributeValueMapMemoryLimit;
+ private Integer serializerMinAttributeValueSize;
+ private Integer serializerMaxAttributeValueSize;
+ private Integer serializerCharacterContentChunkMapMemoryLimit;
+ private Integer serializerMinCharacterContentChunkSize;
+ private Integer serializerMaxCharacterContentChunkSize;
+
public FastInfosetFeature() {
//
}
@@ -50,7 +56,29 @@ public class FastInfosetFeature extends
protected void initializeProvider(InterceptorProvider provider, Bus bus) {
FIStaxInInterceptor in = new FIStaxInInterceptor();
+
FIStaxOutInterceptor out = new FIStaxOutInterceptor(force);
+ if (serializerAttributeValueMapMemoryLimit != null &&
serializerAttributeValueMapMemoryLimit.intValue() > 0) {
+
out.setSerializerAttributeValueMapMemoryLimit(serializerAttributeValueMapMemoryLimit.intValue());
+ }
+ if (serializerMinAttributeValueSize != null &&
serializerMinAttributeValueSize.intValue() > 0) {
+
out.setSerializerMinAttributeValueSize(serializerMinAttributeValueSize.intValue());
+ }
+ if (serializerMaxAttributeValueSize != null &&
serializerMaxAttributeValueSize.intValue() > 0) {
+
out.setSerializerMaxAttributeValueSize(serializerMaxAttributeValueSize.intValue());
+ }
+ if (serializerCharacterContentChunkMapMemoryLimit != null
+ && serializerCharacterContentChunkMapMemoryLimit.intValue() >
0) {
+ out.setSerializerCharacterContentChunkMapMemoryLimit(
+ serializerCharacterContentChunkMapMemoryLimit.intValue());
+ }
+ if (serializerMinCharacterContentChunkSize != null &&
serializerMinCharacterContentChunkSize.intValue() > 0) {
+
out.setSerializerMinCharacterContentChunkSize(serializerMinCharacterContentChunkSize.intValue());
+ }
+ if (serializerMaxCharacterContentChunkSize != null &&
serializerMaxCharacterContentChunkSize.intValue() > 0) {
+
out.setSerializerMaxCharacterContentChunkSize(serializerMaxCharacterContentChunkSize.intValue());
+ }
+
provider.getInInterceptors().add(in);
provider.getInFaultInterceptors().add(in);
provider.getOutInterceptors().add(out);
Modified:
cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java?rev=1463385&r1=1463384&r2=1463385&view=diff
==============================================================================
---
cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java
(original)
+++
cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java
Tue Apr 2 05:08:19 2013
@@ -24,12 +24,15 @@ import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import com.sun.xml.fastinfoset.stax.StAXDocumentSerializer;
+import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageUtils;
@@ -42,11 +45,19 @@ import org.apache.cxf.phase.Phase;
*/
public class FIStaxOutInterceptor extends AbstractPhaseInterceptor<Message> {
public static final String FI_ENABLED =
"org.apache.cxf.fastinfoset.enabled";
+
+ private static final Logger LOG =
LogUtils.getL7dLogger(FIStaxOutInterceptor.class);
private static final String OUTPUT_STREAM_HOLDER =
FIStaxOutInterceptor.class.getName() + ".outputstream";
private static final StaxOutEndingInterceptor ENDING = new
StaxOutEndingInterceptor(OUTPUT_STREAM_HOLDER);
boolean force;
-
+ private Integer serializerAttributeValueMapMemoryLimit;
+ private Integer serializerMinAttributeValueSize;
+ private Integer serializerMaxAttributeValueSize;
+ private Integer serializerCharacterContentChunkMapMemoryLimit;
+ private Integer serializerMinCharacterContentChunkSize;
+ private Integer serializerMaxCharacterContentChunkSize;
+
public FIStaxOutInterceptor() {
super(Phase.PRE_STREAM);
addAfter(AttachmentOutInterceptor.class.getName());
@@ -138,8 +149,140 @@ public class FIStaxOutInterceptor extend
}
return serializer;
*/
- return new StAXDocumentSerializer(out);
+ final StAXDocumentSerializer stAXDocumentSerializer = new
StAXDocumentSerializer(out);
+ if (serializerAttributeValueMapMemoryLimit != null &&
serializerAttributeValueMapMemoryLimit.intValue() > 0) {
+
stAXDocumentSerializer.setAttributeValueMapMemoryLimit(serializerAttributeValueMapMemoryLimit.intValue());
+ }
+ if (serializerMinAttributeValueSize != null &&
serializerMinAttributeValueSize.intValue() > 0) {
+
stAXDocumentSerializer.setMinAttributeValueSize(serializerMinAttributeValueSize.intValue());
+ }
+ if (serializerMaxAttributeValueSize != null &&
serializerMaxAttributeValueSize.intValue() > 0) {
+
stAXDocumentSerializer.setMaxAttributeValueSize(serializerMaxAttributeValueSize.intValue());
+ }
+ if (serializerCharacterContentChunkMapMemoryLimit != null
+ && serializerCharacterContentChunkMapMemoryLimit.intValue() >
0) {
+ stAXDocumentSerializer
+
.setCharacterContentChunkMapMemoryLimit(serializerCharacterContentChunkMapMemoryLimit.intValue());
+ }
+ if (serializerMinCharacterContentChunkSize != null &&
serializerMinCharacterContentChunkSize.intValue() > 0) {
+
stAXDocumentSerializer.setMinCharacterContentChunkSize(serializerMinCharacterContentChunkSize.intValue());
+ }
+ if (serializerMaxCharacterContentChunkSize != null &&
serializerMaxCharacterContentChunkSize.intValue() > 0) {
+
stAXDocumentSerializer.setMaxCharacterContentChunkSize(serializerMaxCharacterContentChunkSize.intValue());
+ }
+ return stAXDocumentSerializer;
+ }
+
+ public Integer getSerializerMinAttributeValueSize() {
+ return serializerMinAttributeValueSize;
+ }
+
+ /**
+ * Sets the property <code>minAttributeValueSize</code> on FastInfoset
StAX Serializers created and used
+ * by this interceptor. The property controls the <b>minimum</b> size of
attribute values to be indexed.
+ *
+ * @param serializerMinAttributeValueSize
+ * The <b>minimum</b> size for attribute values to be indexed,
+ * measured as a number of characters. The default is typically 0.
+ */
+ public void setSerializerMinAttributeValueSize(Integer
serializerMinAttributeValueSize) {
+ logSetter("serializerMinAttributeValueSize",
serializerMinAttributeValueSize);
+ this.serializerMinAttributeValueSize = serializerMinAttributeValueSize;
+ }
+
+ public Integer getSerializerMaxAttributeValueSize() {
+ return serializerMaxAttributeValueSize;
+ }
+
+ /**
+ * Sets the property <code>maxAttributeValueSize</code> on FastInfoset
StAX Serializers created and used
+ * by this interceptor. The property controls the <b>maximum</b> size of
attribute values to be indexed.
+ * Tests have shown that setting this property to lower values reduces CPU
burden of processing, at the expense
+ * of larger sizes of resultant encoded Fast Infoset data.
+ *
+ * @param serializerMaxAttributeValueSize
+ * The <b>maximum</b> size for attribute values to be indexed,
+ * measured as a number of characters. The default is typically 32.
+ */
+ public void setSerializerMaxAttributeValueSize(Integer
serializerMaxAttributeValueSize) {
+ logSetter("serializerMaxAttributeValueSize",
serializerMaxAttributeValueSize);
+ this.serializerMaxAttributeValueSize = serializerMaxAttributeValueSize;
}
-
+ public Integer getSerializerCharacterContentChunkMapMemoryLimit() {
+ return serializerCharacterContentChunkMapMemoryLimit;
+ }
+
+ /**
+ * Sets the property <code>characterContentChunkMapMemoryLimit</code> on
FastInfoset StAX Serializers created and
+ * used by this interceptor. The property controls character content chunk
map size and can be used to control the
+ * memory and (indirectly) CPU footprint of processing.
+ *
+ * @param serializerCharacterContentChunkMapMemoryLimit
+ * The value for the limit, measured as a number of Unicode
characters.
+ */
+ public void setSerializerCharacterContentChunkMapMemoryLimit(
+ Integer serializerCharacterContentChunkMapMemoryLimit) {
+ logSetter("serializerCharacterContentChunkMapMemoryLimit",
serializerCharacterContentChunkMapMemoryLimit);
+ this.serializerCharacterContentChunkMapMemoryLimit =
serializerCharacterContentChunkMapMemoryLimit;
+ }
+
+ public Integer getSerializerMinCharacterContentChunkSize() {
+ return serializerMinCharacterContentChunkSize;
+ }
+
+ /**
+ * Sets the property <code>minCharacterContentChunkSize</code> on
FastInfoset StAX Serializers created and used
+ * by this interceptor. The property controls the <b>minimum</b> size of
character content chunks to be indexed.
+ *
+ * @param serializerMinCharacterContentChunkSize
+ * The <b>minimum</b> size for character content chunks to be
indexed,
+ * measured as a number of characters. The default is typically 0.
+ */
+ public void setSerializerMinCharacterContentChunkSize(Integer
serializerMinCharacterContentChunkSize) {
+ logSetter("serializerMinCharacterContentChunkSize",
serializerMinCharacterContentChunkSize);
+ this.serializerMinCharacterContentChunkSize =
serializerMinCharacterContentChunkSize;
+ }
+
+ public Integer getSerializerMaxCharacterContentChunkSize() {
+ return serializerMaxCharacterContentChunkSize;
+ }
+
+ /**
+ * Sets the property <code>maxCharacterContentChunkSize</code> on
FastInfoset StAX Serializers created and used
+ * by this interceptor. The property controls the <b>maximum</b> size of
character content chunks to be indexed.
+ * Tests have shown that setting this property to lower values reduces CPU
burden of processing, at the expense
+ * of larger sizes of resultant encoded Fast Infoset data.
+ *
+ * @param serializerMaxCharacterContentChunkSize
+ * The <b>maximum</b> size for character content chunks to be
indexed,
+ * measured as a number of characters. The default is typically 32.
+ */
+ public void setSerializerMaxCharacterContentChunkSize(Integer
serializerMaxCharacterContentChunkSize) {
+ logSetter("serializerMaxCharacterContentChunkSize",
serializerMaxCharacterContentChunkSize);
+ this.serializerMaxCharacterContentChunkSize =
serializerMaxCharacterContentChunkSize;
+ }
+
+ public Integer getSerializerAttributeValueMapMemoryLimit() {
+ return serializerAttributeValueMapMemoryLimit;
+ }
+
+ /**
+ * Sets the property <code>attributeValueMapMemoryLimit</code> on
FastInfoset StAX Serializers created and used
+ * by this interceptor. The property controls attribute value map size and
can be used to control
+ * the memory and (indirectly) CPU footprint of processing.
+ *
+ * @param serializerAttributeValueMapMemoryLimit
+ * The value for the limit, measured as a number of Unicode
characters.
+ */
+ public void setSerializerAttributeValueMapMemoryLimit(Integer
serializerAttributeValueMapMemoryLimit) {
+ logSetter("serializerAttributeValueMapMemoryLimit",
serializerAttributeValueMapMemoryLimit);
+ this.serializerAttributeValueMapMemoryLimit =
serializerAttributeValueMapMemoryLimit;
+ }
+
+ private void logSetter(String propertyName, Object propertyValue) {
+ if (LOG.isLoggable(Level.CONFIG)) {
+ LOG.config("Setting " + propertyName + " to " + propertyValue);
+ }
+ }
}
Modified:
cxf/branches/2.7.x-fixes/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java?rev=1463385&r1=1463384&r2=1463385&view=diff
==============================================================================
---
cxf/branches/2.7.x-fixes/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
(original)
+++
cxf/branches/2.7.x-fixes/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
Tue Apr 2 05:08:19 2013
@@ -281,7 +281,16 @@ public class AnnotationsFactoryBeanListe
private void addFastInfosetSupport(InterceptorProvider provider,
FastInfoset annotation) {
if (annotation != null) {
FIStaxInInterceptor in = new FIStaxInInterceptor();
+
FIStaxOutInterceptor out = new
FIStaxOutInterceptor(annotation.force());
+
out.setSerializerAttributeValueMapMemoryLimit(annotation.serializerAttributeValueMapMemoryLimit());
+
out.setSerializerMinAttributeValueSize(annotation.serializerMinAttributeValueSize());
+
out.setSerializerMaxAttributeValueSize(annotation.serializerMaxAttributeValueSize());
+ out.setSerializerCharacterContentChunkMapMemoryLimit(
+
annotation.serializerCharacterContentChunkMapMemoryLimit());
+
out.setSerializerMinCharacterContentChunkSize(annotation.serializerMinCharacterContentChunkSize());
+
out.setSerializerMaxCharacterContentChunkSize(annotation.serializerMaxCharacterContentChunkSize());
+
provider.getInInterceptors().add(in);
provider.getInFaultInterceptors().add(in);
provider.getOutInterceptors().add(out);