Elasticsearch: Java High Level REST Client: MIME type may not contain reserved characters

Created on 30 Aug 2017  路  8Comments  路  Source: elastic/elasticsearch

Elasticsearch Java High Level REST Client version: 5.6.0-SNAPSHOT

JVM version: 1.8.0_112

OS version: MacOS

Description of the problem including expected versus actual behavior:
Expected to perform http request, but got Apache http client error

Steps to reproduce:

SearchResponse response = client.search(
                new SearchRequest().source(
                        new SearchSourceBuilder()
                                .query(QueryBuilders.matchPhraseQuery("field", "text"))));

ES client tries to create a MIME type with semicolon: "application/json; charset=UTF-8"
But it violates Apache http client check:

    /**
     * Creates a new instance of {@link ContentType}.
     *
     * @param mimeType MIME type. It may not be {@code null} or empty. It may not contain
     *        characters {@code <">, <;>, <,>} reserved by the HTTP specification.
     * @param charset charset.
     * @return content type
     */
    public static ContentType create(final String mimeType, final Charset charset) {
        final String normalizedMimeType = Args.notBlank(mimeType, "MIME type").toLowerCase(Locale.ROOT);
        Args.check(valid(normalizedMimeType), "MIME type may not contain reserved characters");
        return new ContentType(normalizedMimeType, charset);
    }

Logs:

Caused by: java.lang.IllegalArgumentException: MIME type may not contain reserved characters
    at org.apache.http.util.Args.check(Args.java:36)
    at org.apache.http.entity.ContentType.create(ContentType.java:206)
    at org.apache.http.entity.ContentType.create(ContentType.java:218)
    at org.elasticsearch.client.Request.createEntity(Request.java:355)
    at org.elasticsearch.client.Request.search(Request.java:338)
    at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:393)
    at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:382)
    at org.elasticsearch.client.RestHighLevelClient.search(RestHighLevelClient.java:323)
    at com.syncplicity.searchservice.application.controllers.SearchController.search(SearchController.java:87)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    ... 89 common frames omitted 
:CorFeatureJava High Level REST Client >bug v5.6.0 v6.0.0-rc1 v7.0.0-beta1

Most helpful comment

Also, I think we should use ContentType.create(String, Charset) instead of ContentType.create(String).

I'm looking at this. Thanks for reporting @sqshq !

All 8 comments

Can you please provide the list of the dependencies of your project using gradle :dependencies or mvn dependency:tree?

Sure, here it is

compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead).
+--- org.springframework.boot:spring-boot-starter-web: -> 1.5.6.RELEASE
|    +--- org.springframework.boot:spring-boot-starter:1.5.6.RELEASE
|    |    +--- org.springframework.boot:spring-boot:1.5.6.RELEASE
|    |    |    +--- org.springframework:spring-core:4.3.10.RELEASE
|    |    |    |    \--- commons-logging:commons-logging:1.2
|    |    |    \--- org.springframework:spring-context:4.3.10.RELEASE
|    |    |         +--- org.springframework:spring-aop:4.3.10.RELEASE
|    |    |         |    +--- org.springframework:spring-beans:4.3.10.RELEASE
|    |    |         |    |    \--- org.springframework:spring-core:4.3.10.RELEASE (*)
|    |    |         |    \--- org.springframework:spring-core:4.3.10.RELEASE (*)
|    |    |         +--- org.springframework:spring-beans:4.3.10.RELEASE (*)
|    |    |         +--- org.springframework:spring-core:4.3.10.RELEASE (*)
|    |    |         \--- org.springframework:spring-expression:4.3.10.RELEASE
|    |    |              \--- org.springframework:spring-core:4.3.10.RELEASE (*)
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:1.5.6.RELEASE
|    |    |    \--- org.springframework.boot:spring-boot:1.5.6.RELEASE (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:1.5.6.RELEASE
|    |    |    +--- ch.qos.logback:logback-classic:1.1.11
|    |    |    |    +--- ch.qos.logback:logback-core:1.1.11
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.22 -> 1.7.25
|    |    |    +--- org.slf4j:jcl-over-slf4j:1.7.25
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- org.slf4j:jul-to-slf4j:1.7.25
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.25
|    |    |    \--- org.slf4j:log4j-over-slf4j:1.7.25
|    |    |         \--- org.slf4j:slf4j-api:1.7.25
|    |    +--- org.springframework:spring-core:4.3.10.RELEASE (*)
|    |    \--- org.yaml:snakeyaml:1.17
|    +--- org.hibernate:hibernate-validator:5.3.5.Final
|    |    +--- javax.validation:validation-api:1.1.0.Final
|    |    +--- org.jboss.logging:jboss-logging:3.3.0.Final -> 3.3.1.Final
|    |    \--- com.fasterxml:classmate:1.3.1 -> 1.3.3
|    +--- com.fasterxml.jackson.core:jackson-databind:2.8.9
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.8.0
|    |    \--- com.fasterxml.jackson.core:jackson-core:2.8.9
|    +--- org.springframework:spring-web:4.3.10.RELEASE
|    |    +--- org.springframework:spring-aop:4.3.10.RELEASE (*)
|    |    +--- org.springframework:spring-beans:4.3.10.RELEASE (*)
|    |    +--- org.springframework:spring-context:4.3.10.RELEASE (*)
|    |    \--- org.springframework:spring-core:4.3.10.RELEASE (*)
|    \--- org.springframework:spring-webmvc:4.3.10.RELEASE
|         +--- org.springframework:spring-aop:4.3.10.RELEASE (*)
|         +--- org.springframework:spring-beans:4.3.10.RELEASE (*)
|         +--- org.springframework:spring-context:4.3.10.RELEASE (*)
|         +--- org.springframework:spring-core:4.3.10.RELEASE (*)
|         +--- org.springframework:spring-expression:4.3.10.RELEASE (*)
|         \--- org.springframework:spring-web:4.3.10.RELEASE (*)
+--- org.springframework.boot:spring-boot-starter-actuator: -> 1.5.6.RELEASE
|    +--- org.springframework.boot:spring-boot-starter:1.5.6.RELEASE (*)
|    \--- org.springframework.boot:spring-boot-actuator:1.5.6.RELEASE
|         +--- org.springframework.boot:spring-boot:1.5.6.RELEASE (*)
|         +--- org.springframework.boot:spring-boot-autoconfigure:1.5.6.RELEASE (*)
|         +--- com.fasterxml.jackson.core:jackson-databind:2.8.9 (*)
|         +--- org.springframework:spring-core:4.3.10.RELEASE (*)
|         \--- org.springframework:spring-context:4.3.10.RELEASE (*)
+--- org.springframework.boot:spring-boot-starter-security: -> 1.5.6.RELEASE
|    +--- org.springframework.boot:spring-boot-starter:1.5.6.RELEASE (*)
|    +--- org.springframework:spring-aop:4.3.10.RELEASE (*)
|    +--- org.springframework.security:spring-security-config:4.2.3.RELEASE
|    |    +--- org.springframework.security:spring-security-core:4.2.3.RELEASE
|    |    |    +--- org.springframework:spring-aop:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|    |    |    +--- org.springframework:spring-beans:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|    |    |    +--- org.springframework:spring-context:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|    |    |    +--- org.springframework:spring-core:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|    |    |    \--- org.springframework:spring-expression:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|    |    +--- org.springframework:spring-aop:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|    |    +--- org.springframework:spring-beans:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|    |    +--- org.springframework:spring-context:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|    |    \--- org.springframework:spring-core:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|    \--- org.springframework.security:spring-security-web:4.2.3.RELEASE
|         +--- org.springframework.security:spring-security-core:4.2.3.RELEASE (*)
|         +--- org.springframework:spring-beans:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|         +--- org.springframework:spring-context:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|         +--- org.springframework:spring-core:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|         +--- org.springframework:spring-expression:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
|         \--- org.springframework:spring-web:4.3.9.RELEASE -> 4.3.10.RELEASE (*)
+--- org.springframework.boot:spring-boot-starter-jetty: -> 1.5.6.RELEASE
|    +--- org.eclipse.jetty:jetty-servlets:9.4.6.v20170531
|    |    +--- org.eclipse.jetty:jetty-continuation:9.4.6.v20170531
|    |    +--- org.eclipse.jetty:jetty-http:9.4.6.v20170531
|    |    |    +--- org.eclipse.jetty:jetty-util:9.4.6.v20170531
|    |    |    \--- org.eclipse.jetty:jetty-io:9.4.6.v20170531
|    |    |         \--- org.eclipse.jetty:jetty-util:9.4.6.v20170531
|    |    +--- org.eclipse.jetty:jetty-util:9.4.6.v20170531
|    |    \--- org.eclipse.jetty:jetty-io:9.4.6.v20170531 (*)
|    +--- org.eclipse.jetty:jetty-webapp:9.4.6.v20170531
|    |    +--- org.eclipse.jetty:jetty-xml:9.4.6.v20170531
|    |    |    \--- org.eclipse.jetty:jetty-util:9.4.6.v20170531
|    |    \--- org.eclipse.jetty:jetty-servlet:9.4.6.v20170531
|    |         \--- org.eclipse.jetty:jetty-security:9.4.6.v20170531
|    |              \--- org.eclipse.jetty:jetty-server:9.4.6.v20170531
|    |                   +--- javax.servlet:javax.servlet-api:3.1.0
|    |                   +--- org.eclipse.jetty:jetty-http:9.4.6.v20170531 (*)
|    |                   \--- org.eclipse.jetty:jetty-io:9.4.6.v20170531 (*)
|    +--- org.eclipse.jetty.websocket:websocket-server:9.4.6.v20170531
|    |    +--- org.eclipse.jetty.websocket:websocket-common:9.4.6.v20170531
|    |    |    +--- org.eclipse.jetty.websocket:websocket-api:9.4.6.v20170531
|    |    |    +--- org.eclipse.jetty:jetty-util:9.4.6.v20170531
|    |    |    \--- org.eclipse.jetty:jetty-io:9.4.6.v20170531 (*)
|    |    +--- org.eclipse.jetty.websocket:websocket-client:9.4.6.v20170531
|    |    |    +--- org.eclipse.jetty:jetty-util:9.4.6.v20170531
|    |    |    +--- org.eclipse.jetty:jetty-io:9.4.6.v20170531 (*)
|    |    |    +--- org.eclipse.jetty:jetty-client:9.4.6.v20170531
|    |    |    |    +--- org.eclipse.jetty:jetty-http:9.4.6.v20170531 (*)
|    |    |    |    \--- org.eclipse.jetty:jetty-io:9.4.6.v20170531 (*)
|    |    |    \--- org.eclipse.jetty.websocket:websocket-common:9.4.6.v20170531 (*)
|    |    +--- org.eclipse.jetty.websocket:websocket-servlet:9.4.6.v20170531
|    |    |    +--- org.eclipse.jetty.websocket:websocket-api:9.4.6.v20170531
|    |    |    \--- javax.servlet:javax.servlet-api:3.1.0
|    |    +--- org.eclipse.jetty:jetty-servlet:9.4.6.v20170531 (*)
|    |    \--- org.eclipse.jetty:jetty-http:9.4.6.v20170531 (*)
|    +--- org.eclipse.jetty.websocket:javax-websocket-server-impl:9.4.6.v20170531
|    |    +--- org.eclipse.jetty:jetty-annotations:9.4.6.v20170531
|    |    |    +--- org.eclipse.jetty:jetty-plus:9.4.6.v20170531
|    |    |    |    \--- org.eclipse.jetty:jetty-webapp:9.4.6.v20170531 (*)
|    |    |    +--- org.eclipse.jetty:jetty-webapp:9.4.6.v20170531 (*)
|    |    |    +--- javax.annotation:javax.annotation-api:1.2
|    |    |    +--- org.ow2.asm:asm:5.1
|    |    |    \--- org.ow2.asm:asm-commons:5.1
|    |    |         \--- org.ow2.asm:asm-tree:5.1
|    |    |              \--- org.ow2.asm:asm:5.1
|    |    +--- org.eclipse.jetty.websocket:javax-websocket-client-impl:9.4.6.v20170531
|    |    |    +--- org.eclipse.jetty.websocket:websocket-client:9.4.6.v20170531 (*)
|    |    |    \--- javax.websocket:javax.websocket-api:1.0
|    |    +--- org.eclipse.jetty.websocket:websocket-server:9.4.6.v20170531 (*)
|    |    \--- javax.websocket:javax.websocket-api:1.0
|    \--- org.mortbay.jasper:apache-el:8.0.33
+--- org.elasticsearch:elasticsearch:5.6.0-SNAPSHOT
|    +--- org.apache.lucene:lucene-core:6.6.0
|    +--- org.apache.lucene:lucene-analyzers-common:6.6.0
|    +--- org.apache.lucene:lucene-backward-codecs:6.6.0
|    +--- org.apache.lucene:lucene-grouping:6.6.0
|    +--- org.apache.lucene:lucene-highlighter:6.6.0
|    +--- org.apache.lucene:lucene-join:6.6.0
|    +--- org.apache.lucene:lucene-memory:6.6.0
|    +--- org.apache.lucene:lucene-misc:6.6.0
|    +--- org.apache.lucene:lucene-queries:6.6.0
|    +--- org.apache.lucene:lucene-queryparser:6.6.0
|    +--- org.apache.lucene:lucene-sandbox:6.6.0
|    +--- org.apache.lucene:lucene-spatial:6.6.0
|    +--- org.apache.lucene:lucene-spatial-extras:6.6.0
|    +--- org.apache.lucene:lucene-spatial3d:6.6.0
|    +--- org.apache.lucene:lucene-suggest:6.6.0
|    +--- org.elasticsearch:securesm:1.1
|    +--- net.sf.jopt-simple:jopt-simple:5.0.2
|    +--- com.carrotsearch:hppc:0.7.1
|    +--- joda-time:joda-time:2.9.5 -> 2.9.9
|    +--- org.yaml:snakeyaml:1.15 -> 1.17
|    +--- com.fasterxml.jackson.core:jackson-core:2.8.6 -> 2.8.9
|    +--- com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.8.6 -> 2.8.9
|    +--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.8.6 -> 2.8.9
|    +--- com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.8.6 -> 2.8.9
|    +--- com.tdunning:t-digest:3.0
|    +--- org.hdrhistogram:HdrHistogram:2.1.9
|    +--- org.apache.logging.log4j:log4j-api:2.8.2 -> 2.7
|    \--- org.elasticsearch:jna:4.4.0-1
+--- org.elasticsearch.client:elasticsearch-rest-client:5.6.0-SNAPSHOT
|    +--- org.apache.httpcomponents:httpclient:4.5.2 -> 4.5.3
|    +--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6
|    +--- org.apache.httpcomponents:httpasyncclient:4.1.2 -> 4.1.3
|    +--- org.apache.httpcomponents:httpcore-nio:4.4.5
|    +--- commons-codec:commons-codec:1.10
|    \--- commons-logging:commons-logging:1.1.3 -> 1.2
+--- org.elasticsearch.client:elasticsearch-rest-high-level-client:5.6.0-SNAPSHOT
|    +--- org.elasticsearch:elasticsearch:5.6.0-SNAPSHOT (*)
|    +--- org.elasticsearch.client:elasticsearch-rest-client:5.6.0-SNAPSHOT (*)
|    +--- org.elasticsearch.plugin:parent-join-client:5.6.0-SNAPSHOT
|    \--- org.elasticsearch.plugin:aggs-matrix-stats-client:5.6.0-SNAPSHOT
+--- io.springfox:springfox-swagger2:2.7.0
|    +--- io.swagger:swagger-annotations:1.5.13
|    +--- io.swagger:swagger-models:1.5.13
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.8.5 -> 2.8.0
|    |    +--- org.slf4j:slf4j-api:1.7.22 -> 1.7.25
|    |    \--- io.swagger:swagger-annotations:1.5.13
|    +--- io.springfox:springfox-spi:2.7.0
|    |    \--- io.springfox:springfox-core:2.7.0
|    |         +--- net.bytebuddy:byte-buddy:1.6.14
|    |         +--- com.google.guava:guava:18.0 -> 20.0
|    |         +--- com.fasterxml:classmate:1.3.3
|    |         +--- org.slf4j:slf4j-api:1.7.24 -> 1.7.25
|    |         +--- org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE
|    |         |    +--- org.springframework:spring-beans:4.0.9.RELEASE -> 4.3.10.RELEASE (*)
|    |         |    +--- org.springframework:spring-context:4.0.9.RELEASE -> 4.3.10.RELEASE (*)
|    |         |    +--- org.springframework:spring-aop:4.0.9.RELEASE -> 4.3.10.RELEASE (*)
|    |         |    \--- org.slf4j:slf4j-api:1.7.10 -> 1.7.25
|    |         \--- org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE
|    |              +--- org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE (*)
|    |              \--- org.slf4j:slf4j-api:1.7.10 -> 1.7.25
|    +--- io.springfox:springfox-schema:2.7.0
|    |    +--- io.springfox:springfox-core:2.7.0 (*)
|    |    \--- io.springfox:springfox-spi:2.7.0 (*)
|    +--- io.springfox:springfox-swagger-common:2.7.0
|    |    +--- io.swagger:swagger-annotations:1.5.13
|    |    +--- io.swagger:swagger-models:1.5.13 (*)
|    |    +--- io.springfox:springfox-spi:2.7.0 (*)
|    |    +--- io.springfox:springfox-schema:2.7.0 (*)
|    |    +--- io.springfox:springfox-spring-web:2.7.0
|    |    |    +--- org.reflections:reflections:0.9.11
|    |    |    |    +--- com.google.guava:guava:20.0
|    |    |    |    \--- org.javassist:javassist:3.21.0-GA
|    |    |    +--- com.google.guava:guava:18.0 -> 20.0
|    |    |    +--- com.fasterxml:classmate:1.3.3
|    |    |    +--- org.slf4j:slf4j-api:1.7.24 -> 1.7.25
|    |    |    +--- org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE (*)
|    |    |    +--- org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE (*)
|    |    |    \--- io.springfox:springfox-spi:2.7.0 (*)
|    |    +--- com.google.guava:guava:18.0 -> 20.0
|    |    +--- com.fasterxml:classmate:1.3.3
|    |    +--- org.slf4j:slf4j-api:1.7.24 -> 1.7.25
|    |    +--- org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE (*)
|    |    \--- org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE (*)
|    +--- io.springfox:springfox-spring-web:2.7.0 (*)
|    +--- com.google.guava:guava:18.0 -> 20.0
|    +--- com.fasterxml:classmate:1.3.3
|    +--- org.slf4j:slf4j-api:1.7.24 -> 1.7.25
|    +--- org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE (*)
|    +--- org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE (*)
|    \--- org.mapstruct:mapstruct:1.1.0.Final
+--- io.springfox:springfox-swagger-ui:2.7.0
|    \--- io.springfox:springfox-spring-web:2.7.0 (*)
\--- net.logstash.logback:logstash-logback-encoder:4.8
     +--- ch.qos.logback:logback-core:1.1.6 -> 1.1.11
     \--- com.fasterxml.jackson.core:jackson-databind:2.6.5 -> 2.8.9 (*)

My Elasticsearch dependencies are

'org.elasticsearch:elasticsearch:5.6.0-SNAPSHOT',
'org.elasticsearch.client:elasticsearch-rest-client:5.6.0-SNAPSHOT',
'org.elasticsearch.client:elasticsearch-rest-high-level-client:5.6.0-SNAPSHOT'

Thanks!

The elasticsearch-rest-high-level-client is supposed to use httpclient in version 4.5.2 an httpcore in version 4.4.5, but in your case the dependency manager resolved it as 4.5.3 and 4.4.6.

The release note for httpcore 4.4.6 has the following change:

  • [HTTPCORE-423] Fixed MIME type validation in ContentType#create(String) method.
    Contributed by Oleg Kalnichevski

and I'm sure this is the error you have. You should look in your dependency tree why the dependency is resolved in a different version.

So it's a good thing because we can expect the same error if we upgrade the Apache HTTP Client, and that also explains why we don't have this issue in our tests.

Also, I think we should use ContentType.create(String, Charset) instead of ContentType.create(String).

I'm looking at this. Thanks for reporting @sqshq !

I know you guys will fix it very soon, but just in case someone has the same problem right now:

  • root cause is Spring Boot's overriding dependency versions mechanism via parent POM (parent wins strategy, gradle resolutionStrategy.force won't help here)
  • temporary workaround is to specify those dependencies explicitly:
compile 'org.apache.httpcomponents:httpclient:4.5.2',
compile 'org.apache.httpcomponents:httpcore:4.4.5'

@tlrx another option would be using BasicHeaderValueParser.parseElements(String, HeaderValueParser) and ContentType.create(String, NameValuePair...).
To avoid parsing and creating the content type for every request and/or bulk item, It might be a good idea to prepare a mapping between XContentType and ContentType.

see tsachev/elasticsearch@d94ce7f9bc5b048ced8af48a9d716a0362abb322

@tsachev Thanks for your suggestion, I created #26457. Since creating a ContentType is not a costly operation I'm not sure it worth to keep a mapping around... But maybe @cbuescher has another opinion.

Ignore the mapping thing. I was with the impression tha a ContentType is created for every bulk item, which is obviously not the case.

Was this page helpful?
0 / 5 - 0 ratings