phax / phase4

phase4 - AS4 client and server for integration into existing systems. Specific support for Peppol and CEF eDelivery built-in.
Apache License 2.0
154 stars 47 forks source link

java.lang.NoSuchMethodError: MimeUtil.cleanContentType(javax.mail.internet.MimePart, java.lang.String) #96

Closed MakakWasTaken closed 2 years ago

MakakWasTaken commented 2 years ago

When I am trying to run the following code I recently started to get an exception:

// Main sending
AS4BidirectionalClientHelper.sendAS4UserMessageAndReceiveAS4SignalMessage (m_aCryptoFactory,
        pmodeResolver (),
        incomingAttachmentFactory (),
        incomingProfileSelector (),
        aUserMsg,
        m_aLocale,
        m_sEndpointURL,
        m_aBuildMessageCallback,
        m_aOutgoingDumper,
        m_aIncomingDumper,
        m_aRetryCallback,
        m_aResponseConsumer,
        m_aSignalMsgConsumer);

I suspect that the error might show up because I use both the jakarta.mail package and the javax.mail package. The error states that the method does not exist, but when I look at the error location I can see that the method does in fact exist.

I am using:

I am getting the following exception:

java.lang.NoSuchMethodError: 'java.lang.String com.sun.mail.util.MimeUtil.cleanContentType(javax.mail.internet.MimePart, java.lang.String)'
    at javax.mail.internet.MimeMessage.getContentType(MimeMessage.java:1029) ~[javax.mail-1.6.2.jar:1.6.2]
    at com.helger.phase4.http.HttpMimeMessageEntity.create(HttpMimeMessageEntity.java:121) ~[phase4-lib-1.4.0.jar:1.4.0]
    at com.helger.phase4.client.AS4ClientUserMessage.buildMessage(AS4ClientUserMessage.java:728) ~[phase4-lib-1.4.0.jar:1.4.0]
    at com.helger.phase4.client.AbstractAS4Client.sendMessageWithRetries(AbstractAS4Client.java:456) ~[phase4-lib-1.4.0.jar:1.4.0]
    at com.helger.phase4.sender.AS4BidirectionalClientHelper.sendAS4UserMessageAndReceiveAS4SignalMessage(AS4BidirectionalClientHelper.java:132) ~[phase4-lib-1.4.0.jar:1.4.0]
    at com.nomnom.communicationserver.entsog.Phase4ENTSOGSender$AbstractENTSOGUserMessageBuilder.mainSendMessage(Phase4ENTSOGSender.java:198) ~[classes/:na]
    at com.helger.phase4.sender.AbstractAS4MessageBuilder.sendMessage(AbstractAS4MessageBuilder.java:630) ~[phase4-lib-1.4.0.jar:1.4.0]
    at com.helger.phase4.sender.AbstractAS4UserMessageBuilder.sendMessageAndCheckForReceipt(AbstractAS4UserMessageBuilder.java:725) ~[phase4-lib-1.4.0.jar:1.4.0]
    at com.helger.phase4.sender.AbstractAS4UserMessageBuilder.sendMessageAndCheckForReceipt(AbstractAS4UserMessageBuilder.java:694) ~[phase4-lib-1.4.0.jar:1.4.0]
    at com.nomnom.communicationserver.communication.AS4Helper.sendMessage(AS4Helper.java:91) ~[classes/:na]
    at com.nomnom.communicationserver.servlet.SenderServlet.doPost(SenderServlet.java:141) ~[classes/:na]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[tomcat-embed-core-9.0.65.jar:4.0.FR]
phax commented 2 years ago

You need to use Jakarta Mail 1.6.7 because all the libraries are using Java 1.8 as the Baseline. Jakarta Mail 2.x requires Java 11 and is not backwards compatible.

Quote from https://eclipse-ee4j.github.io/mail/

Jakarta Mail 2.0.0 release is the first release with package namespace changed to jakarta.mail. The main jar file is located at com.sun.mail:jakarta.mail. This release contains no other enhancements nor bug fixes, except for the minimal required Java SE version which is now Java SE 8. This is also the release included in Jakarta EE 9. Applications are able to switch to this new version by just changing all imports that use javax.mail. to instead use jakarta.mail..

hth

MakakWasTaken commented 2 years ago

Yes I got the other part of my application working with 1.6.7 as well. So it is functional now. I was just under the impression that phase4 used Jakarta instead of javax.

phax commented 2 years ago

Okay cool. Thanks for the update. Feel free to cast a vote at https://github.com/phax/ph-commons/discussions/29 as well :)