ws-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andreas Veithen (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AXIOM-467) Cannot read "quoted-printable" encoded data from MIME part
Date Sat, 16 May 2015 01:28:00 GMT

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

Andreas Veithen commented on AXIOM-467:
---------------------------------------

I'm extremely reluctant to switch MIME4J to relax mode. There are several reasons for that:

* MIME4J is designed to process email messages. There are thousands of software products that
process email messages, and many of them fail (or failed) to follow the standards strictly.
To be interoperable, MIME4J has no other choice than to support messages produced by these
non conforming systems (and it's probably much more lenient than JavaMail). The situation
is fairly different for Web services: most systems that produce SwA or MTOM messages effectively
only use a small subset of the MIME specs (e.g. most implementations will only ever use the
"binary" encoding) and they correctly implement the parts of the specs they use. That means
that in contrast to email processing, there should be much less need to support interoperability
with non conforming systems. That's why I was asking for a real world example of a message
that would require this.

* Building implementations of communication protocols that are more lenient than necessary
effectively encourages people to build implementations that rely on this and don't follow
the standards. That's how you end up with issues like this: http://stackoverflow.com/questions/5941635/parser-for-net-that-will-handle-invalid-xml.
That's generally a bad thing to do because it eventually makes lives harder for everybody.

* Axiom's public API doesn't depend on MIME4J, only its implementation does. That means that
we have the freedom to replace MIME4J by something else in the future (and this is BTW how
we replaced a mixture of JavaMail and custom code by MIME4J in Axiom 1.2.13). Using relax
mode makes this more difficult, precisely because of the backward incompatibility argument.

> Cannot read "quoted-printable" encoded data from MIME part
> ----------------------------------------------------------
>
>                 Key: AXIOM-467
>                 URL: https://issues.apache.org/jira/browse/AXIOM-467
>             Project: Axiom
>          Issue Type: Bug
>          Components: API
>    Affects Versions: 1.2.13, 1.2.14
>            Reporter: Detelin Hadzhiev
>             Fix For: 1.2.16
>
>         Attachments: MtomInvalidQPAttachment.txt, axiom-1.2.13.patch, axiom_1.2.7.patch
>
>
> Processing "quoted-printable" encoded data in the axiom v.1.2.13 seems to be backward
incompatible as it was in the axiom. 1.2.7.
> I provided one and the same test case which illustrates how the test is working in the
axiom 1.2.7 but not in 1.2.13.
> In the axiom 1.2.13 I got the following exception:
> org.apache.axiom.om.OMException: org.apache.axiom.ext.io.StreamCopyException: Error reading
from source
> 	at org.apache.axiom.attachments.PartContentFactory.createPartContent(PartContentFactory.java:153)
> 	at org.apache.axiom.attachments.PartImpl.fetch(PartImpl.java:176)
> 	at org.apache.axiom.attachments.PartImpl.getContent(PartImpl.java:149)
> 	at org.apache.axiom.attachments.PartImpl.getInputStream(PartImpl.java:224)
> 	at org.apache.axiom.attachments.PartDataSource.getInputStream(PartDataSource.java:44)
> 	at javax.activation.DataHandler.getInputStream(DataHandler.java:238)
> 	at org.apache.axiom.attachments.QuotedPrintablePartTest.testReadStreamFromPart(QuotedPrintablePartTest.java:38)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:601)
> 	at junit.framework.TestCase.runTest(TestCase.java:168)
> 	at junit.framework.TestCase.runBare(TestCase.java:134)
> 	at junit.framework.TestResult$1.protect(TestResult.java:110)
> 	at junit.framework.TestResult.runProtected(TestResult.java:128)
> 	at junit.framework.TestResult.run(TestResult.java:113)
> 	at junit.framework.TestCase.run(TestCase.java:124)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:243)
> 	at junit.framework.TestSuite.run(TestSuite.java:238)
> 	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:131)
> 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
> Caused by: org.apache.axiom.ext.io.StreamCopyException: Error reading from source
> 	at org.apache.axiom.attachments.utils.BAAOutputStream.readFrom(BAAOutputStream.java:114)
> 	at org.apache.axiom.attachments.impl.BufferUtils.inputStream2OutputStream(BufferUtils.java:76)
> 	at org.apache.axiom.attachments.PartContentFactory.createPartContent(PartContentFactory.java:119)
> 	... 24 more
> Caused by: java.io.IOException: Found LF without CR
> 	at org.apache.james.mime4j.codec.QuotedPrintableInputStream.read0(QuotedPrintableInputStream.java:195)
> 	at org.apache.james.mime4j.codec.QuotedPrintableInputStream.read(QuotedPrintableInputStream.java:317)
> 	at org.apache.axiom.attachments.utils.BAAOutputStream.readFrom(BAAOutputStream.java:112)
> 	... 26 more
> The root cause of this exception is that AXIOM forces usage of the STRICT mode of MIME4J
for decoding found in org.apache.axiom.attachments.MIMEMessage class
>     MimeConfig config = new MimeConfig();
>     config.setStrictParsing(true);
> The default behavior MIME4J is SILENT(relaxed)  mode, if the strict parsing is not enforced
that the test will pass successfully.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
For additional commands, e-mail: dev-help@ws.apache.org


Mime
View raw message