[
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: [email protected]
For additional commands, e-mail: [email protected]