You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@karaf.apache.org by "Grzegorz Grzybek (Jira)" <ji...@apache.org> on 2021/03/23 13:28:00 UTC

[jira] [Comment Edited] (KARAF-6703) Spec features and cleanup

    [ https://issues.apache.org/jira/browse/KARAF-6703?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17307053#comment-17307053 ] 

Grzegorz Grzybek edited comment on KARAF-6703 at 3/23/21, 1:27 PM:
-------------------------------------------------------------------

A little investigation about Activation API:

I had problem with CXF ("fixed" with CXF-8380) and attachments:
{noformat}
Caused by: java.lang.NullPointerException: mimeType
	at java.awt.datatransfer.DataFlavor.<init>(DataFlavor.java:430)
	at javax.activation.ActivationDataFlavor.<init>(ActivationDataFlavor.java:113)
	at javax.activation.DataHandler.<init>(DataHandler.java:41)
	at org.apache.cxf.jaxrs.provider.MultipartProvider$MessageBodyWriterDataHandler.<init>(MultipartProvider.java:448)
	at org.apache.cxf.jaxrs.provider.MultipartProvider.getHandlerForObject(MultipartProvider.java:401)
	at org.apache.cxf.jaxrs.provider.MultipartProvider.getHandlerForObject(MultipartProvider.java:409)
	at org.apache.cxf.jaxrs.provider.MultipartProvider.createDataHandler(MultipartProvider.java:353)
	at org.apache.cxf.jaxrs.provider.MultipartProvider.createDataHandler(MultipartProvider.java:327)
	at org.apache.cxf.jaxrs.provider.MultipartProvider.getAttachments(MultipartProvider.java:311)
...
{noformat}

{{javax.activation.DataHandler}} constructor is fascinating.

In what I think that should be canonical (at least for JDK8):
* [hg.openjdk.java.net/jdk8u/jdk8u/jaxws|http://hg.openjdk.java.net/jdk8u/jdk8u/jaxws/file/2534e08d1f08/src/share/jaf_classes/javax/activation/DataHandler.java]
* [github.com/javaee/activation, 1.2.0 tag|https://github.com/javaee/activation/blob/JAF-1_2_0/activation/src/main/java/javax/activation/DataHandler.java]
* [github.com/eclipse-ee4j/jaf, 1.2.2 tag|https://github.com/eclipse-ee4j/jaf/blob/1.2.2/activation/src/main/java/javax/activation/DataHandler.java]

we have:
{code:java}
    public DataHandler(DataSource ds) {
	// save a reference to the incoming DS
	dataSource = ds;
	oldFactory = factory; // keep track of the factory
    }
{code}

SMX version of org.apache.servicemix.specs/org.apache.servicemix.specs.activation-api-1.2.1/1.2.1_3 but also org.apache.servicemix.specs/org.apache.servicemix.specs.activation-api-1.1/2.9.0
{code:java}
    public DataHandler(DataSource ds) {
        this.ds = ds;
        this.flavor = new ActivationDataFlavor(ds.getContentType(), null);
    }
{code}

where {{javax.activation.ActivationDataFlavor}} extends {{java.awt.datatransfer.DataFlavor}} and AWT's DataFlavor has:
{code:java}
public DataFlavor(String mimeType, String humanPresentableName) {
    super();
    if (mimeType == null) {
        throw new NullPointerException("mimeType");
    }
{code}

But even:
* [javax/activation/DataHandler.java in JDK 6|http://hg.openjdk.java.net/jdk6/jdk6/jaxws/file/4b3bab9533cd/drop_included/jaf_src/src/javax/activation/DataHandler.java]
* [javax/activation/DataHandler.java in JDK 7|http://hg.openjdk.java.net/jdk7u/jdk7u/jaxws/file/4a302acff4de/src/share/jaf_classes/javax/activation/DataHandler.java]

have:
{code:java}
    public DataHandler(DataSource ds) {
        // save a reference to the incoming DS
        dataSource = ds;
        oldFactory = factory; // keep track of the factory
    }
{code}

The SMX version of activation API comes from org.apache.geronimo.specs/geronimo-activation_1.1_spec and was added with DataHandler(DataSource ds) constructor that uses ActivationDataFlavor in https://issues.apache.org/jira/browse/GERONIMO-2466 [back in 2006|https://github.com/apache/geronimo-specs/commit/70028d2cce20067e79d8a15f4bea4998f3f1f918].

DataHandler.java from activation API 1.1 is a copy of DataHandler.java from activation API 1.0.2 in Geronimo specs repository and ActivationDataFlavor usage dates [back to 2004|https://github.com/apache/geronimo-specs/commit/af8f64656e3386f7c26f2b61b403a98a8be19d93] where the track is lost - I don't have any reference to Jira/BZ number in this commit...

Long story short: SMX version of Activation API is wrong.


was (Author: gzres):
A little investigation about Activation API:

I had problem with CXF and attachments:
{noformat}
Caused by: java.lang.NullPointerException: mimeType
	at java.awt.datatransfer.DataFlavor.<init>(DataFlavor.java:430)
	at javax.activation.ActivationDataFlavor.<init>(ActivationDataFlavor.java:113)
	at javax.activation.DataHandler.<init>(DataHandler.java:41)
	at org.apache.cxf.jaxrs.provider.MultipartProvider$MessageBodyWriterDataHandler.<init>(MultipartProvider.java:448)
	at org.apache.cxf.jaxrs.provider.MultipartProvider.getHandlerForObject(MultipartProvider.java:401)
	at org.apache.cxf.jaxrs.provider.MultipartProvider.getHandlerForObject(MultipartProvider.java:409)
	at org.apache.cxf.jaxrs.provider.MultipartProvider.createDataHandler(MultipartProvider.java:353)
	at org.apache.cxf.jaxrs.provider.MultipartProvider.createDataHandler(MultipartProvider.java:327)
	at org.apache.cxf.jaxrs.provider.MultipartProvider.getAttachments(MultipartProvider.java:311)
...
{noformat}

{{javax.activation.DataHandler}} constructor is fascinating.

In what I think that should be canonical (at least for JDK8):
* [hg.openjdk.java.net/jdk8u/jdk8u/jaxws|http://hg.openjdk.java.net/jdk8u/jdk8u/jaxws/file/2534e08d1f08/src/share/jaf_classes/javax/activation/DataHandler.java]
* [github.com/javaee/activation, 1.2.0 tag|https://github.com/javaee/activation/blob/JAF-1_2_0/activation/src/main/java/javax/activation/DataHandler.java]
* [github.com/eclipse-ee4j/jaf, 1.2.2 tag|https://github.com/eclipse-ee4j/jaf/blob/1.2.2/activation/src/main/java/javax/activation/DataHandler.java]

we have:
{code:java}
    public DataHandler(DataSource ds) {
	// save a reference to the incoming DS
	dataSource = ds;
	oldFactory = factory; // keep track of the factory
    }
{code}

SMX version of org.apache.servicemix.specs/org.apache.servicemix.specs.activation-api-1.2.1/1.2.1_3 but also org.apache.servicemix.specs/org.apache.servicemix.specs.activation-api-1.1/2.9.0
{code:java}
    public DataHandler(DataSource ds) {
        this.ds = ds;
        this.flavor = new ActivationDataFlavor(ds.getContentType(), null);
    }
{code}

where {{javax.activation.ActivationDataFlavor}} extends {{java.awt.datatransfer.DataFlavor}} and AWT's DataFlavor has:
{code:java}
public DataFlavor(String mimeType, String humanPresentableName) {
    super();
    if (mimeType == null) {
        throw new NullPointerException("mimeType");
    }
{code}

But even:
* [javax/activation/DataHandler.java in JDK 6|http://hg.openjdk.java.net/jdk6/jdk6/jaxws/file/4b3bab9533cd/drop_included/jaf_src/src/javax/activation/DataHandler.java]
* [javax/activation/DataHandler.java in JDK 7|http://hg.openjdk.java.net/jdk7u/jdk7u/jaxws/file/4a302acff4de/src/share/jaf_classes/javax/activation/DataHandler.java]

have:
{code:java}
    public DataHandler(DataSource ds) {
        // save a reference to the incoming DS
        dataSource = ds;
        oldFactory = factory; // keep track of the factory
    }
{code}

The SMX version of activation API comes from org.apache.geronimo.specs/geronimo-activation_1.1_spec and was added with DataHandler(DataSource ds) constructor that uses ActivationDataFlavor in https://issues.apache.org/jira/browse/GERONIMO-2466 [back in 2006|https://github.com/apache/geronimo-specs/commit/70028d2cce20067e79d8a15f4bea4998f3f1f918].

DataHandler.java from activation API 1.1 is a copy of DataHandler.java from activation API 1.0.2 in Geronimo specs repository and ActivationDataFlavor usage dates [back to 2004|https://github.com/apache/geronimo-specs/commit/af8f64656e3386f7c26f2b61b403a98a8be19d93] where the track is lost - I don't have any reference to Jira/BZ number in this commit...

Long story short: SMX version of Activation API is wrong.

> Spec features and cleanup
> -------------------------
>
>                 Key: KARAF-6703
>                 URL: https://issues.apache.org/jira/browse/KARAF-6703
>             Project: Karaf
>          Issue Type: Task
>          Components: karaf
>            Reporter: Francois Papon
>            Assignee: Jean-Baptiste Onofré
>            Priority: Major
>
> As already discussed, we should remove the lib/jdk9plus folder and all spec packages from etc/jre.properties to use spec features instead.
> That will give us more control in the specs version and support of JDK.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)