Миграция с axiom-api-1.2.6 до версии 1.2.22 - PullRequest
0 голосов
/ 28 января 2020

Я работаю над старым кодом:

import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
import org.apache.axiom.om.impl.llom.OMDocumentImpl;
     .
     .
     .

        MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(outputStream, format);
        if (this.payloadCaching) {
            ((OMDocumentImpl)axiomMessage).internalSerialize(writer);
        } else {
            ((OMDocumentImpl)axiomMessage).internalSerializeAndConsume(writer);
        }

Это компилируется с помощью axiom-api-1.2.6. Тем не менее, он не компилируется с версией 1.2.22. Это ошибка, которую я получаю:

Error:(156, 47) java: no suitable method found for internalSerialize(org.apache.axiom.om.impl.MTOMXMLStreamWriter)
    method org.apache.axiom.om.impl.llom.OMDocumentImpl.internalSerialize(org.apache.axiom.om.impl.common.serializer.push.Serializer,org.apache.axiom.om.OMOutputFormat,boolean) is not applicable
      (actual and formal argument lists differ in length)
    method org.apache.axiom.om.impl.llom.OMDocumentImpl.internalSerialize(org.apache.axiom.om.impl.common.serializer.push.Serializer,org.apache.axiom.om.OMOutputFormat,boolean,boolean) is not applicable
      (actual and formal argument lists differ in length)

Как я могу изменить свой код, чтобы он соответствовал новому API?

Я знаю, как создавать аргументы OMOutputFormat и boolean. Но я не знаю, как создать аргумент Serializer. Могу ли я получить Serializer от writer?

Ниже приведен весь метод. Код записывает SOAPMessage в OutputStream:

public void writeTo(OutputStream outputStream) throws IOException {
    try {
        SOAPMessage axiomMessage = this.targetMessage.getAxiomMessage();
        String charsetEncoding = axiomMessage.getCharsetEncoding();
        OMOutputFormat format = new OMOutputFormat();
        format.setCharSetEncoding(charsetEncoding);
        format.setSOAP11(this.getVersion() == SoapVersion.SOAP_11);
        Iterator attachments = this.getAttachments();
        if (attachments.hasNext()) {
            format.setDoOptimize(true);
        }

        if (outputStream instanceof TransportOutputStream) {
            TransportOutputStream transportOutputStream = (TransportOutputStream)outputStream;
            String contentType = format.getContentType();
            contentType = contentType + "; charset=\"" + charsetEncoding + "\"";
            transportOutputStream.addHeader("Content-Type", contentType);
            String soapAction = this.getSoapAction();
            transportOutputStream.addHeader("SOAPAction", soapAction);
        }

        MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(outputStream, format);
        if (this.payloadCaching) {
            ((OMDocumentImpl)axiomMessage).internalSerialize(writer);
        } else {
            ((OMDocumentImpl)axiomMessage).internalSerializeAndConsume(writer);
        }

        this.writeAttachments(axiomMessage, writer);
        writer.flush();
        outputStream.flush();
    } catch (XMLStreamException var9) {
        throw new AxiomSoapMessageException("Could not write message to OutputStream: " + var9.getMessage(), var9);
    } catch (OMException var10) {
        throw new AxiomSoapMessageException("Could not write message to OutputStream: " + var10.getMessage(), var10);
    }
}
...